Index: third_party/mojo/src/mojo/public/go/bindings/encoder.go |
diff --git a/third_party/mojo/src/mojo/public/go/bindings/encoder.go b/third_party/mojo/src/mojo/public/go/bindings/encoder.go |
index 5ea1a50cdfcca72257289161eb1ebc2a22c43cc0..210d9b01a0ed5a39d74065ad39e1e4f46709cf05 100644 |
--- a/third_party/mojo/src/mojo/public/go/bindings/encoder.go |
+++ b/third_party/mojo/src/mojo/public/go/bindings/encoder.go |
@@ -36,13 +36,6 @@ type encodingState struct { |
elementsProcessed uint32 |
} |
-func (s *encodingState) alignOffsetToBytes() { |
- if s.bitOffset > 0 { |
- s.offset++ |
- s.bitOffset = 0 |
- } |
-} |
- |
func (s *encodingState) skipBits(count uint32) { |
s.bitOffset += count |
s.offset += int(s.bitOffset >> 3) // equal to s.bitOffset / 8 |
@@ -70,6 +63,16 @@ type Encoder struct { |
stateStack []encodingState |
} |
+func align(size, alignment int) int { |
+ return ((size - 1) | (alignment - 1)) + 1 |
+} |
+ |
+// bytesForBits returns minimum number of bytes required to store provided |
+// number of bits. |
+func bytesForBits(bits uint64) int { |
+ return int((bits + 7) / 8) |
+} |
+ |
func ensureElementBitSizeAndCapacity(state *encodingState, bitSize uint32) error { |
if state == nil { |
return fmt.Errorf("empty state stack") |
@@ -210,7 +213,6 @@ func (e *Encoder) WriteUint8(value uint8) error { |
if err := ensureElementBitSizeAndCapacity(e.state(), 8); err != nil { |
return err |
} |
- e.state().alignOffsetToBytes() |
e.buf[e.state().offset] = value |
e.state().skipBytes(1) |
e.state().elementsProcessed++ |
@@ -227,7 +229,6 @@ func (e *Encoder) WriteUint16(value uint16) error { |
if err := ensureElementBitSizeAndCapacity(e.state(), 16); err != nil { |
return err |
} |
- e.state().alignOffsetToBytes() |
e.state().offset = align(e.state().offset, 2) |
binary.LittleEndian.PutUint16(e.buf[e.state().offset:], value) |
e.state().skipBytes(2) |
@@ -245,7 +246,6 @@ func (e *Encoder) WriteUint32(value uint32) error { |
if err := ensureElementBitSizeAndCapacity(e.state(), 32); err != nil { |
return err |
} |
- e.state().alignOffsetToBytes() |
e.state().offset = align(e.state().offset, 4) |
binary.LittleEndian.PutUint32(e.buf[e.state().offset:], value) |
e.state().skipBytes(4) |
@@ -263,7 +263,6 @@ func (e *Encoder) WriteUint64(value uint64) error { |
if err := ensureElementBitSizeAndCapacity(e.state(), 64); err != nil { |
return err |
} |
- e.state().alignOffsetToBytes() |
e.state().offset = align(e.state().offset, 8) |
binary.LittleEndian.PutUint64(e.buf[e.state().offset:], value) |
e.state().skipBytes(8) |