mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-27 13:58:05 +00:00
54d888ba70
This seriously improves the serialization/deserialization performance for several reasons: * no time spent in `binary` reflection * no memory allocations being made on every read/write * uses fast ReadBytes everywhere it's appropriate It also makes Fixed8 Serializable just for convenience.
39 lines
1,012 B
Go
39 lines
1,012 B
Go
package core
|
|
|
|
import (
|
|
"github.com/CityOfZion/neo-go/pkg/core/state"
|
|
"github.com/CityOfZion/neo-go/pkg/io"
|
|
)
|
|
|
|
// UnspentCoinState hold the state of a unspent coin.
|
|
type UnspentCoinState struct {
|
|
states []state.Coin
|
|
}
|
|
|
|
// NewUnspentCoinState returns a new unspent coin state with N confirmed states.
|
|
func NewUnspentCoinState(n int) *UnspentCoinState {
|
|
u := &UnspentCoinState{
|
|
states: make([]state.Coin, n),
|
|
}
|
|
for i := 0; i < n; i++ {
|
|
u.states[i] = state.CoinConfirmed
|
|
}
|
|
return u
|
|
}
|
|
|
|
// EncodeBinary encodes UnspentCoinState to the given BinWriter.
|
|
func (s *UnspentCoinState) EncodeBinary(bw *io.BinWriter) {
|
|
bw.WriteVarUint(uint64(len(s.states)))
|
|
for _, state := range s.states {
|
|
bw.WriteByte(byte(state))
|
|
}
|
|
}
|
|
|
|
// DecodeBinary decodes UnspentCoinState from the given BinReader.
|
|
func (s *UnspentCoinState) DecodeBinary(br *io.BinReader) {
|
|
lenStates := br.ReadVarUint()
|
|
s.states = make([]state.Coin, lenStates)
|
|
for i := 0; i < int(lenStates); i++ {
|
|
s.states[i] = state.Coin(br.ReadByte())
|
|
}
|
|
}
|