Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/rangetree/range_tree.hh')
-rw-r--r--extern/rangetree/range_tree.hh22
1 files changed, 22 insertions, 0 deletions
diff --git a/extern/rangetree/range_tree.hh b/extern/rangetree/range_tree.hh
index 919e0b04933..b247a0c6a1e 100644
--- a/extern/rangetree/range_tree.hh
+++ b/extern/rangetree/range_tree.hh
@@ -92,6 +92,28 @@ struct RangeTree {
tree.insert(Range(t + 1, cur.max));
}
+ /* clone of 'take' that checks if the item exists */
+ bool retake(T t) {
+ #if RANGE_TREE_DEBUG_PRINT_FUNCTION
+ std::cout << __func__ << "(" << t << ")\n";
+ #endif
+
+ TreeIter iter = tree.find(Range(t));
+ if (iter == tree.end()) {
+ return false;
+ }
+
+ Range cur = *iter;
+ tree.erase(iter);
+ if (t > cur.min)
+ tree.insert(Range(cur.min, t - 1));
+ if (t + 1 <= cur.max)
+ tree.insert(Range(t + 1, cur.max));
+
+ return true;
+ }
+
+
/* Take the first element out of the first range in the
tree. Precondition: tree must not be empty. */
T take_any() {