Skip to content

Commit cc3a4e0

Browse files
authored
Merge pull request #74 from ngjunsiang/qol-stream-improvements
QoL improvements for data stream handling
2 parents d061f1b + 091c88b commit cc3a4e0

4 files changed

Lines changed: 108 additions & 6 deletions

File tree

opendis/DataInputStream.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
uint8,
1616
uint16,
1717
uint32,
18+
uint64,
1819
float32,
1920
float64,
21+
char8,
2022
char16,
2123
)
2224

@@ -61,3 +63,41 @@ def read_int(self) -> int32:
6163

6264
def read_unsigned_int(self) -> uint32:
6365
return struct.unpack('>I', self.stream.read(4))[0]
66+
67+
def read_bytes(self, n: int) -> bytes:
68+
"""Read n bytes from the stream."""
69+
return self.stream.read(n)
70+
71+
# Aliases for convenience
72+
def read_char8(self) -> char8:
73+
return char8(self.read_char())
74+
75+
def read_float32(self) -> float32:
76+
return float32(self.read_float())
77+
78+
def read_float64(self) -> float64:
79+
return float64(self.read_double())
80+
81+
def read_int8(self) -> int8:
82+
return int8(self.read_byte())
83+
84+
def read_int16(self) -> int16:
85+
return int16(self.read_short())
86+
87+
def read_int32(self) -> int32:
88+
return int32(self.read_int())
89+
90+
def read_int64(self) -> int64:
91+
return int64(self.read_long())
92+
93+
def read_uint8(self) -> uint8:
94+
return uint8(self.read_unsigned_byte())
95+
96+
def read_uint16(self) -> uint16:
97+
return uint16(self.read_unsigned_short())
98+
99+
def read_uint32(self) -> uint32:
100+
return uint32(self.read_unsigned_int())
101+
102+
def read_uint64(self) -> uint64:
103+
return uint64(self.read_long())

opendis/DataOutputStream.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@
77
from io import BufferedIOBase
88
import struct
99

10+
from .types import (
11+
int8,
12+
int16,
13+
int32,
14+
int64,
15+
uint8,
16+
uint16,
17+
uint32,
18+
uint64,
19+
float32,
20+
float64,
21+
char8,
22+
char16,
23+
)
24+
25+
1026
class DataOutputStream:
1127
def __init__(self, stream: BufferedIOBase):
1228
self.stream = stream
@@ -48,3 +64,40 @@ def write_int(self, val: int) -> None:
4864
def write_unsigned_int(self, val: int) -> None:
4965
self.stream.write(struct.pack('>I', val))
5066

67+
def write_bytes(self, val: bytes) -> None:
68+
"""Write bytes to the stream."""
69+
self.stream.write(val)
70+
71+
# Aliases for convenience
72+
def write_char8(self, val: char8) -> None:
73+
self.write_byte(ord(val))
74+
75+
def write_float32(self, val: float32) -> None:
76+
self.write_float(val)
77+
78+
def write_float64(self, val: float64) -> None:
79+
self.write_double(val)
80+
81+
def write_int8(self, val: int8) -> None:
82+
self.write_byte(val)
83+
84+
def write_int16(self, val: int16) -> None:
85+
self.write_short(val)
86+
87+
def write_int32(self, val: int32) -> None:
88+
self.write_int(val)
89+
90+
def write_int64(self, val: int64) -> None:
91+
self.write_long(val)
92+
93+
def write_uint8(self, val: uint8) -> None:
94+
self.write_unsigned_byte(val)
95+
96+
def write_uint16(self, val: uint16) -> None:
97+
self.write_unsigned_short(val)
98+
99+
def write_uint32(self, val: uint32) -> None:
100+
self.write_unsigned_int(val)
101+
102+
def write_uint64(self, val: uint64) -> None:
103+
self.stream.write(struct.pack('>Q', val))

opendis/PduFactory.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
__author__ = "mcgredo"
22
__date__ = "$Jun 25, 2015 11:31:42 AM$"
33

4-
from .DataInputStream import DataInputStream
5-
from .dis7 import *
6-
from io import BytesIO
7-
from os import PathLike
8-
import binascii
94
import io
5+
from os import PathLike
6+
7+
from .dis7 import *
8+
from .stream import DataInputStream
9+
1010

1111
PduTypeDecoders = {
1212
1 : EntityStatePdu
@@ -86,7 +86,7 @@ def createPdu(data: bytes) -> PduSuperclass | None:
8686
input: a bytebuffer of DIS data
8787
output: a python DIS pdu instance of the correct class"""
8888

89-
memoryStream = BytesIO(data)
89+
memoryStream = io.BytesIO(data)
9090
inputStream = DataInputStream(memoryStream)
9191

9292
return getPdu(inputStream)

opendis/stream.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Stream utilities
2+
3+
This module provides utilities for handling streams in the OpenDIS library.
4+
"""
5+
6+
__all__ = ['DataInputStream', 'DataOutputStream']
7+
8+
from .DataInputStream import DataInputStream
9+
from .DataOutputStream import DataOutputStream

0 commit comments

Comments
 (0)