@@ -18,26 +18,32 @@ def size(self: c_str) -> int:
1818 size = 0
1919
2020 try :
21- while self .memory [self .address + size ] != 0 :
21+ while self .memory [self .address + size ] != b" \x00 " :
2222 size += 1
2323 except IndexError as e :
2424 raise RuntimeError ("String is not null-terminated." ) from e
2525
2626 return size
2727
28- def get (self : c_str , index : int ) -> bytes :
28+ def get (self : c_str , index : int = - 1 ) -> bytes :
2929 """Return the character at the given index."""
30- if index < 0 or index >= self .size ():
30+ if index != - 1 and index < 0 or index >= self .size ():
3131 raise IndexError ("String index out of range." )
3232
33+ if index == - 1 :
34+ return self .memory [self .address : self .address + self .size ()]
35+
3336 return bytes ([self .memory [self .address + index ]])
3437
35- def _set (self : c_str , index : int , value : bytes ) -> None :
38+ def _set (self : c_str , value : bytes , index : int = - 1 ) -> None :
3639 """Set the character at the given index to the given value."""
37- if index < 0 or index >= self .size ():
40+ if index != - 1 and index < 0 or index >= self .size ():
3841 raise IndexError ("String index out of range." )
3942
40- self .memory [self .address + index ] = value
43+ if index == - 1 :
44+ self .memory [self .address ] = value
45+ else :
46+ self .memory [self .address + index ] = value
4147
4248 def __iter__ (self : c_str ) -> iter :
4349 """Return an iterator over the string."""
0 commit comments