File: Array2D.sc

package info (click to toggle)
supercollider 1%3A3.10.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 45,496 kB
  • sloc: cpp: 283,513; lisp: 74,040; ansic: 72,252; sh: 23,016; python: 7,175; makefile: 1,087; perl: 766; java: 677; yacc: 314; lex: 175; ruby: 136; objc: 65; xml: 15
file content (62 lines) | stat: -rw-r--r-- 1,257 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Array2D : Collection {
	var <rows, <cols, <array;
	*new { arg rows=1, cols=1;
		^super.new.init(rows, cols);
	}
	init { arg argRows, argCols;
		rows = argRows;
		cols = argCols;
		array = Array.newClear(rows * cols);
	}

	at { arg row, col;
		^array.at(row*cols + col)
	}
	put { arg row, col, val;
		array.put(row*cols + col, val)
	}

	asArray { ^array }
	*fromArray { arg rows,cols, array;
		^this.new(rows,cols).with(array);
	}
	with { arg aarray;	array = aarray; }

	do { arg func;
		array.do(func)
	}
	colsDo { arg func;
		cols.do({ arg ci;
			func.value( Array.fill(rows,{ arg ri; this.at(ri,ci) }), ci )
		})
	}
	rowsDo { arg func;
		rows.do({ arg ri;
			func.value( Array.fill(cols,{ arg ci; this.at(ri,ci) }), ri )
		})
	}

	colAt { arg ci;
		^Array.fill(rows,{ arg ri; this.at(ri,ci) })
	}
	rowAt { arg ri;
		^array.copyRange(ri * cols, ri * cols + cols - 1)
	}

	// overide Array
	// add { ^thisMethod.shouldNotImplement }
	printOn { arg stream;
		// not a compileable string
		stream << this.class.name << "[ " ;
		this.rowsDo({ arg r;
			r.printOn(stream);
		});
		stream << " ]" ;
	}
	storeOn { arg stream;
		var title;
		stream << this.class.name << ".fromArray("
			<<<* [rows,cols,this.asArray] << ")";
		this.storeModifiersOn(stream);
	}
}