Template:E 2D utilities

From Rosetta Code
Revision as of 15:29, 11 October 2010 by rosettacode>Mwn3d (Template template)

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



This is a template. There are many others. See Category:RCTemplates for a complete list of templates.

<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>