diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-05-31 17:20:37 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-31 17:20:37 -0400 |
| commit | 6cbc3929a54d37bd23cb5efa8e3320ba02f78b2f (patch) | |
| tree | 5a23cb47782e9e2a77762c90dd35da1005eba8d0 /source/core/slang-array-view.h | |
| parent | b81ff3ef968d1cc4e954b31a1812b3c391d17b02 (diff) | |
Use slang- prefix on slang compiler and core source (#973)
* Prefixing source files in source/slang with slang-
* Prefix source in source/slang with slang- prefix.
* Rename core source files with slang- prefix.
* Update project files.
* Fix problems from automatic merge.
Diffstat (limited to 'source/core/slang-array-view.h')
| -rw-r--r-- | source/core/slang-array-view.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/source/core/slang-array-view.h b/source/core/slang-array-view.h new file mode 100644 index 000000000..8b653f4c7 --- /dev/null +++ b/source/core/slang-array-view.h @@ -0,0 +1,112 @@ +#ifndef SLANG_CORE_ARRAY_VIEW_H +#define SLANG_CORE_ARRAY_VIEW_H + +#include "slang-common.h" + +namespace Slang +{ + template<typename T> + class ArrayView + { + private: + T* m_buffer; + int m_count; + public: + const T* begin() const { return m_buffer; } + T* begin() { return m_buffer; } + + const T* end() const { return m_buffer + m_count; } + T* end() { return m_buffer + m_count; } + + public: + ArrayView(): + m_buffer(nullptr), + m_count(0) + { + } + ArrayView(T& singleObj): + m_buffer(&singleObj), + m_count(1) + { + } + ArrayView(T* buffer, int size): + m_buffer(buffer), + m_count(size) + { + } + + inline int getCount() const { return m_count; } + + inline const T& operator [](int idx) const + { + SLANG_ASSERT(idx >= 0 && idx <= m_count); + return m_buffer[idx]; + } + inline T& operator [](int idx) + { + SLANG_ASSERT(idx >= 0 && idx <= m_count); + return m_buffer[idx]; + } + + inline const T* getBuffer() const { return m_buffer; } + inline T* getBuffer() { return m_buffer; } + + template<typename T2> + int indexOf(const T2 & val) const + { + for (int i = 0; i < m_count; i++) + { + if (m_buffer[i] == val) + return i; + } + return -1; + } + + template<typename T2> + int lastIndexOf(const T2 & val) const + { + for (int i = m_count - 1; i >= 0; i--) + { + if (m_buffer[i] == val) + return i; + } + return -1; + } + + template<typename Func> + int findFirstIndex(const Func& predicate) const + { + for (int i = 0; i < m_count; i++) + { + if (predicate(m_buffer[i])) + return i; + } + return -1; + } + + template<typename Func> + int findLastIndex(const Func& predicate) const + { + for (int i = m_count - 1; i >= 0; i--) + { + if (predicate(m_buffer[i])) + return i; + } + return -1; + } + }; + + template<typename T> + ArrayView<T> makeArrayView(T& obj) + { + return ArrayView<T>(obj); + } + + template<typename T> + ArrayView<T> makeArrayView(T* buffer, int count) + { + return ArrayView<T>(buffer, count); + } +} + +#endif |
