OSDN Git Service

new repo
[bytom/vapor.git] / protocol / vm / types.go
1 package vm
2
3 import "encoding/binary"
4
5 var trueBytes = []byte{1}
6
7 func BoolBytes(b bool) (result []byte) {
8         if b {
9                 return trueBytes
10         }
11         return []byte{}
12 }
13
14 func AsBool(bytes []byte) bool {
15         for _, b := range bytes {
16                 if b != 0 {
17                         return true
18                 }
19         }
20         return false
21 }
22
23 func Int64Bytes(n int64) []byte {
24         if n == 0 {
25                 return []byte{}
26         }
27         res := make([]byte, 8)
28         // converting int64 to uint64 is a safe operation that
29         // preserves all data
30         binary.LittleEndian.PutUint64(res, uint64(n))
31         for len(res) > 0 && res[len(res)-1] == 0 {
32                 res = res[:len(res)-1]
33         }
34         return res
35 }
36
37 func AsInt64(b []byte) (int64, error) {
38         if len(b) == 0 {
39                 return 0, nil
40         }
41         if len(b) > 8 {
42                 return 0, ErrBadValue
43         }
44
45         var padded [8]byte
46         copy(padded[:], b)
47
48         res := binary.LittleEndian.Uint64(padded[:])
49         // converting uint64 to int64 is a safe operation that
50         // preserves all data
51         return int64(res), nil
52 }