From 2727abe4fc0e169c5414e5cb0c1cc7d5d33bf69d Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 12 Nov 2008 11:00:11 -0800 Subject: [PATCH] - lowercased package name (Bignum -> bignum) - implemented some missing functionality (and, or, xor of positive ints) R=r OCL=19087 CL=19087 --- src/lib/bignum.go | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/lib/bignum.go b/src/lib/bignum.go index 6c3da2638b..9499a433f9 100755 --- a/src/lib/bignum.go +++ b/src/lib/bignum.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package Bignum +package bignum // A package for arbitrary precision arithmethic. // It implements the following numeric types: @@ -1076,27 +1076,42 @@ func (x *Integer) Shl(s uint) *Integer { func (x *Integer) Shr(s uint) *Integer { z := MakeInt(x.sign, x.mant.Shr(s)); if x.IsNeg() { - panic("UNIMPLEMENTED"); + panic("UNIMPLEMENTED Integer.Shr() of negative values"); } return z; } func (x *Integer) And(y *Integer) *Integer { - panic("UNIMPLEMENTED"); - return nil; + var z *Integer; + if !x.sign && !y.sign { + z = MakeInt(false, x.mant.And(y.mant)); + } else { + panic("UNIMPLEMENTED Integer.And() of negative values"); + } + return z; } func (x *Integer) Or(y *Integer) *Integer { - panic("UNIMPLEMENTED"); - return nil; + var z *Integer; + if !x.sign && !y.sign { + z = MakeInt(false, x.mant.Or(y.mant)); + } else { + panic("UNIMPLEMENTED Integer.Or() of negative values"); + } + return z; } func (x *Integer) Xor(y *Integer) *Integer { - panic("UNIMPLEMENTED"); - return nil; + var z *Integer; + if !x.sign && !y.sign { + z = MakeInt(false, x.mant.Xor(y.mant)); + } else { + panic("UNIMPLEMENTED Integer.Xor() of negative values"); + } + return z; } -- 2.50.0