@@ -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