@@ -163,27 +163,40 @@ pub fn new(size_hint~ : Int = 0) -> T {
163
163
}
164
164
165
165
///| Create a buffer from a bytes.
166
- pub fn T ::from_bytes (bytes : Bytes ) -> T {
167
- let buf = T ::new (size_hint = bytes .length ())
168
- buf .write_bytes (bytes )
166
+ pub fn from_bytes (bytes : Bytes ) -> T {
167
+ let val_len = bytes .length ()
168
+ let buf = new (size_hint = val_len )
169
+ // inline write_bytes, skip grow_if_necessary check
170
+ // SAFETY: known bytes size
171
+ buf .data.blit_from_bytes (0 , bytes , 0 , val_len )
172
+ buf .len = val_len
169
173
buf
170
174
}
171
175
172
176
///|
173
177
/// Create a buffer from an array.
174
- pub fn T :: from_array (arr : Array [Byte ]) -> T {
175
- let buf = T :: new (size_hint = arr .length ())
178
+ pub fn from_array (arr : Array [Byte ]) -> T {
179
+ let buf = new (size_hint = arr .length ())
176
180
for byte in arr {
177
- buf .write_byte (byte )
181
+ // inline write_byte, skip grow_if_necessary check
182
+ // SAFETY: known array size
183
+ buf .data[buf .len] = byte
184
+ buf .len + = 1
178
185
}
179
186
buf
180
187
}
181
188
182
189
///|
183
- /// Create a buffer from an array.
184
- pub fn T ::from_iter (iter : Iter [Byte ]) -> T {
185
- let arr = iter .collect ()
186
- T ::from_array (arr )
190
+ /// Create a buffer from an iterator.
191
+ pub fn from_iter (iter : Iter [Byte ]) -> T {
192
+ let buf = new (size_hint = iter .count ())
193
+ for byte in iter {
194
+ // inline write_byte, skip grow_if_necessary check
195
+ // SAFETY: known iter size
196
+ buf .data[buf .len] = byte
197
+ buf .len + = 1
198
+ }
199
+ buf
187
200
}
188
201
189
202
///|
0 commit comments