1 21 22 package org.armedbear.lisp; 23 24 import java.math.BigInteger ; 25 26 public final class logbitp extends Primitive2 29 { 30 private logbitp() 31 { 32 super("logbitp", "index integer"); 33 } 34 35 public LispObject execute(LispObject first, LispObject second) 36 throws ConditionThrowable 37 { 38 int index = -1; 39 if (first instanceof Fixnum) { 40 index = ((Fixnum)first).getValue(); 41 } else if (first instanceof Bignum) { 42 if (((Bignum)first).getValue().signum() > 0) 45 index = Integer.MAX_VALUE; 46 } 47 if (index < 0) 48 return signal(new TypeError(first, "non-negative integer")); 49 BigInteger n; 50 if (second instanceof Fixnum) 51 n = ((Fixnum)second).getBigInteger(); 52 else if (second instanceof Bignum) 53 n = ((Bignum)second).getValue(); 54 else 55 return signal(new TypeError(second, Symbol.INTEGER)); 56 if (index == Integer.MAX_VALUE) 58 return n.signum() < 0 ? T : NIL; 59 return n.testBit(index) ? T : NIL; 60 } 61 62 private static final Primitive2 LOGBITP = new logbitp(); 63 } 64 | Popular Tags |