diff --git a/.gitignore b/.gitignore index f7df4525..1ba516af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -ooc_tmp rock -./TestSuite +ooc_tmp diff --git a/source/frontend/ListReader.ooc b/source/frontend/ListReader.ooc new file mode 100644 index 00000000..d2902126 --- /dev/null +++ b/source/frontend/ListReader.ooc @@ -0,0 +1,59 @@ +import structs/List + +ListReader: class { + + list: List + index, length, mark : SizeT + + init: func (=list) { + index = 0 + length = list size() + mark = 0 + } + + hasNext: func -> Bool { + index < length + } + + read: func -> T { + val := list get(index) + index += 1 + return val + } + + peek: func -> T { + val := list get(index) + return val + } + + prev: func -> T { + if(index < 1) return list[index] + return list[index - 1] + } + + mark: func -> SizeT { + mark = index + return mark + } + + reset: func { + index = mark + } + + seek: func (.index) { + this index = index + } + + rewind: func { + index -= 1 + } + + skip: func { + index += 1 + } + + skip: func ~withOffset (offset: SizeT) { + index += offset + } + +} diff --git a/source/frontend/SourceReader.ooc b/source/frontend/SourceReader.ooc index e52a56e2..47b07ff6 100644 --- a/source/frontend/SourceReader.ooc +++ b/source/frontend/SourceReader.ooc @@ -1,7 +1,9 @@ +// ooc imports import io/[Reader, FileReader, File] import structs/[Array, ArrayList, List] import text/StringBuffer +// rock imports import FileLocation, Locatable SourceReader: class extends Reader {