You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
891 B

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
  1. package vm
  2. import (
  3. "encoding/binary"
  4. )
  5. var (
  6. Zero = Word{0}
  7. One = Word{1}
  8. )
  9. type Word [32]byte
  10. func (w Word) Copy() Word { return w }
  11. func (w Word) Bytes() []byte { return w[:] } // copied.
  12. func (w Word) IsZero() bool {
  13. accum := byte(0)
  14. for _, byt := range w {
  15. accum |= byt
  16. }
  17. return accum == 0
  18. }
  19. func Uint64ToWord(i uint64) Word {
  20. word := Word{}
  21. PutUint64(word[:], i)
  22. return word
  23. }
  24. func BytesToWord(bz []byte) Word {
  25. word := Word{}
  26. copy(word[:], bz)
  27. return word
  28. }
  29. func LeftPadWord(bz []byte) (word Word) {
  30. copy(word[:], bz)
  31. return
  32. }
  33. func RightPadWord(bz []byte) (word Word) {
  34. copy(word[32-len(bz):], bz)
  35. return
  36. }
  37. //-----------------------------------------------------------------------------
  38. func GetUint64(word Word) uint64 {
  39. return binary.LittleEndian.Uint64(word[:])
  40. }
  41. func PutUint64(dest []byte, i uint64) {
  42. binary.LittleEndian.PutUint64(dest, i)
  43. }