aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/llgcode/ps/operators_array.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/llgcode/ps/operators_array.go')
-rw-r--r--vendor/github.com/llgcode/ps/operators_array.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/vendor/github.com/llgcode/ps/operators_array.go b/vendor/github.com/llgcode/ps/operators_array.go
new file mode 100644
index 0000000..f6cd3a1
--- /dev/null
+++ b/vendor/github.com/llgcode/ps/operators_array.go
@@ -0,0 +1,99 @@
+// Copyright 2010 The postscript-go Authors. All rights reserved.
+// created: 13/12/2010 by Laurent Le Goff
+
+package ps
+
+//int array array -> Create array of length int
+func array(interpreter *Interpreter) {
+ interpreter.Push(make([]Value, interpreter.PopInt()))
+}
+
+//array length int -> Return number of elements in array
+func lengtharray(interpreter *Interpreter) {
+ interpreter.Push(float64(len(interpreter.Pop().([]Value))))
+}
+
+//array index get any -> Return array element indexed by index
+func getarray(interpreter *Interpreter) {
+ index := interpreter.PopInt()
+ array := interpreter.Pop().([]Value)
+ interpreter.Push(array[index])
+}
+
+//array index any put – -> Put any into array at index
+func putarray(interpreter *Interpreter) {
+ value := interpreter.Pop()
+ index := interpreter.PopInt()
+ array := interpreter.Pop().([]Value)
+ array[index] = value
+}
+
+//array index count getinterval subarray -> Return subarray of array starting at index for count elements
+func getinterval(interpreter *Interpreter) {
+ count := interpreter.PopInt()
+ index := interpreter.PopInt()
+ array := interpreter.Pop().([]Value)
+ subarray := make([]Value, count)
+ copy(subarray, array[index:index+count])
+ interpreter.Push(subarray)
+}
+
+//array1 index array2 putinterval – Replace subarray of array1 starting at index by array2|packedarray2
+func putinterval(interpreter *Interpreter) {
+ array2 := interpreter.Pop().([]Value)
+ index := interpreter.PopInt()
+ array1 := interpreter.Pop().([]Value)
+ for i, v := range array2 {
+ array1[i+index] = v
+ }
+}
+
+// any0 … anyn−1 array astore array
+// stores the objects any0 to anyn−1 from the operand stack into array, where n is the length of array
+func astore(interpreter *Interpreter) {
+ array := interpreter.Pop().([]Value)
+ n := len(array)
+ for i := 0; i < n; i++ {
+ array[i] = interpreter.Pop()
+ }
+}
+
+//array aload any0 … any-1 array
+//Push all elements of array on stack
+func aload(interpreter *Interpreter) {
+ array := interpreter.Pop().([]Value)
+ for _, v := range array {
+ interpreter.Push(v)
+ }
+ interpreter.Push(array)
+}
+
+//array proc forall – Execute proc for each element of array
+func forallarray(interpreter *Interpreter) {
+ proc := NewProcedure(interpreter.PopProcedureDefinition())
+ array := interpreter.Pop().([]Value)
+ for _, v := range array {
+ interpreter.Push(v)
+ proc.Execute(interpreter)
+ }
+}
+
+var packing bool = false
+
+func currentpacking(interpreter *Interpreter) {
+ interpreter.Push(packing)
+}
+func setpacking(interpreter *Interpreter) {
+ packing = interpreter.PopBoolean()
+}
+
+func initArrayOperators(interpreter *Interpreter) {
+ interpreter.SystemDefine("array", NewOperator(array))
+ interpreter.SystemDefine("getinterval", NewOperator(getinterval))
+ interpreter.SystemDefine("putinterval", NewOperator(putinterval))
+ interpreter.SystemDefine("astore", NewOperator(astore))
+ interpreter.SystemDefine("aload", NewOperator(aload))
+ interpreter.SystemDefine("currentpacking", NewOperator(currentpacking))
+ interpreter.SystemDefine("setpacking", NewOperator(setpacking))
+
+}