diff options
Diffstat (limited to 'include/ocl/tproc/rope.inl')
| -rw-r--r-- | include/ocl/tproc/rope.inl | 86 |
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 |
