Euphoria
subvec.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 
5 namespace eu::core
6 {
7  // todo(Gustav) replace with range
8  template<typename T>
9  struct SubVec
10  {
11  using Iterator = typename std::vector<T>::iterator;
12 
13  std::vector<T>* source;
14  std::size_t ibegin;
15  std::size_t iend;
16 
17  explicit SubVec(std::vector<T>* s)
18  : source(s)
19  , ibegin(0)
20  , iend(s->size())
21  {
22  }
23 
24  SubVec(std::vector<T>* s, std::size_t b, std::size_t e)
25  : source(s)
26  , ibegin(b)
27  , iend(e)
28  {
29  }
30 
31  SubVec<T>
32  sub(std::size_t start, std::size_t end)
33  {
34  return {source, ibegin+start, ibegin+end};
35  }
36 
37  Iterator
38  begin() const
39  {
40  return source->begin() + ibegin;
41  }
42 
43  Iterator
44  end() const
45  {
46  return source->begin() + iend;
47  }
48 
49  [[nodiscard]] std::size_t
50  size() const
51  {
52  return iend - ibegin;
53  }
54 
55  [[nodiscard]] bool
56  empty() const
57  {
58  return ibegin >= iend;
59  }
60 
61  T&
62  operator[](int index)
63  {
64  return (*source)[ibegin+index];
65  }
66 
67  const T&
68  operator[](int index) const
69  {
70  return (*source)[ibegin+index];
71  }
72  };
73 }
T & operator[](int index)
Definition: subvec.h:62
bool empty() const
Definition: subvec.h:56
std::size_t ibegin
Definition: subvec.h:14
typename std::vector< T >::iterator Iterator
Definition: subvec.h:11
std::size_t size() const
Definition: subvec.h:50
const T & operator[](int index) const
Definition: subvec.h:68
std::size_t iend
Definition: subvec.h:15
SubVec(std::vector< T > *s, std::size_t b, std::size_t e)
Definition: subvec.h:24
Iterator begin() const
Definition: subvec.h:38
std::vector< T > * source
Definition: subvec.h:13
SubVec(std::vector< T > *s)
Definition: subvec.h:17
SubVec< T > sub(std::size_t start, std::size_t end)
Definition: subvec.h:32
Iterator end() const
Definition: subvec.h:44