package vm
|
|
|
|
import (
|
|
"encoding/binary"
|
|
)
|
|
|
|
var (
|
|
Zero = Word{0}
|
|
One = Word{1}
|
|
)
|
|
|
|
type Word [32]byte
|
|
|
|
func (w Word) String() string { return string(w[:]) }
|
|
func (w Word) Copy() Word { return w }
|
|
func (w Word) Bytes() []byte { return w[:] } // copied.
|
|
func (w Word) IsZero() bool {
|
|
accum := byte(0)
|
|
for _, byt := range w {
|
|
accum |= byt
|
|
}
|
|
return accum == 0
|
|
}
|
|
|
|
func Uint64ToWord(i uint64) Word {
|
|
word := Word{}
|
|
PutUint64(word[:], i)
|
|
return word
|
|
}
|
|
|
|
func BytesToWord(bz []byte) Word {
|
|
word := Word{}
|
|
copy(word[:], bz)
|
|
return word
|
|
}
|
|
|
|
func LeftPadWord(bz []byte) (word Word) {
|
|
copy(word[:], bz)
|
|
return
|
|
}
|
|
|
|
func RightPadWord(bz []byte) (word Word) {
|
|
copy(word[32-len(bz):], bz)
|
|
return
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
func GetUint64(word Word) uint64 {
|
|
return binary.LittleEndian.Uint64(word[:])
|
|
}
|
|
|
|
func PutUint64(dest []byte, i uint64) {
|
|
binary.LittleEndian.PutUint64(dest, i)
|
|
}
|