diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-10-04 22:07:56 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-10-04 22:07:56 +0000 |
commit | 52d295cb123671de01f1df9526e193e4b3967c82 (patch) | |
tree | b3e78fc63debbde183e9b44b50f0c1cfcc19f133 /src | |
parent | 75dcef321baeb94e4d35036fb7a7805e6350e662 (diff) |
added inlining for integer bitops
Diffstat (limited to 'src')
-rw-r--r-- | src/clj/clojure/boot.clj | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Numbers.java | 55 |
2 files changed, 51 insertions, 8 deletions
diff --git a/src/clj/clojure/boot.clj b/src/clj/clojure/boot.clj index 668e7ca7..e0dd3040 100644 --- a/src/clj/clojure/boot.clj +++ b/src/clj/clojure/boot.clj @@ -739,19 +739,23 @@ (defn bit-not "Bitwise complement" + {:inline (fn [x] `(. clojure.lang.Numbers (not ~x)))} [x] (. clojure.lang.Numbers not x)) (defn bit-and "Bitwise and" + {:inline (fn [x y] `(. clojure.lang.Numbers (and ~x ~y)))} [x y] (. clojure.lang.Numbers and x y)) (defn bit-or "Bitwise or" + {:inline (fn [x y] `(. clojure.lang.Numbers (or ~x ~y)))} [x y] (. clojure.lang.Numbers or x y)) (defn bit-xor "Bitwise exclusive or" + {:inline (fn [x y] `(. clojure.lang.Numbers (xor ~x ~y)))} [x y] (. clojure.lang.Numbers xor x y)) (defn bit-and-not diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java index 47bac98d..4a6f924c 100644 --- a/src/jvm/clojure/lang/Numbers.java +++ b/src/jvm/clojure/lang/Numbers.java @@ -294,21 +294,21 @@ static public Number divide(BigInteger n, BigInteger d){ (d.signum() < 0 ? d.negate() : d)); } -static public Number not(Number x){ - return bitOps(x).not(x); +static public Number not(Object x){ + return bitOps(x).not((Number)x); } -static public Number and(Number x, Number y){ - return bitOps(x).combine(bitOps(y)).and(x, y); +static public Number and(Object x, Object y){ + return bitOps(x).combine(bitOps(y)).and((Number)x, (Number)y); } -static public Number or(Number x, Number y){ - return bitOps(x).combine(bitOps(y)).or(x, y); +static public Number or(Object x, Object y){ + return bitOps(x).combine(bitOps(y)).or((Number)x, (Number)y); } -static public Number xor(Number x, Number y){ - return bitOps(x).combine(bitOps(y)).xor(x, y); +static public Number xor(Object x, Object y){ + return bitOps(x).combine(bitOps(y)).xor((Number)x, (Number)y); } static public Number andNot(Number x, Number y){ @@ -1562,6 +1562,21 @@ static public int add(int x, int y){ return ret; } +static public int not(int x){ + return ~x; +} + +static public int and(int x, int y){ + return x & y; +} + +static public int or(int x, int y){ + return x | y; +} + +static public int xor(int x, int y){ + return x ^ y; +} static public int minus(int x, int y){ int ret = x - y; @@ -3460,6 +3475,30 @@ static public Number add(Object x, int y){ return add(x,(Object)y); } +static public Number and(int x, Object y){ + return and((Object)x,y); +} + +static public Number and(Object x, int y){ + return and(x,(Object)y); +} + +static public Number or(int x, Object y){ + return or((Object)x,y); +} + +static public Number or(Object x, int y){ + return or(x,(Object)y); +} + +static public Number xor(int x, Object y){ + return xor((Object)x,y); +} + +static public Number xor(Object x, int y){ + return xor(x,(Object)y); +} + static public Number add(float x, Object y){ return add((Object)x,y); } |