#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 "PLArrayViewIterator.h" 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 const T &ArrayView::operator[](size_t index) const { return m_items[index]; } template inline ArrayViewIterator ArrayView::begin() const { return ArrayViewIterator(m_items); } template inline ArrayViewIterator ArrayView::end() const { return ArrayViewIterator(m_items + m_count); }