#pragma once #include template class ArrayViewIterator; template class ArrayView { public: ArrayView(const T *items, size_t count); ArrayView(const ArrayView &other); size_t Count() const; const T &operator[](size_t index) const; ArrayViewIterator begin() const; ArrayViewIterator end() const; private: const T *m_items; size_t m_count; }; #include "CoreDefs.h" #include "PLArrayViewIterator.h" #if GP_DEBUG_CONFIG #include #endif template inline ArrayView::ArrayView(const T *items, size_t count) : m_items(items) , m_count(count) { } template inline ArrayView::ArrayView(const ArrayView &other) : m_items(other.m_items) , m_count(other.m_count) { } template inline size_t ArrayView::Count() const { return m_count; } template inline const T &ArrayView::operator[](size_t index) const { #if GP_DEBUG_CONFIG assert(index < m_count); #endif return m_items[index]; } template inline ArrayViewIterator ArrayView::begin() const { #if GP_DEBUG_CONFIG return ArrayViewIterator(this->m_items, this->m_count, 0); #else return ArrayViewIterator(this->m_items); #endif } template inline ArrayViewIterator ArrayView::end() const { #if GP_DEBUG_CONFIG return ArrayViewIterator(m_items, m_count, m_count); #else return ArrayViewIterator(m_items + m_count); #endif }