summaryrefslogtreecommitdiffhomepage
path: root/include/ocl/tproc/rope.inl
diff options
context:
space:
mode:
Diffstat (limited to 'include/ocl/tproc/rope.inl')
-rw-r--r--include/ocl/tproc/rope.inl86
1 files changed, 86 insertions, 0 deletions
diff --git a/include/ocl/tproc/rope.inl b/include/ocl/tproc/rope.inl
new file mode 100644
index 0000000..fe4218e
--- /dev/null
+++ b/include/ocl/tproc/rope.inl
@@ -0,0 +1,86 @@
+// Copyright 2025, Amlal El Mahrouss (amlal@nekernel.org)
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// Official repository: https://github.com/ocl-org/tproc
+
+#ifndef __OCL_TPROC_ROPE_INL
+#define __OCL_TPROC_ROPE_INL
+
+namespace ocl::tproc::rope
+{
+
+ template <typename It, class Pred>
+ It find(It begin, It end, Pred pred)
+ {
+ for (auto it = begin; it != end; ++it)
+ {
+ if (*it == pred)
+ {
+ return it;
+ }
+ }
+
+ return end;
+ }
+
+ template <typename It, class Pred>
+ It find_if(It begin, It end, Pred pred)
+ {
+ for (auto it = begin; it != end; ++it)
+ {
+ if (pred(it, pred))
+ {
+ return it;
+ }
+ }
+
+ return end;
+ }
+
+ template <typename It, class Pred>
+ It::typename size_type erase(It begin, It end, Pred)
+ {
+ It original_begin = begin;
+ size_t count = 0;
+
+ for (auto it = begin; it != end; )
+ {
+ if (*it == pred)
+ {
+ it = begin.erase(it);
+ ++count;
+ }
+ else
+ {
+ ++it;
+ }
+ }
+
+ return count;
+ }
+
+ template <typename It, class Pred>
+ It::typename size_type erase_if(It begin, It end, Pred)
+ {
+ It original_begin = begin;
+ size_t count = 0;
+
+ for (auto it = begin; it != end; )
+ {
+ if (pred(it, end) != end)
+ {
+ it = begin.erase(it);
+ ++count;
+ }
+ else
+ {
+ ++it;
+ }
+ }
+
+ return count;
+ }
+
+} // namespace ocl::tproc::rope
+
+#endif \ No newline at end of file