diff options
author | obscuren <geffobscura@gmail.com> | 2014-12-20 09:34:12 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-12-20 09:34:12 +0800 |
commit | 3983dd2428137211f84f299f9ce8690c22f50afd (patch) | |
tree | 3a2dc53b365e6f377fc82a3514150d1297fe549c /pow/ar/ops.go | |
parent | 7daa8c2f6eb25511c6a54ad420709af911fc6748 (diff) | |
parent | 0a9dc1536c5d776844d6947a0090ff7e1a7c6ab4 (diff) | |
download | go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar.gz go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar.bz2 go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar.lz go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar.xz go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.tar.zst go-tangerine-3983dd2428137211f84f299f9ce8690c22f50afd.zip |
Merge branch 'release/v0.7.10'vv0.7.10
Diffstat (limited to 'pow/ar/ops.go')
-rw-r--r-- | pow/ar/ops.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/pow/ar/ops.go b/pow/ar/ops.go new file mode 100644 index 000000000..3a099be08 --- /dev/null +++ b/pow/ar/ops.go @@ -0,0 +1,54 @@ +package ar + +import "math/big" + +const lenops int64 = 9 + +type OpsFunc func(a, b *big.Int) *big.Int + +var ops [lenops]OpsFunc + +func init() { + ops[0] = Add + ops[1] = Mul + ops[2] = Mod + ops[3] = Xor + ops[4] = And + ops[5] = Or + ops[6] = Sub1 + ops[7] = XorSub + ops[8] = Rsh +} + +func Add(x, y *big.Int) *big.Int { + return new(big.Int).Add(x, y) +} +func Mul(x, y *big.Int) *big.Int { + return new(big.Int).Mul(x, y) +} +func Mod(x, y *big.Int) *big.Int { + return new(big.Int).Mod(x, y) +} +func Xor(x, y *big.Int) *big.Int { + return new(big.Int).Xor(x, y) +} +func And(x, y *big.Int) *big.Int { + return new(big.Int).And(x, y) +} +func Or(x, y *big.Int) *big.Int { + return new(big.Int).Or(x, y) +} +func Sub1(x, y *big.Int) *big.Int { + a := big.NewInt(-1) + a.Sub(a, x) + + return a +} +func XorSub(x, y *big.Int) *big.Int { + t := Sub1(x, nil) + + return t.Xor(t, y) +} +func Rsh(x, y *big.Int) *big.Int { + return new(big.Int).Rsh(x, uint(y.Uint64()%64)) +} |