Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/json/cursor.nct

cursor.nct

//! One byte-offset authority over valid UTF-8 JSON input.

copy struct Cursor {
    text: &str
    byte_offset: usize
}

construct Cursor {
    func new(text: &str): Self from text {
        return Cursor { text: text, byte_offset: 0 }
    }
}

instance Cursor {
    method &self.offset(): usize {
        return self.byte_offset
    }

    method &self.len(): usize {
        return self.text.len()
    }

    method &self.is_finished(): bool {
        return self.byte_offset == self.text.len()
    }

    method &self.peek(): u8? {
        if self.byte_offset == self.text.len() {
            return none
        }
        return self.text.bytes()[self.byte_offset]
    }

    method &self.next_is(expected: u8): bool {
        let byte = self.peek() otherwise { return false }
        return byte == expected
    }

    method &+self.advance(): u8? {
        let byte = self.peek()?
        self.byte_offset += 1
        return byte
    }

    method &self.range(start: usize, end: usize): &str? from self {
        return self.text.get_range(start, end)?
    }
}