File tree Expand file tree Collapse file tree 2 files changed +20
-8
lines changed Expand file tree Collapse file tree 2 files changed +20
-8
lines changed Original file line number Diff line number Diff line change @@ -144,14 +144,6 @@ def _fields(cls):
144
144
if isinstance (v , RawField ):
145
145
yield k
146
146
147
- @classmethod
148
- def _from_values (cls , * args ):
149
- data = bytearray (b"\x00 " * cls ._size )
150
- self = cls (data , 0 )
151
- for arg , field_name in zip (args , self ._fields ):
152
- setattr (self , field_name , arg )
153
- return self
154
-
155
147
@property
156
148
def _bytes (self ):
157
149
return bytes (self ._data [self ._offset : self ._offset + self ._size ])
@@ -173,6 +165,14 @@ def _get_offset_for_field(cls, field_name):
173
165
field = getattr (cls , field_name )
174
166
return field ._calc_offset (cls )
175
167
168
+ def _push_to (self , data , offset = 0 ):
169
+ """Paste struct data into a new buffer given by data, offset
170
+
171
+ Returns a new instance pointing to the data in the new copy.
172
+ """
173
+ data [offset : offset + self ._size ] = self ._bytes
174
+ return self ._from_data (data , offset )
175
+
176
176
def __repr__ (self ):
177
177
field_data = []
178
178
for field_name in self ._fields :
Original file line number Diff line number Diff line change @@ -65,6 +65,18 @@ class Struct(StructBase):
65
65
assert s .data_offset == 1000
66
66
assert s .length == 2_000_000
67
67
68
+ def test_struct_push_to ():
69
+ class Struct (StructBase ):
70
+ data_offset = Field (2 )
71
+ length = Field (4 )
72
+
73
+ s = Struct (data_offset = 1000 , length = 2_000_000 )
74
+
75
+ data = bytearray (Struct ._size )
76
+ n = s ._push_to (data , 0 )
77
+ assert n .data_offset == 1000
78
+ assert n .length == 2_000_000
79
+
68
80
69
81
def test_struct_bytes ():
70
82
class Struct (StructBase ):
You can’t perform that action at this time.
0 commit comments