@@ -175,14 +175,21 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder)
175175 indent (writer , 1 , "}\n \n " );
176176
177177 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 " );
180180 indent (writer , 1 , "}\n " );
181181
182182 final  LinkedHashSet <String > uniquePrimitiveTypes 
183183 = new  LinkedHashSet <>(TYPE_NAME_BY_PRIMITIVE_TYPE_MAP .values ());
184184 final  String  endianness  = byteOrder  == LITTLE_ENDIAN  ? "le"  : "be" ;
185185
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+ 
186193 for  (final  String  primitiveType  : uniquePrimitiveTypes )
187194 {
188195 // get_<primitive>_at 
@@ -197,7 +204,7 @@ static void generateReadBuf(final Appendable writer, final ByteOrder byteOrder)
197204 indent (writer , 0 , "\n " );
198205 indent (writer , 1 , "#[inline]\n " );
199206 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 " );
201208 indent (writer , 1 , "}\n \n " );
202209
203210 writer .append ("}\n " );
@@ -219,16 +226,20 @@ static void generateWriteBuf(final Writer writer, final ByteOrder byteOrder) thr
219226 indent (writer , 1 , "#[inline]\n " );
220227 indent (writer , 1 ,
221228 "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 " );
225230 indent (writer , 2 , "COUNT\n " );
226231 indent (writer , 1 , "}\n \n " );
227232
228233 final  LinkedHashSet <String > uniquePrimitiveTypes 
229234 = new  LinkedHashSet <>(TYPE_NAME_BY_PRIMITIVE_TYPE_MAP .values ());
230235 final  String  endianness  = byteOrder  == LITTLE_ENDIAN  ? "le"  : "be" ;
231236
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+ 
232243 for  (final  String  primitiveType  : uniquePrimitiveTypes )
233244 {
234245 // put_<primitive>_at 
0 commit comments