summaryrefslogtreecommitdiff
path: root/tnslc/utils
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2024-12-13 16:10:14 -0500
committerKyle Gunger <kgunger12@gmail.com>2024-12-13 16:10:14 -0500
commit61e1e5ce377719c8e9e437e5ba79ba06fc1de4ba (patch)
tree10ad1cbb37ab6fc2cbfc6971f9d00c8610b77f70 /tnslc/utils
parent8bcb71c01fffa6cb576ad77f90ff3efe5c4c8fca (diff)
Type generation for compile modulesorigin
Diffstat (limited to 'tnslc/utils')
-rw-r--r--tnslc/utils/algo.tnsl7
-rw-r--r--tnslc/utils/vector.tnsl35
2 files changed, 42 insertions, 0 deletions
diff --git a/tnslc/utils/algo.tnsl b/tnslc/utils/algo.tnsl
index 73cfb7f..35ac35c 100644
--- a/tnslc/utils/algo.tnsl
+++ b/tnslc/utils/algo.tnsl
@@ -200,6 +200,13 @@
return out.as_cstr()
;/
+/; stradd(~uint8 a, ~uint8 b) [~uint8]
+ Vector out
+ out.from_cstr(a)
+ out.push_cstr(b)
+ return out.as_cstr()
+;/
+
/; unquote_cha(~uint8 cha) [uint8]
/; if (cha` !== '\\')
return cha`
diff --git a/tnslc/utils/vector.tnsl b/tnslc/utils/vector.tnsl
index d00d698..38c45fc 100644
--- a/tnslc/utils/vector.tnsl
+++ b/tnslc/utils/vector.tnsl
@@ -67,6 +67,22 @@ uint VECTOR_MAX_GROW = 256
;/
/; pop
+ self.remove(self.count - 1)
+ ;/
+
+ /; remove (int index)
+ /; if (index < 0 || index !< self.count)
+ return
+ ;/
+
+ /; if (self.count > 1)
+ /; loop (int i = index * self._elsz; i < (self.count - 1) * self._elsz) [i++]
+ ~uint8 to = self.data + i
+ ~uint8 from = self.data + i + self._elsz
+ to` = from`
+ ;/
+ ;/
+
self.count--
/; if (self.count < self.size / 2)
@@ -96,6 +112,25 @@ uint VECTOR_MAX_GROW = 256
self._elsz = 0
_delete(self.data)
;/
+
+ /; copy [Vector]
+ Vector out
+
+ out.init(self._elsz)
+ /; loop (int i = 0; i < self.count) [i++]
+ ~int tmp = self.get(i)
+ out.push(tmp)
+ ;/
+
+ return out
+ ;/
+
+ /; back [~void]
+ /; if (self.count > 0)
+ return self.get(self.count - 1)
+ ;/
+ return NULL
+ ;/
;/