Skip to content

Commit 7433c69

Browse files
xuxubopeter-jerry-ye
authored andcommitted
Optimized Buffer write methods: write_uint64_le, write_uint_be, and write_uint_le.
1 parent 50a626b commit 7433c69

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

buffer/buffer.mbt

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,17 @@ pub fn write_uint64_be(self : Buffer, value : UInt64) -> Unit {
280280
/// )
281281
/// ```
282282
pub fn write_uint64_le(self : Buffer, value : UInt64) -> Unit {
283-
self.write_byte(value.to_byte())
284-
self.write_byte((value >> 8).to_byte())
285-
self.write_byte((value >> 16).to_byte())
286-
self.write_byte((value >> 24).to_byte())
287-
self.write_byte((value >> 32).to_byte())
288-
self.write_byte((value >> 40).to_byte())
289-
self.write_byte((value >> 48).to_byte())
290-
self.write_byte((value >> 56).to_byte())
283+
self.grow_if_necessary(self.len + 8)
284+
let offset = self.len
285+
self.data[offset] = value.to_byte()
286+
self.data[offset + 1] = (value >> 8).to_byte()
287+
self.data[offset + 2] = (value >> 16).to_byte()
288+
self.data[offset + 3] = (value >> 24).to_byte()
289+
self.data[offset + 4] = (value >> 32).to_byte()
290+
self.data[offset + 5] = (value >> 40).to_byte()
291+
self.data[offset + 6] = (value >> 48).to_byte()
292+
self.data[offset + 7] = (value >> 56).to_byte()
293+
self.len += 8
291294
}
292295
293296
///|
@@ -356,10 +359,13 @@ pub fn write_int64_le(self : Buffer, value : Int64) -> Unit {
356359
/// inspect(buf.contents(), content="b\"\\x12\\x34\\x56\\x78\"")
357360
/// ```
358361
pub fn write_uint_be(self : Buffer, value : UInt) -> Unit {
359-
self.write_byte((value >> 24).to_byte())
360-
self.write_byte((value >> 16).to_byte())
361-
self.write_byte((value >> 8).to_byte())
362-
self.write_byte(value.to_byte())
362+
self.grow_if_necessary(self.len + 4)
363+
let offset = self.len
364+
self.data[offset] = (value >> 24).to_byte()
365+
self.data[offset + 1] = (value >> 16).to_byte()
366+
self.data[offset + 2] = (value >> 8).to_byte()
367+
self.data[offset + 3] = value.to_byte()
368+
self.len += 4
363369
}
364370
365371
///|
@@ -380,10 +386,13 @@ pub fn write_uint_be(self : Buffer, value : UInt) -> Unit {
380386
/// inspect(buf.contents(), content="b\"\\x78\\x56\\x34\\x12\"")
381387
/// ```
382388
pub fn write_uint_le(self : Buffer, value : UInt) -> Unit {
383-
self.write_byte(value.to_byte())
384-
self.write_byte((value >> 8).to_byte())
385-
self.write_byte((value >> 16).to_byte())
386-
self.write_byte((value >> 24).to_byte())
389+
self.grow_if_necessary(self.len + 4)
390+
let offset = self.len
391+
self.data[offset] = value.to_byte()
392+
self.data[offset + 1] = (value >> 8).to_byte()
393+
self.data[offset + 2] = (value >> 16).to_byte()
394+
self.data[offset + 3] = (value >> 24).to_byte()
395+
self.len += 4
387396
}
388397
389398
///|

0 commit comments

Comments
 (0)