Skip to content

Commit 7ae0452

Browse files
committed
feat: implement basic c_str
1 parent 226f4f9 commit 7ae0452

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

libdestruct/c/c_str.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)