Skip to content

Commit 24e5259

Browse files
Add methods for serialization
1 parent 4b97420 commit 24e5259

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

kaitaistruct.py

+107
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ def size(self):
118118
packer_u4le = struct.Struct('<I')
119119
packer_u8le = struct.Struct('<Q')
120120

121+
# ------------------------------------------------------------------------
122+
# Reading
123+
# ------------------------------------------------------------------------
121124
# ------------------------------------------------------------------------
122125
# Signed
123126
# ------------------------------------------------------------------------
@@ -213,6 +216,95 @@ def read_f4le(self):
213216
def read_f8le(self):
214217
return KaitaiStream.packer_f8le.unpack(self.read_bytes(8))[0]
215218

219+
# ------------------------------------------------------------------------
220+
# Writing
221+
# ------------------------------------------------------------------------
222+
# ------------------------------------------------------------------------
223+
# Signed
224+
# ------------------------------------------------------------------------
225+
226+
def write_s1(self, data):
227+
return self.write_bytes(KaitaiStream.packer_s1.pack(data))
228+
229+
# ........................................................................
230+
# Big-endian
231+
# ........................................................................
232+
233+
def write_s2be(self, data):
234+
return self.write_bytes(KaitaiStream.packer_s2be.pack(data))
235+
236+
def write_s4be(self, data):
237+
return self.write_bytes(KaitaiStream.packer_s4be.pack(data))
238+
239+
def write_s8be(self, data):
240+
return self.write_bytes(KaitaiStream.packer_s8be.pack(data))
241+
242+
# ........................................................................
243+
# Little-endian
244+
# ........................................................................
245+
246+
def write_s2le(self, data):
247+
return self.write_bytes(KaitaiStream.packer_s2le.pack(data))
248+
249+
def write_s4le(self, data):
250+
return self.write_bytes(KaitaiStream.packer_s4le.pack(data))
251+
252+
def write_s8le(self, data):
253+
return self.write_bytes(KaitaiStream.packer_s8le.pack(data))
254+
255+
# ------------------------------------------------------------------------
256+
# Unsigned
257+
# ------------------------------------------------------------------------
258+
259+
def write_u1(self, data):
260+
return self.write_bytes(KaitaiStream.packer_u1.pack(data))
261+
262+
# ........................................................................
263+
# Big-endian
264+
# ........................................................................
265+
266+
def write_u2be(self, data):
267+
return self.write_bytes(KaitaiStream.packer_u2be.pack(data))
268+
269+
def write_u4be(self, data):
270+
return self.write_bytes(KaitaiStream.packer_u4be.pack(data))
271+
272+
def write_u8be(self, data):
273+
return self.write_bytes(KaitaiStream.packer_u8be.pack(data))
274+
275+
# ........................................................................
276+
# Little-endian
277+
# ........................................................................
278+
279+
def write_u2le(self, data):
280+
return self.write_bytes(KaitaiStream.packer_u2le.pack(data))
281+
282+
def write_u4le(self, data):
283+
return self.write_bytes(KaitaiStream.packer_u4le.pack(data))
284+
285+
def write_u8le(self, data):
286+
return self.write_bytes(KaitaiStream.packer_u8le.pack(data))
287+
288+
# ........................................................................
289+
# Big-endian
290+
# ........................................................................
291+
292+
def write_f4be(self, data):
293+
return self.write_bytes(KaitaiStream.packer_f4be.pack(data))
294+
295+
def write_f8be(self, data):
296+
return self.write_bytes(KaitaiStream.packer_f8be.pack(data))
297+
298+
# ........................................................................
299+
# Little-endian
300+
# ........................................................................
301+
302+
def write_f4le(self, data):
303+
return self.write_bytes(KaitaiStream.packer_f4le.pack(data))
304+
305+
def write_f8le(self, data):
306+
return self.write_bytes(KaitaiStream.packer_f8le.pack(data))
307+
216308
# ========================================================================
217309
# Unaligned bit values
218310
# ========================================================================
@@ -293,6 +385,21 @@ def read_bytes(self, n):
293385
)
294386
return r
295387

388+
def write_bytes(self, data, pad=0, padding=b'\0'):
389+
if data is None:
390+
return
391+
nb = len(data)
392+
if nb == 0 and pad < 1:
393+
return
394+
if nb > 0 and self._io.write(data) != nb:
395+
raise Exception(
396+
"not all of %d bytes written" %
397+
(nb,)
398+
)
399+
if pad > 0 and padding is not None:
400+
self._io.write(padding * pad)
401+
return
402+
296403
def read_bytes_full(self):
297404
return self._io.read()
298405

0 commit comments

Comments
 (0)