diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-05-27 12:55:25 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-05-27 12:55:25 +0000 |
commit | 697b69fe9c8f5e2e8d40382e70d4ddd490c4a9ee (patch) | |
tree | c0073bbb7926e456e1a34f07ca590f9f4ed226bf /src | |
parent | e0ba25035bb366f5f83289d3fd6e71c338b058b7 (diff) |
added empty
Diffstat (limited to 'src')
-rw-r--r-- | src/boot.clj | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/AMapEntry.java | 3 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentVector.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/IPersistentCollection.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LazilyPersistentVector.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentArrayMap.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashSet.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentList.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentQueue.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentStructMap.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentTreeMap.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentTreeSet.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentVector.java | 4 |
15 files changed, 55 insertions, 1 deletions
diff --git a/src/boot.clj b/src/boot.clj index 98d78c88..3bd38a05 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -2427,3 +2427,8 @@ not-every? (comp not every?)) (defn ~name ~args ~(apply inline args)) (let [v# (var ~name)] (.setMeta v# (assoc ^v# :inline ~inline)))))) + +(defn empty + "Returns an empty collection of the same category as coll, or null" + [#^ clojure.lang.IPersistentCollection coll] + (.empty coll))
\ No newline at end of file diff --git a/src/jvm/clojure/lang/AMapEntry.java b/src/jvm/clojure/lang/AMapEntry.java index ce4c219c..5496f0eb 100644 --- a/src/jvm/clojure/lang/AMapEntry.java +++ b/src/jvm/clojure/lang/AMapEntry.java @@ -15,6 +15,9 @@ package clojure.lang; import java.io.StringWriter; public abstract class AMapEntry implements IMapEntry, IPersistentVector{ +public IPersistentCollection empty(){ + return null; +} public boolean equals(Object obj){ return APersistentVector.doEquals(this, obj); diff --git a/src/jvm/clojure/lang/APersistentVector.java b/src/jvm/clojure/lang/APersistentVector.java index 086d8369..46dfbb25 100644 --- a/src/jvm/clojure/lang/APersistentVector.java +++ b/src/jvm/clojure/lang/APersistentVector.java @@ -357,6 +357,10 @@ static class SubVector extends APersistentVector{ return new SubVector(_meta, v.assocN(end, o), start, end + 1); } + public IPersistentCollection empty(){ + return PersistentVector.EMPTY.withMeta(meta()); + } + public IPersistentStack pop(){ if(end - 1 == start) { diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java index 2dca27a5..e519621d 100644 --- a/src/jvm/clojure/lang/ASeq.java +++ b/src/jvm/clojure/lang/ASeq.java @@ -17,6 +17,10 @@ public abstract class ASeq extends Obj implements ISeq, Collection, Sequential{ transient int _hash = -1;
+public IPersistentCollection empty(){
+ return null;
+}
+
protected ASeq(IPersistentMap meta){
super(meta);
}
diff --git a/src/jvm/clojure/lang/IPersistentCollection.java b/src/jvm/clojure/lang/IPersistentCollection.java index 77e32738..f97b02cd 100644 --- a/src/jvm/clojure/lang/IPersistentCollection.java +++ b/src/jvm/clojure/lang/IPersistentCollection.java @@ -18,4 +18,6 @@ int count(); ISeq seq();
IPersistentCollection cons(Object o);
+
+IPersistentCollection empty();
}
diff --git a/src/jvm/clojure/lang/LazilyPersistentVector.java b/src/jvm/clojure/lang/LazilyPersistentVector.java index 9c4c9a0a..bbe580fa 100644 --- a/src/jvm/clojure/lang/LazilyPersistentVector.java +++ b/src/jvm/clojure/lang/LazilyPersistentVector.java @@ -54,6 +54,10 @@ public IPersistentVector cons(Object o){ return v().cons(o); } +public IPersistentCollection empty(){ + return PersistentVector.EMPTY.withMeta(meta()); +} + public IPersistentStack pop(){ return v().pop(); } diff --git a/src/jvm/clojure/lang/PersistentArrayMap.java b/src/jvm/clojure/lang/PersistentArrayMap.java index 63516714..969ec701 100644 --- a/src/jvm/clojure/lang/PersistentArrayMap.java +++ b/src/jvm/clojure/lang/PersistentArrayMap.java @@ -142,7 +142,7 @@ public IPersistentMap without(Object key){ return this;
}
-IPersistentMap empty(){
+public IPersistentMap empty(){
return (IPersistentMap) EMPTY.withMeta(meta());
}
diff --git a/src/jvm/clojure/lang/PersistentHashMap.java b/src/jvm/clojure/lang/PersistentHashMap.java index adf3beeb..49530586 100644 --- a/src/jvm/clojure/lang/PersistentHashMap.java +++ b/src/jvm/clojure/lang/PersistentHashMap.java @@ -146,6 +146,10 @@ public ISeq seq(){ return root.nodeSeq(); } +public IPersistentCollection empty(){ + return EMPTY.withMeta(meta()); +} + static int mask(int hash, int shift){ //return ((hash << shift) >>> 27);// & 0x01f; return (hash >>> shift) & 0x01f; diff --git a/src/jvm/clojure/lang/PersistentHashSet.java b/src/jvm/clojure/lang/PersistentHashSet.java index 60794b97..9f216010 100644 --- a/src/jvm/clojure/lang/PersistentHashSet.java +++ b/src/jvm/clojure/lang/PersistentHashSet.java @@ -63,6 +63,10 @@ public IPersistentSet cons(Object o){ return new PersistentHashSet(meta(),impl.assoc(o,o)); } +public IPersistentCollection empty(){ + return EMPTY.withMeta(meta()); +} + public PersistentHashSet withMeta(IPersistentMap meta){ return new PersistentHashSet(meta, impl); } diff --git a/src/jvm/clojure/lang/PersistentList.java b/src/jvm/clojure/lang/PersistentList.java index 112eede6..cd86b033 100644 --- a/src/jvm/clojure/lang/PersistentList.java +++ b/src/jvm/clojure/lang/PersistentList.java @@ -88,6 +88,10 @@ public PersistentList cons(Object o){ return new PersistentList(meta(), o, this, _count + 1);
}
+public IPersistentCollection empty(){
+ return EMPTY.withMeta(meta());
+}
+
public PersistentList withMeta(IPersistentMap meta){
if(meta != _meta)
return new PersistentList(meta, _first, _rest, _count);
diff --git a/src/jvm/clojure/lang/PersistentQueue.java b/src/jvm/clojure/lang/PersistentQueue.java index 054b21af..53f35479 100644 --- a/src/jvm/clojure/lang/PersistentQueue.java +++ b/src/jvm/clojure/lang/PersistentQueue.java @@ -99,6 +99,10 @@ public PersistentQueue cons(Object o){ return new PersistentQueue(meta(), f, (r != null ? r : PersistentVector.EMPTY).cons(o));
}
+public IPersistentCollection empty(){
+ return EMPTY.withMeta(meta());
+}
+
public PersistentQueue withMeta(IPersistentMap meta){
return new PersistentQueue(meta, f, r);
}
diff --git a/src/jvm/clojure/lang/PersistentStructMap.java b/src/jvm/clojure/lang/PersistentStructMap.java index 2b371ffc..2b651c1b 100644 --- a/src/jvm/clojure/lang/PersistentStructMap.java +++ b/src/jvm/clojure/lang/PersistentStructMap.java @@ -177,6 +177,10 @@ public ISeq seq(){ return new Seq(null, def.keys, vals, 0, ext); } +public IPersistentCollection empty(){ + return construct(def, null); +} + static class Seq extends ASeq{ final int i; final ISeq keys; diff --git a/src/jvm/clojure/lang/PersistentTreeMap.java b/src/jvm/clojure/lang/PersistentTreeMap.java index fb9df3ad..a89cab38 100644 --- a/src/jvm/clojure/lang/PersistentTreeMap.java +++ b/src/jvm/clojure/lang/PersistentTreeMap.java @@ -126,6 +126,10 @@ public ISeq seq(){ return null; } +public IPersistentCollection empty(){ + return EMPTY.withMeta(meta()); +} + public ISeq rseq() throws Exception{ if(_count > 0) return Seq.create(tree, false, _count); diff --git a/src/jvm/clojure/lang/PersistentTreeSet.java b/src/jvm/clojure/lang/PersistentTreeSet.java index 8ffdb0d9..9055a05f 100644 --- a/src/jvm/clojure/lang/PersistentTreeSet.java +++ b/src/jvm/clojure/lang/PersistentTreeSet.java @@ -63,6 +63,10 @@ public IPersistentSet cons(Object o){ return new PersistentTreeSet(meta(),impl.assoc(o,o)); } +public IPersistentCollection empty(){ + return EMPTY.withMeta(meta()); +} + public ISeq rseq() throws Exception{ return APersistentMap.KeySeq.create(((Reversible) impl).rseq()); } diff --git a/src/jvm/clojure/lang/PersistentVector.java b/src/jvm/clojure/lang/PersistentVector.java index ca00fc76..f6158791 100644 --- a/src/jvm/clojure/lang/PersistentVector.java +++ b/src/jvm/clojure/lang/PersistentVector.java @@ -139,6 +139,10 @@ public PersistentVector cons(Object val){ return new PersistentVector(meta(), cnt + 1, newshift, newroot, new Object[]{val}); } +public IPersistentCollection empty(){ + return EMPTY.withMeta(meta()); +} + private Object[] pushTail(int level, Object[] arr, Object[] tailNode, Box expansion){ Object newchild; if(level == 0) |