github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/mobile/big.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:42</date> 10 //</624342653017788416> 11 12 13 //包含来自Math/Big包的所有包装。 14 15 package geth 16 17 import ( 18 "errors" 19 "math/big" 20 21 "github.com/ethereum/go-ethereum/common" 22 ) 23 24 //bigint表示带符号的多精度整数。 25 type BigInt struct { 26 bigint *big.Int 27 } 28 29 //new bigint分配并返回一个新的bigint集到x。 30 func NewBigInt(x int64) *BigInt { 31 return &BigInt{big.NewInt(x)} 32 } 33 34 //GetBytes返回x的绝对值作为一个大尾数字节片。 35 func (bi *BigInt) GetBytes() []byte { 36 return bi.bigint.Bytes() 37 } 38 39 //字符串以格式化的十进制字符串形式返回x的值。 40 func (bi *BigInt) String() string { 41 return bi.bigint.String() 42 } 43 44 //GetInt64返回x的Int64表示形式。如果x不能用 45 //一个Int64,结果是未定义的。 46 func (bi *BigInt) GetInt64() int64 { 47 return bi.bigint.Int64() 48 } 49 50 //setbytes将buf解释为big endian无符号整数的字节,并设置 51 //这个值的整数。 52 func (bi *BigInt) SetBytes(buf []byte) { 53 bi.bigint.SetBytes(common.CopyBytes(buf)) 54 } 55 56 //setInt64将大int设置为x。 57 func (bi *BigInt) SetInt64(x int64) { 58 bi.bigint.SetInt64(x) 59 } 60 61 //签名返回: 62 // 63 //-如果x<1则为0 64 //0如果x==0 65 //+ 1如果x>0 66 // 67 func (bi *BigInt) Sign() int { 68 return bi.bigint.Sign() 69 } 70 71 //setString将big int设置为x。 72 // 73 //字符串前缀决定了实际的转换基数。前缀“0x”或 74 //“0x”选择基数16;“0”前缀选择基数8,“0b”或“0b”前缀 75 //选择基数2。否则,选择的基数为10。 76 func (bi *BigInt) SetString(x string, base int) { 77 bi.bigint.SetString(x, base) 78 } 79 80 //big ints代表一部分大整数。 81 type BigInts struct{ bigints []*big.Int } 82 83 //SIZE返回切片中的大整数数。 84 func (bi *BigInts) Size() int { 85 return len(bi.bigints) 86 } 87 88 //get从切片返回给定索引处的bigint。 89 func (bi *BigInts) Get(index int) (bigint *BigInt, _ error) { 90 if index < 0 || index >= len(bi.bigints) { 91 return nil, errors.New("index out of bounds") 92 } 93 return &BigInt{bi.bigints[index]}, nil 94 } 95 96 //set在切片中的给定索引处设置big int。 97 func (bi *BigInts) Set(index int, bigint *BigInt) error { 98 if index < 0 || index >= len(bi.bigints) { 99 return errors.New("index out of bounds") 100 } 101 bi.bigints[index] = bigint.bigint 102 return nil 103 } 104 105 //GetString返回x的值,该值是以某个数字为基数的格式化字符串。 106 func (bi *BigInt) GetString(base int) string { 107 return bi.bigint.Text(base) 108 } 109