Documentation of
MARTY
A
M
odern
AR
tificial
T
heoretical ph
Y
sicist
include
std_vector_implementation.h
Go to the documentation of this file.
1
// This file is part of MARTY.
2
//
3
// MARTY is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation, either version 3 of the License, or
6
// (at your option) any later version.
7
//
8
// MARTY is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
// GNU General Public License for more details.
12
//
13
// You should have received a copy of the GNU General Public License
14
// along with MARTY. If not, see <https://www.gnu.org/licenses/>.
15
23
#ifndef IMPLEMENTS_STD_VECTOR
24
#define IMPLEMENTS_STD_VECTOR_NO_OP_NO_PB(object, variable) \
25
public: \
26
\
27
using iterator = typename std::vector<object>::iterator;\
28
using const_iterator = typename std::vector<object>::const_iterator;\
29
using reverse_iterator \
30
= typename std::vector<object>::reverse_iterator;\
31
using const_reverse_iterator \
32
= typename std::vector<object>::const_reverse_iterator;\
33
\
34
\
35
size_t size() const { \
36
return variable.size(); \
37
} \
38
\
39
bool empty() const { \
40
return begin() == end(); \
41
} \
42
\
43
object const &back() const {\
44
return *(end() - 1);\
45
}\
46
object &back() {\
47
return *(end() - 1);\
48
}\
49
\
50
typename std::vector<object>::const_iterator begin() const { \
51
return variable.begin(); \
52
} \
53
\
54
typename std::vector<object>::const_iterator end() const { \
55
return variable.end(); \
56
} \
57
\
58
typename std::vector<object>::iterator begin() { \
59
return variable.begin(); \
60
} \
61
\
62
typename std::vector<object>::iterator end() { \
63
return variable.end(); \
64
} \
65
\
66
typename std::vector<object>::const_reverse_iterator rbegin() const { \
67
return variable.rbegin(); \
68
} \
69
\
70
typename std::vector<object>::const_reverse_iterator rend() const { \
71
return variable.rend(); \
72
} \
73
\
74
typename std::vector<object>::reverse_iterator rbegin() { \
75
return variable.rbegin(); \
76
} \
77
\
78
typename std::vector<object>::reverse_iterator rend() { \
79
return variable.rend(); \
80
} \
81
void clear() {\
82
variable.clear();\
83
}\
84
typename std::vector<object>::iterator erase(\
85
typename std::vector<object>::iterator iter) {\
86
return variable.erase(iter);\
87
}\
88
typename std::vector<object>::const_iterator erase(\
89
typename std::vector<object>::const_iterator iter) {\
90
return variable.erase(iter);\
91
}\
92
typename std::vector<object>::iterator erase(\
93
typename std::vector<object>::iterator first,\
94
typename std::vector<object>::iterator last) {\
95
return variable.erase(first, last);\
96
}\
97
typename std::vector<object>::const_iterator erase(\
98
typename std::vector<object>::const_iterator first,\
99
typename std::vector<object>::const_iterator last) {\
100
return variable.erase(first, last);\
101
}\
102
typename std::vector<object>::const_iterator insert(\
103
typename std::vector<object>::const_iterator pos,\
104
const object& value) {\
105
return variable.insert(pos, value);\
106
}\
107
typename std::vector<object>::const_iterator insert(\
108
typename std::vector<object>::const_iterator pos,\
109
object&& value) {\
110
return variable.insert(pos, value);\
111
}\
112
void insert(typename std::vector<object>::iterator pos, \
113
size_t count,\
114
const object& value) {\
115
variable.insert(pos, count, value);\
116
}\
117
typename std::vector<object>::iterator insert(\
118
typename std::vector<object>::const_iterator pos, \
119
size_t count,\
120
const object& value) {\
121
return variable.insert(pos, count, value);\
122
}\
123
template<class InputIt>\
124
void insert(typename std::vector<object>::iterator pos,\
125
InputIt first,\
126
InputIt last) {\
127
variable.insert(pos, first, last);\
128
}\
129
template<class InputIt>\
130
typename std::vector<object>::iterator insert(\
131
typename std::vector<object>::const_iterator pos,\
132
InputIt first,\
133
InputIt last) {\
134
return variable.insert(pos, first, last);\
135
}\
136
typename std::vector<object>::iterator insert(\
137
typename std::vector<object>::const_iterator pos,\
138
std::initializer_list<object> ilist) {\
139
return variable.insert(pos, ilist);\
140
}\
141
142
#define IMPLEMENTS_STD_VECTOR_NO_OP(object, variable)\
143
IMPLEMENTS_STD_VECTOR_NO_OP_NO_PB(object, variable)\
144
void push_back(const object& newElement) { \
145
variable.push_back(newElement); \
146
} \
147
\
148
void push_back(object&& newElement) { \
149
variable.push_back(newElement); \
150
} \
151
152
#define IMPLEMENTS_STD_VECTOR_NO_PB(object, variable) \
153
IMPLEMENTS_STD_VECTOR_NO_OP_NO_PB(object, variable)\
154
\
155
object operator[](size_t i) const { \
156
return variable[i]; \
157
} \
158
\
159
object& operator[](size_t i) { \
160
return variable[i]; \
161
} \
162
163
#define IMPLEMENTS_STD_VECTOR(object, variable) \
164
IMPLEMENTS_STD_VECTOR_NO_OP(object, variable)\
165
\
166
object operator[](size_t i) const { \
167
return variable[i]; \
168
} \
169
\
170
object& operator[](size_t i) { \
171
return variable[i]; \
172
} \
173
174
#endif
Generated by
1.8.13