mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-06-06 22:26:47 +00:00

* [NOD-848] Optimize allocations when serializing UTXO diffs * [NOD-848] Use same UTXO serialization everywhere, and use compression as well * [NOD-848] Fix usage of wrong buffer * [NOD-848] Fix tests * [NOD-848] Fix wire tests * [NOD-848] Fix tests * [NOD-848] Remove VLQ * [NOD-848] Fix comments * [NOD-848] Add varint for big endian encoding * [NOD-848] In TestVarIntWire, assume the expected decoded value is the same as the serialization input * [NOD-848] Serialize outpoint index with big endian varint * [NOD-848] Remove p2pk from compression support * [NOD-848] Fix comments * [NOD-848] Remove p2pk from decompression support * [NOD-848] Make entry compression optional * [NOD-848] Fix tests * [NOD-848] Fix comments and var names * [NOD-848] Remove UTXO compression * [NOD-848] Fix tests * [NOD-848] Remove big endian varint * [NOD-848] Fix comments * [NOD-848] Rename ReadVarIntLittleEndian->ReadVarInt and fix WriteVarInt comment * [NOD-848] Add outpointIndexByteOrder variable * [NOD-848] Remove redundant comment * [NOD-848] Fix outpointMaxSerializeSize to the correct value * [NOD-848] Move subBuffer to utils
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package buffers
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// SubBuffer lets you write to an existing buffer
|
|
// and let you check with the `Bytes()` method what
|
|
// has been written to the underlying buffer using
|
|
// the sub buffer.
|
|
type SubBuffer struct {
|
|
buff *bytes.Buffer
|
|
start, end int
|
|
}
|
|
|
|
// Bytes returns all the bytes that were written to the sub buffer.
|
|
func (s *SubBuffer) Bytes() []byte {
|
|
return s.buff.Bytes()[s.start:s.end]
|
|
}
|
|
|
|
// Write writes to the sub buffer's underlying buffer
|
|
// and increases s.end by the number of bytes written
|
|
// so s.Bytes() will be able to return the written bytes.
|
|
func (s *SubBuffer) Write(p []byte) (int, error) {
|
|
if s.buff.Len() > s.end || s.buff.Len() < s.start {
|
|
return 0, errors.New("a sub buffer cannot be written after another entity wrote or read from its " +
|
|
"underlying buffer")
|
|
}
|
|
|
|
n, err := s.buff.Write(p)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
s.end += n
|
|
|
|
return n, nil
|
|
}
|
|
|
|
// NewSubBuffer returns a new sub buffer.
|
|
func NewSubBuffer(buff *bytes.Buffer) *SubBuffer {
|
|
return &SubBuffer{
|
|
buff: buff,
|
|
start: buff.Len(),
|
|
end: buff.Len(),
|
|
}
|
|
}
|