tendermint/vm/common.go

55 lines
891 B
Go
Raw Normal View History

2015-03-16 02:24:08 -07:00
package vm
import (
2015-03-17 21:46:26 -07:00
"encoding/binary"
2015-03-16 02:24:08 -07:00
)
var (
2015-03-17 21:46:26 -07:00
Zero = Word{0}
One = Word{1}
)
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
type Word [32]byte
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
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
}
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
func Uint64ToWord(i uint64) Word {
word := Word{}
PutUint64(word[:], i)
return word
}
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
func BytesToWord(bz []byte) Word {
word := Word{}
copy(word[:], bz)
return word
}
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
func LeftPadWord(bz []byte) (word Word) {
copy(word[:], bz)
return
}
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
func RightPadWord(bz []byte) (word Word) {
copy(word[32-len(bz):], bz)
return
}
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
//-----------------------------------------------------------------------------
2015-03-16 02:24:08 -07:00
2015-03-17 21:46:26 -07:00
func GetUint64(word Word) uint64 {
return binary.LittleEndian.Uint64(word[:])
2015-03-16 02:24:08 -07:00
}
2015-03-17 21:46:26 -07:00
func PutUint64(dest []byte, i uint64) {
binary.LittleEndian.PutUint64(dest, i)
2015-03-16 02:24:08 -07:00
}