From 6cbc3929a54d37bd23cb5efa8e3320ba02f78b2f Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Fri, 31 May 2019 17:20:37 -0400 Subject: 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. --- source/core/slang-array-view.h | 112 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 source/core/slang-array-view.h (limited to 'source/core/slang-array-view.h') 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 + 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 + int indexOf(const T2 & val) const + { + for (int i = 0; i < m_count; i++) + { + if (m_buffer[i] == val) + return i; + } + return -1; + } + + template + 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 + int findFirstIndex(const Func& predicate) const + { + for (int i = 0; i < m_count; i++) + { + if (predicate(m_buffer[i])) + return i; + } + return -1; + } + + template + 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 + ArrayView makeArrayView(T& obj) + { + return ArrayView(obj); + } + + template + ArrayView makeArrayView(T* buffer, int count) + { + return ArrayView(buffer, count); + } +} + +#endif -- cgit v1.2.3