Skip to content

Commit c670c81

Browse files
committed
implement Sorted
1 parent 4933709 commit c670c81

3 files changed

Lines changed: 24 additions & 55 deletions

File tree

src-java/datascript/SortedSet.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*/
2424

2525
@SuppressWarnings("unchecked")
26-
public class SortedSet extends ASortedSet implements IEditableCollection, ITransientCollection, Reversible, IReduce {
26+
public class SortedSet extends ASortedSet implements IEditableCollection, ITransientCollection, Reversible, Sorted, IReduce {
2727

2828
static Leaf[] EARLY_EXIT = new Leaf[0],
2929
UNCHANGED = new Leaf[0];
@@ -168,6 +168,12 @@ public SortedSet withMeta(IPersistentMap meta) {
168168
// Reversible
169169
public ISeq rseq() { return rslice(null, null, _cmp); }
170170

171+
// Sorted
172+
public Comparator comparator() { return _cmp; }
173+
public Object entryKey(Object entry) { return entry; }
174+
public ISeq seq(boolean asc) { return asc ? seq() : rseq(); }
175+
public ISeq seqFrom(Object key, boolean asc) { return asc ? slice(key, null) : rslice(key, null); }
176+
171177
// IReduce
172178
public Object reduce(IFn f) {
173179
Seq seq = seq();

src/datascript/btset.cljs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,12 @@
447447
IReversible
448448
(-rseq [this] (rseq (btset-iter this)))
449449

450+
; ISorted
451+
; (-sorted-seq [this ascending?])
452+
; (-sorted-seq-from [this k ascending?])
453+
; (-entry-key [this entry] entry)
454+
; (-comparator [this] comparator)
455+
450456
ICounted
451457
(-count [_] cnt)
452458

test-java/datascript/Bench.java

Lines changed: 11 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -159,32 +159,21 @@ class DatomicSet extends APersistentCollection<BTSet> {
159159
DatomicSet create(BTSet impl) { return new DatomicSet(impl); }
160160
}
161161

162-
163162
class DatascriptSet extends APersistentCollection<SortedSet> {
164163
DatascriptSet(SortedSet impl) { _impl = impl; }
165164
DatascriptSet(int ml) {
166165
SortedSet.setMaxLen(ml);
167166
_impl = new SortedSet();
168167
}
169-
DatascriptSet create(SortedSet impl) { return new DatascriptSet(impl);}
168+
DatascriptSet create(SortedSet impl) { return new DatascriptSet(impl); }
170169
}
171170

172-
class OldDatascriptSet extends APersistentCollection<Object> {
173-
static IFn ctor;
174-
static {
175-
Symbol ns = (Symbol) Clojure.var("clojure.core", "symbol").invoke("datascript.btset");
176-
Clojure.var("clojure.core", "require").invoke(ns);
177-
// ctor = (IFn) Clojure.var("datascript.btset", "btset-by");
178-
ctor = (IFn) Clojure.var("datascript.btset", "btset");
179-
}
180-
181-
OldDatascriptSet(Object impl) { _impl = impl; }
182-
// OldDatascriptSet(int ml) { _impl = (Object) ctor.invoke(RT.DEFAULT_COMPARATOR); }
183-
OldDatascriptSet(int ml) { _impl = (Object) ctor.invoke(); }
184-
OldDatascriptSet create(Object impl) { return new OldDatascriptSet(impl); }
171+
class ClojureSet extends APersistentCollection<PersistentTreeSet> {
172+
ClojureSet(PersistentTreeSet impl) { _impl = impl; }
173+
ClojureSet(int ml) { _impl = PersistentTreeSet.create(RT.DEFAULT_COMPARATOR, null); }
174+
ClojureSet create(PersistentTreeSet impl) { return new ClojureSet(impl); }
185175
}
186176

187-
188177
public class Bench {
189178
// static Integer[] maxLens = new Integer[]{8,16,32,64,128,256,512,1024};
190179
// static Integer[] maxLens = new Integer[]{32, 64, 128};
@@ -236,66 +225,34 @@ public static void runBench(Class<? extends ABench> benchClass, Collection sourc
236225

237226
public static void bench() throws Exception {
238227
new DatomicSet(0); // println warnings before any other output
239-
new OldDatascriptSet(0);
240228

241229
System.out.println("Lengths " + String.join(" ", Arrays.stream(maxLens).map((ml)-> ml.toString() + " max").collect(Collectors.toList())));
242230

243231
ArrayList<Integer> source = randomList(100000);
244232
ArrayList<Integer> bigSource = randomList(1000000);
245233

246234
System.out.println("\n === 100K ADDs ===");
235+
runBench(AddBench.class, source, ClojureSet.class, false);
247236
runBench(AddBench.class, source, DatomicSet.class);
248-
// runBench(AddBench.class, source, OldDatascriptSet.class);
249-
// runBench(AddBench.class, source, PersistentBTSet.class, false);
250-
// runBench(AddBench.class, source, TransientBTSet.class, true);
251-
// runBench(AddBench.class, source, TwoNodesSet.class, true);
252-
// runBench(AddBench.class, source, ExtraLeafSet.class, true);
253-
// runBench(AddBench.class, source, EarlyExitSet.class, true);
254-
// runBench(AddBench.class, source, SmallTransientSet.class, true);
255-
// runBench(AddBench.class, source, LinearSearchSet.class, true);
256-
// runBench(AddBench.class, source, FlatIterSet.class, true);
257-
// runBench(AddBench.class, source, ReverseFlatIterSet.class, true);
258-
// runBench(AddBench.class, source, AtomicBooleanSet.class, false);
259-
// runBench(AddBench.class, source, AtomicBooleanSet.class, true);
260-
// runBench(AddBench.class, source, CleanupSet.class, false);
261-
// runBench(AddBench.class, source, CleanupSet.class, true);
262237
runBench(AddBench.class, source, DatascriptSet.class, false);
263238
runBench(AddBench.class, source, DatascriptSet.class, true);
264239

265240
System.out.println("\n === 100K CONTAINS ===");
241+
runBench(ContainsBench.class, source, ClojureSet.class);
266242
runBench(ContainsBench.class, source, DatomicSet.class);
267-
// runBench(ContainsBench.class, source, OldDatascriptSet.class);
268-
// runBench(ContainsBench.class, source, SmallTransientSet.class );
269-
// runBench(ContainsBench.class, source, LinearSearchSet.class );
270-
// runBench(ContainsBench.class, source, FlatIterSet.class );
271-
// runBench(ContainsBench.class, source, ReverseFlatIterSet.class);
272-
// runBench(ContainsBench.class, source, AtomicBooleanSet.class);
273-
// runBench(ContainsBench.class, source, CleanupSet.class);
274243
runBench(ContainsBench.class, source, DatascriptSet.class);
275244

276245
System.out.println("\n === ITERATE♻ over 1M ===");
277-
// runBench(IterateBench.class, bigSource, OldDatascriptSet.class);
278-
// runBench(IterateBench.class, bigSource, LinearSearchSet.class );
279-
// runBench(IterateBench.class, bigSource, FlatIterSet.class );
280-
// runBench(IterateBench.class, bigSource, ReverseFlatIterSet.class);
281-
// runBench(IterateBench.class, bigSource, AtomicBooleanSet.class );
282-
// runBench(IterateBench.class, bigSource, CleanupSet.class );
283-
// runBench(IterateBench.class, bigSource, SliceSet.class );
246+
runBench(IterateBench.class, bigSource, ClojureSet.class);
284247
runBench(IterateBench.class, bigSource, DatascriptSet.class);
285248

286249
System.out.println("\n === SEQ ITER over 1M ===");
250+
runBench(SeqIterateBench.class, bigSource, ClojureSet.class);
287251
runBench(SeqIterateBench.class, bigSource, DatomicSet.class);
288-
// runBench(SeqIterateBench.class, bigSource, OldDatascriptSet.class);
289252
runBench(SeqIterateBench.class, bigSource, DatascriptSet.class);
290253

291254
System.out.println("\n === 100K REMOVEs ===");
292-
// runBench(RemoveBench.class, source, OldDatascriptSet.class);
293-
// runBench(RemoveBench.class, source, DisjoinSet.class, false);
294-
// runBench(RemoveBench.class, source, DisjoinSet.class, true);
295-
// runBench(RemoveBench.class, source, EarlyExitDisjSet.class, false);
296-
// runBench(RemoveBench.class, source, EarlyExitDisjSet.class, true);
297-
// runBench(RemoveBench.class, source, CleanupSet.class, false);
298-
// runBench(RemoveBench.class, source, CleanupSet.class, true);
255+
runBench(RemoveBench.class, source, ClojureSet.class, false);
299256
runBench(RemoveBench.class, source, DatascriptSet.class, false);
300257
runBench(RemoveBench.class, source, DatascriptSet.class, true);
301258
}
@@ -374,6 +331,6 @@ public static void test() throws Exception {
374331

375332
public static void main(String args[]) throws Exception {
376333
bench();
377-
test();
334+
// test();
378335
}
379336
}

0 commit comments

Comments
 (0)