summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChas Emerick <cemerick@snowtide.com>2009-06-17 18:25:14 -0400
committerChouser <chouser@n01se.net>2009-10-28 22:04:35 -0400
commit9e810bf17700982eb1a3a5cf21c0fcba6bc0eea5 (patch)
tree5c23cd8093ecee48c983d08f0ee0cc82f5db08e0
parentd910b3d997e1c40528aab2212fe356a8598bb738 (diff)
added sorted-set-by, adapted from timothypratley's patch, fixes #79
Signed-off-by: Chouser <chouser@n01se.net>
-rw-r--r--src/clj/clojure/core.clj22
-rw-r--r--src/jvm/clojure/lang/PersistentTreeSet.java27
2 files changed, 41 insertions, 8 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 90e3f76f..95402a00 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -266,24 +266,30 @@
"Returns a new hash set with supplied keys."
([] #{})
([& keys]
- (. clojure.lang.PersistentHashSet (create keys))))
+ (clojure.lang.PersistentHashSet/create keys)))
(defn sorted-map
"keyval => key val
Returns a new sorted map with supplied mappings."
([& keyvals]
- (. clojure.lang.PersistentTreeMap (create keyvals))))
-
-(defn sorted-set
- "Returns a new sorted set with supplied keys."
- ([& keys]
- (. clojure.lang.PersistentTreeSet (create keys))))
+ (clojure.lang.PersistentTreeMap/create keyvals)))
(defn sorted-map-by
"keyval => key val
Returns a new sorted map with supplied mappings, using the supplied comparator."
([comparator & keyvals]
- (. clojure.lang.PersistentTreeMap (create comparator keyvals))))
+ (clojure.lang.PersistentTreeMap/create comparator keyvals)))
+
+(defn sorted-set
+ "Returns a new sorted set with supplied keys."
+ ([& keys]
+ (clojure.lang.PersistentTreeSet/create keys)))
+
+(defn sorted-set-by
+ "Returns a new sorted set with supplied keys, using the supplied comparator."
+ ([comparator & keys]
+ (clojure.lang.PersistentTreeSet/create comparator keys)))
+
;;;;;;;;;;;;;;;;;;;;
(def
diff --git a/src/jvm/clojure/lang/PersistentTreeSet.java b/src/jvm/clojure/lang/PersistentTreeSet.java
index f6f50125..e7e625de 100644
--- a/src/jvm/clojure/lang/PersistentTreeSet.java
+++ b/src/jvm/clojure/lang/PersistentTreeSet.java
@@ -27,6 +27,15 @@ public static PersistentTreeSet create(Object... init){
return ret;
}
+public static PersistentTreeSet create(Comparator comp, Object... init){
+ PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
+ for(int i = 0; i < init.length; i++)
+ {
+ ret = (PersistentTreeSet) ret.cons(init[i]);
+ }
+ return ret;
+}
+
public static PersistentTreeSet create(List init){
PersistentTreeSet ret = EMPTY;
for(Object key : init)
@@ -36,6 +45,15 @@ public static PersistentTreeSet create(List init){
return ret;
}
+public static PersistentTreeSet create(Comparator comp, List init){
+ PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
+ for(Object key : init)
+ {
+ ret = (PersistentTreeSet) ret.cons(key);
+ }
+ return ret;
+}
+
static public PersistentTreeSet create(ISeq items){
PersistentTreeSet ret = EMPTY;
for(; items != null; items = items.next())
@@ -45,6 +63,15 @@ static public PersistentTreeSet create(ISeq items){
return ret;
}
+static public PersistentTreeSet create(Comparator comp, ISeq items){
+ PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
+ for(; items != null; items = items.next())
+ {
+ ret = (PersistentTreeSet) ret.cons(items.first());
+ }
+ return ret;
+}
+
PersistentTreeSet(IPersistentMap meta, IPersistentMap impl){
super(meta, impl);
}