1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 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 <typename T>
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