// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #ifndef SPAN_HPP #define SPAN_HPP namespace VideoStitch { /** * @brief A class to describe a span of an array */ template class Span { T* _begin; T* _end; public: Span(T* b = nullptr, T* e = nullptr) : _begin(b), _end(e) {} Span(T* b, size_t size) : _begin(b), _end(b + size) {} bool empty() const { return _begin == _end; } size_t size() const { return _end - _begin; } T* begin() { return _begin; } T* data() { return _begin; } T* end() { return _end; } const T* begin() const { return _begin; } const T* data() const { return _begin; } const T* end() const { return _end; } const T& operator[](size_t pos) const { return _begin[pos]; } T& operator[](size_t pos) { return _begin[pos]; } }; } // namespace VideoStitch #endif // SPAN_HPP