aboutsummaryrefslogtreecommitdiff
path: root/samples/Java/clojure-util.java
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2012-07-23 15:52:49 -0500
committerJoshua Peek <josh@joshpeek.com>2012-07-23 15:52:49 -0500
commit7b6caa0f6c7603aabb5e6ed657e24aaddbeafc78 (patch)
treeec0522eae75bb04ae73d28ae3f599682a2bfdaeb /samples/Java/clojure-util.java
parent314f0e485227915931db361be14d308a210bedea (diff)
Rename samples subdirectories
Diffstat (limited to 'samples/Java/clojure-util.java')
-rw-r--r--samples/Java/clojure-util.java197
1 files changed, 197 insertions, 0 deletions
diff --git a/samples/Java/clojure-util.java b/samples/Java/clojure-util.java
new file mode 100644
index 0000000..02b5466
--- /dev/null
+++ b/samples/Java/clojure-util.java
@@ -0,0 +1,197 @@
+/**
+ * Copyright (c) Rich Hickey. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+ * which can be found in the file epl-v10.html at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+/* rich Apr 19, 2008 */
+
+package clojure.lang;
+
+import java.lang.ref.Reference;
+import java.math.BigInteger;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.lang.ref.SoftReference;
+import java.lang.ref.ReferenceQueue;
+
+public class Util{
+static public boolean equiv(Object k1, Object k2){
+ if(k1 == k2)
+ return true;
+ if(k1 != null)
+ {
+ if(k1 instanceof Number && k2 instanceof Number)
+ return Numbers.equal((Number)k1, (Number)k2);
+ else if(k1 instanceof IPersistentCollection || k2 instanceof IPersistentCollection)
+ return pcequiv(k1,k2);
+ return k1.equals(k2);
+ }
+ return false;
+}
+
+static public boolean equiv(long k1, long k2){
+ return k1 == k2;
+}
+
+static public boolean equiv(Object k1, long k2){
+ return equiv(k1, (Object)k2);
+}
+
+static public boolean equiv(long k1, Object k2){
+ return equiv((Object)k1, k2);
+}
+
+static public boolean equiv(double k1, double k2){
+ return k1 == k2;
+}
+
+static public boolean equiv(Object k1, double k2){
+ return equiv(k1, (Object)k2);
+}
+
+static public boolean equiv(double k1, Object k2){
+ return equiv((Object)k1, k2);
+}
+
+static public boolean equiv(boolean k1, boolean k2){
+ return k1 == k2;
+}
+
+static public boolean equiv(Object k1, boolean k2){
+ return equiv(k1, (Object)k2);
+}
+
+static public boolean equiv(boolean k1, Object k2){
+ return equiv((Object)k1, k2);
+}
+
+static public boolean equiv(char c1, char c2) {
+ return c1 == c2;
+}
+
+static public boolean pcequiv(Object k1, Object k2){
+ if(k1 instanceof IPersistentCollection)
+ return ((IPersistentCollection)k1).equiv(k2);
+ return ((IPersistentCollection)k2).equiv(k1);
+}
+
+static public boolean equals(Object k1, Object k2){
+ if(k1 == k2)
+ return true;
+ return k1 != null && k1.equals(k2);
+}
+
+static public boolean identical(Object k1, Object k2){
+ return k1 == k2;
+}
+
+static public Class classOf(Object x){
+ if(x != null)
+ return x.getClass();
+ return null;
+}
+
+static public int compare(Object k1, Object k2){
+ if(k1 == k2)
+ return 0;
+ if(k1 != null)
+ {
+ if(k2 == null)
+ return 1;
+ if(k1 instanceof Number)
+ return Numbers.compare((Number) k1, (Number) k2);
+ return ((Comparable) k1).compareTo(k2);
+ }
+ return -1;
+}
+
+static public int hash(Object o){
+ if(o == null)
+ return 0;
+ return o.hashCode();
+}
+
+static public int hasheq(Object o){
+ if(o == null)
+ return 0;
+ if(o instanceof Number)
+ return Numbers.hasheq((Number)o);
+ else if(o instanceof IHashEq)
+ return ((IHashEq)o).hasheq();
+ return o.hashCode();
+}
+
+static public int hashCombine(int seed, int hash){
+ //a la boost
+ seed ^= hash + 0x9e3779b9 + (seed << 6) + (seed >> 2);
+ return seed;
+}
+
+static public boolean isPrimitive(Class c){
+ return c != null && c.isPrimitive() && !(c == Void.TYPE);
+}
+
+static public boolean isInteger(Object x){
+ return x instanceof Integer
+ || x instanceof Long
+ || x instanceof BigInt
+ || x instanceof BigInteger;
+}
+
+static public Object ret1(Object ret, Object nil){
+ return ret;
+}
+
+static public ISeq ret1(ISeq ret, Object nil){
+ return ret;
+}
+
+static public <K,V> void clearCache(ReferenceQueue rq, ConcurrentHashMap<K, Reference<V>> cache){
+ //cleanup any dead entries
+ if(rq.poll() != null)
+ {
+ while(rq.poll() != null)
+ ;
+ for(Map.Entry<K, Reference<V>> e : cache.entrySet())
+ {
+ Reference<V> val = e.getValue();
+ if(val != null && val.get() == null)
+ cache.remove(e.getKey(), val);
+ }
+ }
+}
+
+static public RuntimeException runtimeException(String s){
+ return new RuntimeException(s);
+}
+
+static public RuntimeException runtimeException(String s, Throwable e){
+ return new RuntimeException(s, e);
+}
+
+/**
+ * Throw even checked exceptions without being required
+ * to declare them or catch them. Suggested idiom:
+ * <p>
+ * <code>throw sneakyThrow( some exception );</code>
+ */
+static public RuntimeException sneakyThrow(Throwable t) {
+ // http://www.mail-archive.com/javaposse@googlegroups.com/msg05984.html
+ if (t == null)
+ throw new NullPointerException();
+ Util.<RuntimeException>sneakyThrow0(t);
+ return null;
+}
+
+@SuppressWarnings("unchecked")
+static private <T extends Throwable> void sneakyThrow0(Throwable t) throws T {
+ throw (T) t;
+}
+
+}
+