@@ -175,14 +175,22 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder)
175
175
indent (writer , 1 , "}\n \n " );
176
176
177
177
indent (writer , 1 , "#[inline]\n " );
178
- indent (writer , 1 , "fn get_bytes_at<const COUNT: usize>(slice: &[u8], index: usize) -> [u8; COUNT] {\n " );
179
- indent (writer , 2 , "Self::get_bytes( slice.split_at( index).1.split_at( COUNT).0 )\n " );
178
+ indent (writer , 1 , "pub fn get_bytes_at<const COUNT: usize>(slice: &[u8], index: usize) -> [u8; COUNT] {\n " );
179
+ indent (writer , 2 , "slice[ index..index+ COUNT].try_into().expect( \" slice with incorrect length \" )\n " );
180
180
indent (writer , 1 , "}\n " );
181
181
182
182
final LinkedHashSet <String > uniquePrimitiveTypes
183
183
= new LinkedHashSet <>(TYPE_NAME_BY_PRIMITIVE_TYPE_MAP .values ());
184
184
final String endianness = byteOrder == LITTLE_ENDIAN ? "le" : "be" ;
185
185
186
+ // get_u8_at
187
+ uniquePrimitiveTypes .remove ("u8" );
188
+ indent (writer , 0 , "\n " );
189
+ indent (writer , 1 , "#[inline]\n " );
190
+ indent (writer , 1 , "pub fn get_u8_at(&self, index: usize) -> u8 {\n " );
191
+ indent (writer , 2 , "self.data[index]\n " );
192
+ indent (writer , 1 , "}\n " );
193
+
186
194
for (final String primitiveType : uniquePrimitiveTypes )
187
195
{
188
196
// get_<primitive>_at
@@ -197,7 +205,7 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder)
197
205
indent (writer , 0 , "\n " );
198
206
indent (writer , 1 , "#[inline]\n " );
199
207
indent (writer , 1 , "pub fn get_slice_at(&self, index: usize, len: usize) -> &[u8] {\n " );
200
- indent (writer , 2 , "self.data.split_at( index).1.split_at( len).0 \n " );
208
+ indent (writer , 2 , "& self.data[ index..index+ len] \n " );
201
209
indent (writer , 1 , "}\n \n " );
202
210
203
211
writer .append ("}\n " );
@@ -219,15 +227,18 @@ static void generateWriteBuf(final Writer writer, final ByteOrder byteOrder) thr
219
227
indent (writer , 1 , "#[inline]\n " );
220
228
indent (writer , 1 ,
221
229
"pub fn put_bytes_at<const COUNT: usize>(&mut self, index: usize, bytes: [u8; COUNT]) -> usize {\n " );
222
- indent (writer , 2 , "for (i, byte) in bytes.iter().enumerate() {\n " );
223
- indent (writer , 3 , "self.data[index + i] = *byte;\n " );
224
- indent (writer , 2 , "}\n " );
230
+ indent (writer , 2 , "self.data[index..index + COUNT].copy_from_slice(&bytes);\n " );
225
231
indent (writer , 2 , "COUNT\n " );
226
232
indent (writer , 1 , "}\n \n " );
227
233
228
234
final LinkedHashSet <String > uniquePrimitiveTypes
229
235
= new LinkedHashSet <>(TYPE_NAME_BY_PRIMITIVE_TYPE_MAP .values ());
230
236
final String endianness = byteOrder == LITTLE_ENDIAN ? "le" : "be" ;
237
+ uniquePrimitiveTypes .remove ("u8" );
238
+ indent (writer , 1 , "#[inline]\n " );
239
+ indent (writer , 1 , "pub fn put_u8_at(&mut self, index: usize, value: u8) {\n " );
240
+ indent (writer , 2 , "self.data[index] = value;\n " );
241
+ indent (writer , 1 , "}\n \n " );
231
242
232
243
for (final String primitiveType : uniquePrimitiveTypes )
233
244
{
0 commit comments