/* Zeta API - Z/classes/Span.hpp ______ ______________ ___ |__ / | ___|___ ___|/ \ / /__| __| | | / - \ /______|_____| |__| /__/ \__\ Copyright (C) 2006-2024 Manuel Sainz de Baranda y Goñi. Released under the terms of the GNU Lesser General Public License v3. */ #ifndef Z_classes_Span_HPP #define Z_classes_Span_HPP #include #include #include namespace Zeta {template struct Span { typedef const t* const_pointer; typedef const t& const_reference; typedef PtrDiff difference_type; typedef t element_type; // typedef Iterator iterator; typedef t* pointer; typedef t& reference; // typedef Iterator reverse_iterator; typedef USize size_type; typedef typename Type::remove_const_volatile value_type; t* data; USize size; Z_CT(CPP11) Span(t *first, USize size_) Z_NOTHROW : data(first), size(size_) {} Z_CT(CPP11) Span(t *first, t *last) Z_NOTHROW : data(first), size(last - first) {} Z_CT(CPP11) t &operator [](USize index) const Z_NOTHROW {return data[index];} Z_CT(CPP11) t &first() const Z_NOTHROW {return data[0];} Z_CT(CPP11) t &last() const Z_NOTHROW {return data[size - 1];} Z_CT(CPP11) Span head(USize head_size) const Z_NOTHROW {return Span(data, head_size);} Z_CT(CPP11) Span tail(USize tail_size) const Z_NOTHROW {return Span(&data[size - tail_size], tail_size);} Z_CT(CPP11) Span range(USize range_index, USize range_size) const Z_NOTHROW {return Span(&data[range_index], range_size);} Z_CT(CPP11) Span range(const Range &range) const Z_NOTHROW {return Span(&data[range.index], range.size);} /* Z_CT(CPP11) Iterator begin() const Z_NOTHROW {return Iterator(*this, 0);} Z_CT(CPP11) Iterator end() const Z_NOTHROW {return Iterator(*this, size);}*/ };} #endif // Z_classes_Span_HPP