1#ifndef RAIIGRAPH_VECTOR_HPP
2#define RAIIGRAPH_VECTOR_HPP
8#include <initializer_list>
31 void setup(igraph_int_t
size) {
111 template<typename InputIterator, typename = decltype(*std::declval<InputIterator>())>
112 Vector(InputIterator first, InputIterator last) :
Vector(last - first) {
113 std::copy(first, last,
begin());
122 check_code(Ns_::copy(&my_vector, &(other.my_vector)));
130 if (
this != &other) {
132 check_code(Ns_::update(&my_vector, &(other.my_vector)));
143 std::swap(my_vector, other.my_vector);
151 if (
this != &other) {
152 std::swap(my_vector, other.my_vector);
161 Ns_::destroy(&my_vector);
169 return Ns_::empty(&my_vector);
176 return Ns_::size(&my_vector);
188 return my_vector.stor_end - my_vector.stor_begin;
195 Ns_::clear(&my_vector);
204 auto old_size = this->
size();
206 if (old_size <
size) {
207 std::fill_n(
begin() + old_size,
size - old_size, val);
223 Ns_::shrink_to_fit(&my_vector);
238 template<
typename ... Args>
248 Ns_::pop_back(&my_vector);
256 Ns_::remove(&my_vector, pos -
begin());
266 auto start =
begin();
267 Ns_::remove_section(&my_vector, first - start, last - start);
278 auto delta = pos -
begin();
279 check_code(Ns_::insert(&my_vector, delta, val));
280 return begin() + delta;
289 template<
typename ... Args>
303 auto delta = pos -
begin();
304 auto old_size =
size();
307 auto new_start =
begin() + delta;
308 std::copy(new_start,
begin() + old_size, new_start + n);
309 std::fill_n(new_start, n, val);
321 template<typename InputIterator, typename = decltype(*std::declval<InputIterator>())>
323 auto delta = pos -
begin();
324 auto old_size =
size();
325 auto n = last - first;
328 auto new_start =
begin() + delta;
329 std::copy(new_start,
begin() + old_size, new_start + n);
330 std::copy(first, last, new_start);
340 return *(
begin() + i);
348 return *(
begin() + i);
384 return my_vector.stor_begin;
391 return my_vector.end;
412 return my_vector.stor_begin;
419 return my_vector.end;
426 return my_vector.stor_begin;
433 return my_vector.stor_begin;
440 return std::reverse_iterator(
end());
447 return std::reverse_iterator(
begin());
454 return std::reverse_iterator(
end());
461 return std::reverse_iterator(
begin());
468 return std::reverse_iterator(
cend());
475 return std::reverse_iterator(
cbegin());
519 std::swap(my_vector, other.my_vector);
532 typedef igraph_int_t value_type;
533 typedef igraph_vector_int_t igraph_type;
535#define RAIIGRAPH_VECTOR_SUFFIX _int
536#include "fragments/vector.hpp"
537#undef RAIIGRAPH_VECTOR_SUFFIX
541 typedef igraph_real_t value_type;
542 typedef igraph_vector_t igraph_type;
544#define RAIIGRAPH_VECTOR_SUFFIX
545#include "fragments/vector.hpp"
546#undef RAIIGRAPH_VECTOR_SUFFIX
550 typedef igraph_bool_t value_type;
551 typedef igraph_vector_bool_t igraph_type;
553#define RAIIGRAPH_VECTOR_SUFFIX _bool
554#include "fragments/vector.hpp"
555#undef RAIIGRAPH_VECTOR_SUFFIX
Wrapper around igraph_vector_*_t objects with RAII behavior.
Definition Vector.hpp:29
iterator erase(iterator pos)
Definition Vector.hpp:255
value_type & reference
Definition Vector.hpp:49
iterator insert(iterator pos, value_type val)
Definition Vector.hpp:277
const value_type * data() const
Definition Vector.hpp:432
Vector & operator=(Vector< Ns_ > &&other)
Definition Vector.hpp:150
value_type * data()
Definition Vector.hpp:425
iterator erase(iterator first, iterator last)
Definition Vector.hpp:265
iterator emplace(iterator pos, Args &&... args)
Definition Vector.hpp:290
iterator begin()
Definition Vector.hpp:383
reverse_const_iterator rend() const
Definition Vector.hpp:460
const value_type & const_reference
Definition Vector.hpp:54
void reserve(size_type capacity)
Definition Vector.hpp:215
std::reverse_iterator< const_iterator > reverse_const_iterator
Definition Vector.hpp:84
Vector< Ns_ > & operator=(const Vector< Ns_ > &other)
Definition Vector.hpp:129
Vector(Vector< Ns_ > &&other)
Definition Vector.hpp:141
reverse_iterator rend()
Definition Vector.hpp:446
const igraph_type * get() const
Definition Vector.hpp:507
igraph_type * get()
Definition Vector.hpp:499
Vector(const Vector< Ns_ > &other)
Definition Vector.hpp:121
reverse_iterator rbegin()
Definition Vector.hpp:439
const_reference back() const
Definition Vector.hpp:361
value_type * iterator
Definition Vector.hpp:69
igraph_bool_t empty() const
Definition Vector.hpp:168
reverse_const_iterator rbegin() const
Definition Vector.hpp:453
const_reference front() const
Definition Vector.hpp:375
reverse_const_iterator crend() const
Definition Vector.hpp:474
void clear()
Definition Vector.hpp:194
~Vector()
Definition Vector.hpp:160
std::reverse_iterator< iterator > reverse_iterator
Definition Vector.hpp:79
Vector()
Definition Vector.hpp:90
const value_type * const_iterator
Definition Vector.hpp:74
const_iterator begin() const
Definition Vector.hpp:397
iterator insert(iterator pos, size_type n, value_type val)
Definition Vector.hpp:302
void emplace_back(Args &&... args)
Definition Vector.hpp:239
iterator insert(iterator pos, InputIterator first, InputIterator last)
Definition Vector.hpp:322
void resize(size_type size, value_type val=value_type())
Definition Vector.hpp:203
const_iterator cbegin() const
Definition Vector.hpp:411
Vector(size_type size, const value_type &val=value_type())
Definition Vector.hpp:96
size_type capacity() const
Definition Vector.hpp:187
void swap(Vector< Ns_ > &other)
Definition Vector.hpp:516
void pop_back()
Definition Vector.hpp:247
reference back()
Definition Vector.hpp:354
reference front()
Definition Vector.hpp:368
iterator end()
Definition Vector.hpp:390
const_reference operator[](igraph_int_t i) const
Definition Vector.hpp:347
reverse_const_iterator crbegin() const
Definition Vector.hpp:467
igraph_int_t difference_type
Definition Vector.hpp:64
size_type size() const
Definition Vector.hpp:175
void push_back(value_type val)
Definition Vector.hpp:230
Vector(igraph_type &&vector)
Definition Vector.hpp:104
reference operator[](igraph_int_t i)
Definition Vector.hpp:339
void shrink_to_fit()
Definition Vector.hpp:222
Vector(InputIterator first, InputIterator last)
Definition Vector.hpp:112
Ns_::igraph_type igraph_type
Definition Vector.hpp:39
const_iterator cend() const
Definition Vector.hpp:418
constexpr size_type max_size() const
Definition Vector.hpp:182
Ns_::value_type value_type
Definition Vector.hpp:44
const_iterator end() const
Definition Vector.hpp:404
igraph_int_t size_type
Definition Vector.hpp:59
Error handling for raiigraph.
Utilities for manipulating igraph data structures in C++.
Definition error.hpp:11
Vector< internal::Integer > IntVector
Definition Vector.hpp:566
Vector< internal::Real > RealVector
Definition Vector.hpp:580
void check_code(igraph_error_t code)
Definition error.hpp:39
Vector< internal::Bool > BoolVector
Definition Vector.hpp:585