@@ -118,6 +118,9 @@ def size(self):
118
118
packer_u4le = struct .Struct ('<I' )
119
119
packer_u8le = struct .Struct ('<Q' )
120
120
121
+ # ------------------------------------------------------------------------
122
+ # Reading
123
+ # ------------------------------------------------------------------------
121
124
# ------------------------------------------------------------------------
122
125
# Signed
123
126
# ------------------------------------------------------------------------
@@ -213,6 +216,95 @@ def read_f4le(self):
213
216
def read_f8le (self ):
214
217
return KaitaiStream .packer_f8le .unpack (self .read_bytes (8 ))[0 ]
215
218
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
+
216
308
# ========================================================================
217
309
# Unaligned bit values
218
310
# ========================================================================
@@ -293,6 +385,42 @@ def read_bytes(self, n):
293
385
)
294
386
return r
295
387
388
+ def write_bytes (self , data ):
389
+ if data is None :
390
+ return
391
+ nb = len (data )
392
+ if nb > 0 and self ._io .write (data ) != nb :
393
+ raise Exception (
394
+ "not all of %d bytes written" %
395
+ (nb ,)
396
+ )
397
+
398
+ def write_terminator (self , term_byte ):
399
+ self ._io .write (KaitaiStream .packer_u1 .pack (term_byte ))
400
+
401
+ def write_padding (self , actual_size , size , pad_byte ):
402
+ pad = size - actual_size
403
+ if pad > 0 and pad_byte is not None :
404
+ self ._io .write (KaitaiStream .packer_u1 .pack (pad_byte ) * pad )
405
+
406
+ def write_bytes_term (self , data , size , term_byte , pad_byte ):
407
+ if data is None or not size :
408
+ return
409
+ nb = len (data )
410
+ if nb < size :
411
+ if nb > 0 and self ._io .write (data ) != nb :
412
+ raise Exception (
413
+ "not all of %d bytes written" %
414
+ (nb ,)
415
+ )
416
+ else :
417
+ raise Exception (
418
+ "Writing %d bytes, but %d bytes (including terminator) were given" %
419
+ (size , nb + 1 )
420
+ )
421
+ self .write_terminator (term_byte )
422
+ self .write_padding (nb , size - 1 , pad_byte )
423
+
296
424
def read_bytes_full (self ):
297
425
return self ._io .read ()
298
426
0 commit comments