@@ -125,6 +125,9 @@ def size(self):
125125 def read_s1 (self ):
126126 return KaitaiStream .packer_s1 .unpack (self .read_bytes (1 ))[0 ]
127127
128+ def write_s1 (self , data ):
129+ return self .write_bytes (KaitaiStream .packer_s1 .pack (data ))
130+
128131 # ........................................................................
129132 # Big-endian
130133 # ........................................................................
@@ -138,6 +141,15 @@ def read_s4be(self):
138141 def read_s8be (self ):
139142 return KaitaiStream .packer_s8be .unpack (self .read_bytes (8 ))[0 ]
140143
144+ def write_s2be (self , data ):
145+ return self .write_bytes (KaitaiStream .packer_s2be .pack (data ))
146+
147+ def write_s4be (self , data ):
148+ return self .write_bytes (KaitaiStream .packer_s4be .pack (data ))
149+
150+ def write_s8be (self , data ):
151+ return self .write_bytes (KaitaiStream .packer_s8be .pack (data ))
152+
141153 # ........................................................................
142154 # Little-endian
143155 # ........................................................................
@@ -151,13 +163,25 @@ def read_s4le(self):
151163 def read_s8le (self ):
152164 return KaitaiStream .packer_s8le .unpack (self .read_bytes (8 ))[0 ]
153165
166+ def write_s2le (self , data ):
167+ return self .write_bytes (KaitaiStream .packer_s2le .pack (data ))
168+
169+ def write_s4le (self , data ):
170+ return self .write_bytes (KaitaiStream .packer_s4le .pack (data ))
171+
172+ def write_s8le (self , data ):
173+ return self .write_bytes (KaitaiStream .packer_s8le .pack (data ))
174+
154175 # ------------------------------------------------------------------------
155176 # Unsigned
156177 # ------------------------------------------------------------------------
157178
158179 def read_u1 (self ):
159180 return KaitaiStream .packer_u1 .unpack (self .read_bytes (1 ))[0 ]
160181
182+ def write_u1 (self , data ):
183+ return self .write_bytes (KaitaiStream .packer_u1 .pack (data ))
184+
161185 # ........................................................................
162186 # Big-endian
163187 # ........................................................................
@@ -171,6 +195,15 @@ def read_u4be(self):
171195 def read_u8be (self ):
172196 return KaitaiStream .packer_u8be .unpack (self .read_bytes (8 ))[0 ]
173197
198+ def write_u2be (self , data ):
199+ return self .write_bytes (KaitaiStream .packer_u2be .pack (data ))
200+
201+ def write_u4be (self , data ):
202+ return self .write_bytes (KaitaiStream .packer_u4be .pack (data ))
203+
204+ def write_u8be (self , data ):
205+ return self .write_bytes (KaitaiStream .packer_u8be .pack (data ))
206+
174207 # ........................................................................
175208 # Little-endian
176209 # ........................................................................
@@ -184,6 +217,15 @@ def read_u4le(self):
184217 def read_u8le (self ):
185218 return KaitaiStream .packer_u8le .unpack (self .read_bytes (8 ))[0 ]
186219
220+ def write_u2le (self , data ):
221+ return self .write_bytes (KaitaiStream .packer_u2le .pack (data ))
222+
223+ def write_u4le (self , data ):
224+ return self .write_bytes (KaitaiStream .packer_u4le .pack (data ))
225+
226+ def write_u8le (self , data ):
227+ return self .write_bytes (KaitaiStream .packer_u8le .pack (data ))
228+
187229 # ========================================================================
188230 # Floating point numbers
189231 # ========================================================================
@@ -203,6 +245,12 @@ def read_f4be(self):
203245 def read_f8be (self ):
204246 return KaitaiStream .packer_f8be .unpack (self .read_bytes (8 ))[0 ]
205247
248+ def write_f4be (self , data ):
249+ return self .write_bytes (KaitaiStream .packer_f4be .pack (data ))
250+
251+ def write_f8be (self , data ):
252+ return self .write_bytes (KaitaiStream .packer_f8be .pack (data ))
253+
206254 # ........................................................................
207255 # Little-endian
208256 # ........................................................................
@@ -213,6 +261,12 @@ def read_f4le(self):
213261 def read_f8le (self ):
214262 return KaitaiStream .packer_f8le .unpack (self .read_bytes (8 ))[0 ]
215263
264+ def write_f4le (self , data ):
265+ return self .write_bytes (KaitaiStream .packer_f4le .pack (data ))
266+
267+ def write_f8le (self , data ):
268+ return self .write_bytes (KaitaiStream .packer_f8le .pack (data ))
269+
216270 # ========================================================================
217271 # Unaligned bit values
218272 # ========================================================================
@@ -293,6 +347,21 @@ def read_bytes(self, n):
293347 )
294348 return r
295349
350+ def write_bytes (self , data , pad = 0 , padding = b'\0 ' ):
351+ if data is None :
352+ return
353+ nb = len (data )
354+ if nb == 0 and pad < 1 :
355+ return
356+ if self ._io .write (data ) != nb :
357+ raise Exception (
358+ "not all of %d bytes written" %
359+ (nb ,)
360+ )
361+ if pad > 0 and padding is not None :
362+ self ._io .write (padding * pad )
363+ return
364+
296365 def read_bytes_full (self ):
297366 return self ._io .read ()
298367
@@ -317,6 +386,9 @@ def read_bytes_term(self, term, include_term, consume_term, eos_error):
317386 else :
318387 r += c
319388
389+ def write_bytes_term (self , data , term = b'\0 ' ):
390+ self .write_bytes (data , pad = 1 , padding = term )
391+
320392 def ensure_fixed_contents (self , expected ):
321393 actual = self ._io .read (len (expected ))
322394 if actual != expected :
@@ -327,7 +399,7 @@ def ensure_fixed_contents(self, expected):
327399 return actual
328400
329401 @staticmethod
330- def bytes_strip_right (data , pad_byte ):
402+ def bytes_strip_right (data , pad_byte = b' \0 ' ):
331403 new_len = len (data )
332404 if PY2 :
333405 # data[...] must yield an integer, to compare with integer pad_byte
0 commit comments