Template:E 2D utilities

From Rosetta Code
Revision as of 01:59, 25 July 2009 by rosettacode>Kevin Reid (extract from [[Spiral#E] to template)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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 {
         print(<import:java.lang.makeString>.format("%3d", [flex2DArray[y, x]]))
       }
       println()
     }
   }
   to get(r, c) { return storage[r * cols + c] }
   to put(r, c, v) { storage[r * cols + c] := v }
 }

}</lang>