diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/rustic.hpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/include/rustic.hpp b/src/include/rustic.hpp index 15588565..3b4a0386 100644 --- a/src/include/rustic.hpp +++ b/src/include/rustic.hpp @@ -8,10 +8,22 @@ class slice T* m_first; unsigned int m_len; public: + slice(): + m_first(nullptr), + m_len(0) + {} + slice(const ::std::vector<T>& v): + m_first(&v[0]), + m_len(v.size()) + {} slice(::std::vector<T>& v): m_first(&v[0]), m_len(v.size()) {} + slice(T* ptr, unsigned int len): + m_first(ptr), + m_len(len) + {} ::std::vector<T> to_vec() const { return ::std::vector<T>(begin(), end()); @@ -24,9 +36,18 @@ public: assert(i < m_len); return m_first[i]; } + slice<T> subslice(unsigned int ofs, unsigned int len) const { + assert(ofs < m_len); + assert(len <= m_len); + assert(ofs + len <= m_len); + return slice { m_first + ofs, len }; + } T* begin() const { return m_first; } T* end() const { return m_first + m_len; } + + T& front() const { return m_first[0]; } + T& back() const { return m_first[m_len-1]; } }; template<typename T> |
