summaryrefslogtreecommitdiff
path: root/tnslc/iterator.tnsl
diff options
context:
space:
mode:
Diffstat (limited to 'tnslc/iterator.tnsl')
-rw-r--r--tnslc/iterator.tnsl39
1 files changed, 39 insertions, 0 deletions
diff --git a/tnslc/iterator.tnsl b/tnslc/iterator.tnsl
new file mode 100644
index 0000000..19dda8c
--- /dev/null
+++ b/tnslc/iterator.tnsl
@@ -0,0 +1,39 @@
+struct Iterator {
+ ~void data,
+ int size,
+ current,
+ _elsz
+}
+
+/; method Iterator
+
+ /; init (~void data, int count, int elsz)
+ self.data = data
+ self.size = size
+ self._elsz = elsz
+ self.current = 0
+ ;/
+
+ /; next (int count)
+ self.current = self.current + count
+ /; if (self.current >= self.size)
+ self.current = self.size
+ ;/
+ ;/
+
+ /; prev (int count)
+ self.current = self.current - count
+ /; if (self.current < 0)
+ self.current = 0
+ ;/
+ ;/
+
+ /; get [~void]
+ return self.data + current * _elsz
+ ;/
+
+ /; end [bool]
+ return self.current >= self.size
+ ;/
+
+;/