@@ -175,14 +175,21 @@ 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(crate) fn get_bytes_at<const N : usize>(slice: &[u8], index: usize) -> [u8; N ] {\n " );
179
+ indent (writer , 2 , "slice[ index..index+N].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
+ uniquePrimitiveTypes .remove ("u8" );
187
+ indent (writer , 0 , "\n " );
188
+ indent (writer , 1 , "#[inline]\n " );
189
+ indent (writer , 1 , "pub fn get_u8_at(&self, index: usize) -> u8 {\n " );
190
+ indent (writer , 2 , "self.data[index]\n " );
191
+ indent (writer , 1 , "}\n " );
192
+
186
193
for (final String primitiveType : uniquePrimitiveTypes )
187
194
{
188
195
// get_<primitive>_at
@@ -197,7 +204,7 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder)
197
204
indent (writer , 0 , "\n " );
198
205
indent (writer , 1 , "#[inline]\n " );
199
206
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 " );
207
+ indent (writer , 2 , "& self.data[ index..index+ len] \n " );
201
208
indent (writer , 1 , "}\n \n " );
202
209
203
210
writer .append ("}\n " );
@@ -219,16 +226,20 @@ static void generateWriteBuf(final Writer writer, final ByteOrder byteOrder) thr
219
226
indent (writer , 1 , "#[inline]\n " );
220
227
indent (writer , 1 ,
221
228
"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 " );
229
+ indent (writer , 2 , "self.data[index..index + COUNT].copy_from_slice(&bytes);\n " );
225
230
indent (writer , 2 , "COUNT\n " );
226
231
indent (writer , 1 , "}\n \n " );
227
232
228
233
final LinkedHashSet <String > uniquePrimitiveTypes
229
234
= new LinkedHashSet <>(TYPE_NAME_BY_PRIMITIVE_TYPE_MAP .values ());
230
235
final String endianness = byteOrder == LITTLE_ENDIAN ? "le" : "be" ;
231
236
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 " );
242
+
232
243
for (final String primitiveType : uniquePrimitiveTypes )
233
244
{
234
245
// put_<primitive>_at
0 commit comments