Template:E 2D utilities: Difference between revisions

From Rosetta Code
Content added Content deleted
m (bugfix: send print output properly)
(avoid extra whitespace)
Line 1: Line 1:
<noinclude>Some [[Category:E]] library code for the [[Spiral]] and [[Zig Zag]] tasks. Perhaps ought to be put into generally available E data structure/math libraries.</noinclude>
<noinclude>Some [[Category:E]] library code for the [[Spiral]] and [[Zig Zag]] tasks. Perhaps ought to be put into generally available E data structure/math libraries.


<lang e>/** Missing scalar multiplication, but we don't need it. */
</noinclude><lang e>/** Missing scalar multiplication, but we don't need it. */
def makeVector2(x, y) {
def makeVector2(x, y) {
return def vector {
return def vector {

Revision as of 11:28, 25 July 2009

Some library code for the Spiral and Zig Zag tasks. Perhaps ought to be put into generally available E data structure/math libraries.

<lang e>/** Missing scalar multiplication, but we don't need it. */ def makeVector2(x, y) {

 return def vector {
   to x() { return x }
   to y() { return y }
   to add(other) { return makeVector2(x + other.x(), y + other.y()) }
   to clockwise() { return makeVector2(-y, x) }
 }

}

/** Bugs: (1) The printing is specialized. (2) No bounds check on the column. */ def makeFlex2DArray(rows, cols) {

 def storage := ([null] * (rows * cols)).diverge()
 return def flex2DArray {
   to __printOn(out) {
     for y in 0..!rows {
       for x in 0..!cols {
         out.print(<import:java.lang.makeString>.format("%3d", [flex2DArray[y, x]]))
       }
       out.println()
     }
   }
   to get(r, c) { return storage[r * cols + c] }
   to put(r, c, v) { storage[r * cols + c] := v }
 }

}</lang>