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