23 #ifndef DOUBLE_VECTOR_H_INCLUDED 24 #define DOUBLE_VECTOR_H_INCLUDED 31 template<
typename Type>
33 template<
typename Type,
class double_vector_type>
36 template<
typename Type,
class double_vector_type>
42 using iterator =
typename std::vector<Type>::iterator;
43 using const_iterator =
typename std::vector<Type>::const_iterator;
46 double_vector_type t_data,
56 size_t min = std::min(size(), other.size());
57 for (
size_t i = 0; i != min; ++i)
58 (*
this)[i] = other[i];
60 for (
size_t i = min; i != other.size(); ++i)
64 for (
size_t i = min; i != size(); ++i)
71 void empty()
const {
return size() == 0; }
72 size_t size()
const {
return data->getCut(pos+1) - data->getCut(pos); }
74 void push_back(Type
const &el);
76 void erase(const_iterator pos);
79 return data->vecBegin() + data->getCut(pos);
82 return data->vecBegin() + data->getCut(1+pos);
85 const_iterator begin()
const {
86 return data->vecBegin() + data->getCut(pos);
89 const_iterator end()
const{
90 return data->vecBegin() + data->getCut(1+pos);
93 Type &operator[](
size_t i);
94 Type
const &operator[](
size_t i)
const;
97 double_vector_type data;
101 template<
typename Type,
class double_vector_type>
107 double_vector_type t_data
113 double_vector_type t_data,
124 current(other.data, other.current.pos + 1)
131 current.pos = other.current.pos;
136 return data == other.data
137 and current.pos == other.current.pos;
140 return !(*
this == other);
148 *operator->() {
return ¤t; }
150 const *operator->()
const {
return ¤t; }
176 return current.pos - other.current.pos;
183 copy.current.pos += diff;
191 copy.current.pos -= diff;
195 double_vector_type data;
199 template<
typename Type>
210 double_vector(std::vector<Type>
const &init)
214 double_vector(std::initializer_list<Type> init)
218 double_vector() =
default;
219 double_vector(double_vector
const &other) =
default;
220 double_vector(double_vector &&other) =
default;
221 double_vector &operator=(double_vector
const &other) =
default;
222 double_vector &operator=(double_vector &&other) =
default;
223 ~double_vector() =
default;
228 size_t size()
const {
232 Type &getElement(
size_t i) {
return data[i]; }
233 Type
const &getElement(
size_t i)
const {
return data[i]; }
235 size_t getCut(
size_t i)
const {
236 return (i ==
size_t(-1)) ? 0 : cut[i];
239 std::vector<Type>
const &getData()
const {
return data; }
240 std::vector<size_t>
const &getCuts()
const {
return cut; }
242 void push_back(std::vector<Type>
const &row);
243 void push_back(std::vector<Type> &&row);
246 return iterator(
this);
250 return iterator(
this, cut.size());
253 const_iterator begin()
const {
254 return const_iterator(
this);
257 const_iterator end()
const {
258 return const_iterator(
this, cut.size());
262 operator[](
size_t i);
264 operator[](
size_t i)
const;
268 typename std::vector<Type>::iterator vecBegin() {
271 typename std::vector<Type>::const_iterator vecBegin()
const {
274 typename std::vector<Type>::iterator vecEnd() {
277 typename std::vector<Type>::const_iterator vecEnd()
const {
293 std::vector<Type> data;
294 std::vector<size_t> cut;
297 template<
typename Type,
class double_vector_type>
302 data->push_row(pos, el);
305 template<
typename Type,
class double_vector_type>
308 erase(const_iterator i)
310 data->eraseEl(data->getCut(pos), i-begin());
313 template<
typename Type,
class double_vector_type>
318 return data->getElement(data->getCut(pos) + i);
321 template<
typename Type,
class double_vector_type>
326 return data->getElement(data->getCut(pos) + i);
329 template<
typename Type>
333 cut.push_back(row.size());
335 cut.push_back(cut.back() + row.size());
343 template<
typename Type>
347 cut.push_back(row.size());
349 cut.push_back(cut.back() + row.size());
352 std::make_move_iterator(row.begin()),
353 std::make_move_iterator(row.end())
357 template<
typename Type>
363 data.erase(data.begin() + pos + pos_j);
364 for (
size_t i = pos+1; i < cut.size(); ++i)
368 template<
typename Type>
374 size_t insertPos = getCut(pos+1);
375 data.insert(data.begin() + insertPos, el);
376 for (
size_t i = pos+1; i < cut.size(); ++i)
380 template<
typename Type>
390 template<
typename Type>
Namespace of MARTY.
Definition: 2HDM.h:31
Expr operator+(const Expr &a, const Expr &b)
Expr operator-(const Expr &a, const Expr &b)
Definition: doubleVector.h:32
Expr operator*(const Expr &a, const Expr &b)
Definition: doubleVector.h:37
bool operator==(const Expr &a, const Expr &b)
Definition: doubleVector.h:34
bool operator!=(const Expr &a, const Expr &b)