
struct CharStep {
    data: ptr
    bytes: uint
    pos: uint

    fn set(str: String) {
        this.data = str.data
        this.bytes = str.bytes
        this.pos = 0
    }
    fn skip_bytes(len: uint) {
        this.pos += len
    }

    fn next() u8 !end {
        let pos = this.pos
        let bytes = this.bytes
        let data = this.data
        if pos == bytes : throw end
        let byte : u8 = @ptrv(data, u8, pos)
        let bytec : u8 = 1
        if((byte & 128) > 0){
            byte = byte << 1
            while (byte & 128) > 0 {
                bytec++
                byte = byte << 1
            }
            if bytec > 4 : bytec = 1
            if pos + bytec > bytes : bytec -= (pos + bytec - bytes).@cast(u8)
        }
        this.pos = pos + bytec
        return bytec
    }
}
