Skip to content

Commit f846d68

Browse files
committed
added getInterval() to MemoryBTree
1 parent bdba9e3 commit f846d68

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

src/MemoryBTree/Base.mo

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ module {
897897
let (end_node, end_node_index) = Methods.get_leaf_node_by_index(btree, end);
898898

899899
let start_index = start_node_index : Nat;
900-
let end_index = end_node_index + 1 : Nat; // + 1 because the end index is exclusive
900+
let end_index = end_node_index : Nat;
901901

902902
RevIter.map<(Blob, Blob), (K, V)>(
903903
Methods.new_blobs_iterator(btree, start_node, start_index, end_node, end_index),
@@ -907,6 +907,20 @@ module {
907907
);
908908
};
909909

910+
public func getInterval<K, V>(btree : MemoryBTree, btree_utils : BTreeUtils<K, V>, start : ?K, end : ?K) : (Nat, Nat) {
911+
let start_rank = switch (start) {
912+
case (?key) getIndex(btree, btree_utils, key);
913+
case (null) 0;
914+
};
915+
916+
let end_rank = switch (end) {
917+
case (?key) getIndex(btree, btree_utils, key) + 1; // +1 because the end is exclusive
918+
case (null) btree.count;
919+
};
920+
921+
(start_rank, end_rank);
922+
};
923+
910924
public func scan<K, V>(btree : MemoryBTree, btree_utils : BTreeUtils<K, V>, start : ?K, end : ?K) : RevIter<(K, V)> {
911925
let start_address = switch (start) {
912926
case (?key) {

src/MemoryBTree/lib.mo

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ module {
125125
/// Returns an array of all the values in the BTree
126126
public func toVals() : [V] = BaseMemoryBTree.toVals(state, btree_utils);
127127

128+
/// Returns the start and end index of the range between the given keys
129+
public func getInterval(start : ?K, end : ?K) : (Nat, Nat) = BaseMemoryBTree.getInterval(state, btree_utils, start, end);
130+
128131
/// Returns a reversible iterator over the entries in the given range
129132
public func range(i : Nat, j : Nat) : RevIter<(K, V)> = BaseMemoryBTree.range(state, btree_utils, i, j);
130133

0 commit comments

Comments
 (0)