summaryrefslogtreecommitdiff
path: root/std/vec.zc
diff options
context:
space:
mode:
Diffstat (limited to 'std/vec.zc')
-rw-r--r--std/vec.zc26
1 files changed, 26 insertions, 0 deletions
diff --git a/std/vec.zc b/std/vec.zc
index a25b37b..1d9e6e1 100644
--- a/std/vec.zc
+++ b/std/vec.zc
@@ -1,5 +1,6 @@
import "./core.zc"
+import "./iter.zc"
struct Vec<T> {
data: T*;
@@ -7,10 +8,35 @@ struct Vec<T> {
cap: usize;
}
+struct VecIter<T> {
+ data: T*;
+ count: usize;
+ idx: usize;
+}
+
+impl VecIter<T> {
+ fn next(self) -> Option<T> {
+ if (self.idx < self.count) {
+ var item = self.data[self.idx];
+ self.idx = self.idx + 1;
+ return Option<T>::Some(item);
+ }
+ return Option<T>::None();
+ }
+}
+
impl Vec<T> {
fn new() -> Vec<T> {
return Vec<T> { data: 0, len: 0, cap: 0 };
}
+
+ fn iterator(self) -> VecIter<T> {
+ return VecIter<T> {
+ data: self.data,
+ count: self.len,
+ idx: 0
+ };
+ }
fn push(self, item: T) {
if (self.len >= self.cap) {