Skip to content

Commit 9e810bf

Browse files
cemerickChouser
authored andcommitted
added sorted-set-by, adapted from timothypratley's patch, fixes clojure#79
Signed-off-by: Chouser <chouser@n01se.net>
1 parent d910b3d commit 9e810bf

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed

src/clj/clojure/core.clj

+14-8
Original file line numberDiff line numberDiff line change
@@ -266,24 +266,30 @@
266266
"Returns a new hash set with supplied keys."
267267
([] #{})
268268
([& keys]
269-
(. clojure.lang.PersistentHashSet (create keys))))
269+
(clojure.lang.PersistentHashSet/create keys)))
270270

271271
(defn sorted-map
272272
"keyval => key val
273273
Returns a new sorted map with supplied mappings."
274274
([& keyvals]
275-
(. clojure.lang.PersistentTreeMap (create keyvals))))
276-
277-
(defn sorted-set
278-
"Returns a new sorted set with supplied keys."
279-
([& keys]
280-
(. clojure.lang.PersistentTreeSet (create keys))))
275+
(clojure.lang.PersistentTreeMap/create keyvals)))
281276

282277
(defn sorted-map-by
283278
"keyval => key val
284279
Returns a new sorted map with supplied mappings, using the supplied comparator."
285280
([comparator & keyvals]
286-
(. clojure.lang.PersistentTreeMap (create comparator keyvals))))
281+
(clojure.lang.PersistentTreeMap/create comparator keyvals)))
282+
283+
(defn sorted-set
284+
"Returns a new sorted set with supplied keys."
285+
([& keys]
286+
(clojure.lang.PersistentTreeSet/create keys)))
287+
288+
(defn sorted-set-by
289+
"Returns a new sorted set with supplied keys, using the supplied comparator."
290+
([comparator & keys]
291+
(clojure.lang.PersistentTreeSet/create comparator keys)))
292+
287293

288294
;;;;;;;;;;;;;;;;;;;;
289295
(def

src/jvm/clojure/lang/PersistentTreeSet.java

+27
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ public static PersistentTreeSet create(Object... init){
2727
return ret;
2828
}
2929

30+
public static PersistentTreeSet create(Comparator comp, Object... init){
31+
PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
32+
for(int i = 0; i < init.length; i++)
33+
{
34+
ret = (PersistentTreeSet) ret.cons(init[i]);
35+
}
36+
return ret;
37+
}
38+
3039
public static PersistentTreeSet create(List init){
3140
PersistentTreeSet ret = EMPTY;
3241
for(Object key : init)
@@ -36,6 +45,15 @@ public static PersistentTreeSet create(List init){
3645
return ret;
3746
}
3847

48+
public static PersistentTreeSet create(Comparator comp, List init){
49+
PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
50+
for(Object key : init)
51+
{
52+
ret = (PersistentTreeSet) ret.cons(key);
53+
}
54+
return ret;
55+
}
56+
3957
static public PersistentTreeSet create(ISeq items){
4058
PersistentTreeSet ret = EMPTY;
4159
for(; items != null; items = items.next())
@@ -45,6 +63,15 @@ static public PersistentTreeSet create(ISeq items){
4563
return ret;
4664
}
4765

66+
static public PersistentTreeSet create(Comparator comp, ISeq items){
67+
PersistentTreeSet ret = new PersistentTreeSet(null, new PersistentTreeMap(null, comp));
68+
for(; items != null; items = items.next())
69+
{
70+
ret = (PersistentTreeSet) ret.cons(items.first());
71+
}
72+
return ret;
73+
}
74+
4875
PersistentTreeSet(IPersistentMap meta, IPersistentMap impl){
4976
super(meta, impl);
5077
}

0 commit comments

Comments
 (0)