|
|
- 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)
- }
|