diff options
author | Jacques Lucke <mail@jlucke.com> | 2020-02-07 19:23:25 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2020-02-07 19:23:25 +0300 |
commit | c2e80cfaa302e666421a8adee8d2b25a69d0700e (patch) | |
tree | 04340524c5a7de26e84b44f9e2cda75bdebc8fce /source/blender | |
parent | f3db5a0965902db622ea291850a1b815eda9d288 (diff) |
BLI: add index_range method to some data structures
This can be used to iterate over all indices with less code.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenlib/BLI_allocator.h | 1 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_array_cxx.h | 6 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_array_ref.h | 10 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_vector.h | 6 |
4 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_allocator.h b/source/blender/blenlib/BLI_allocator.h index 52fa8d2b705..82cf76e425c 100644 --- a/source/blender/blenlib/BLI_allocator.h +++ b/source/blender/blenlib/BLI_allocator.h @@ -30,6 +30,7 @@ */ #include <stdlib.h> +#include <algorithm> #include "MEM_guardedalloc.h" diff --git a/source/blender/blenlib/BLI_array_cxx.h b/source/blender/blenlib/BLI_array_cxx.h index c7704e20fb1..e987121d68c 100644 --- a/source/blender/blenlib/BLI_array_cxx.h +++ b/source/blender/blenlib/BLI_array_cxx.h @@ -27,6 +27,7 @@ #include "BLI_allocator.h" #include "BLI_array_ref.h" #include "BLI_memory_utils_cxx.h" +#include "BLI_index_range.h" namespace BLI { @@ -182,6 +183,11 @@ template<typename T, typename Allocator = GuardedAllocator> class Array { return m_data + m_size; } + IndexRange index_range() const + { + return IndexRange(m_size); + } + private: T *allocate(uint size) { diff --git a/source/blender/blenlib/BLI_array_ref.h b/source/blender/blenlib/BLI_array_ref.h index e34647676d8..bef7b862bf9 100644 --- a/source/blender/blenlib/BLI_array_ref.h +++ b/source/blender/blenlib/BLI_array_ref.h @@ -246,6 +246,11 @@ template<typename T> class ArrayRef { return fallback; } + IndexRange index_range() const + { + return IndexRange(m_size); + } + /** * Get a new array ref to the same underlying memory buffer. No conversions are done. * Asserts when the sizes of the types don't match. @@ -411,6 +416,11 @@ template<typename T> class MutableArrayRef { { return ArrayRef<T>(m_start, m_size); } + + IndexRange index_range() const + { + return IndexRange(m_size); + } }; /** diff --git a/source/blender/blenlib/BLI_vector.h b/source/blender/blenlib/BLI_vector.h index 46c46a1440f..5c03a896692 100644 --- a/source/blender/blenlib/BLI_vector.h +++ b/source/blender/blenlib/BLI_vector.h @@ -37,6 +37,7 @@ #include "BLI_listbase_wrapper.h" #include "BLI_math_base.h" #include "BLI_allocator.h" +#include "BLI_index_range.h" #include "MEM_guardedalloc.h" @@ -520,6 +521,11 @@ template<typename T, uint N = 4, typename Allocator = GuardedAllocator> class Ve return (uint)(m_capacity_end - m_begin); } + IndexRange index_range() const + { + return IndexRange(this->size()); + } + void print_stats() const { std::cout << "Small Vector at " << (void *)this << ":" << std::endl; |