 |
PRCYCoin
2.0.0.7rc1
P2P Digital Currency
|
Go to the documentation of this file.
5 #ifndef _BITCOIN_PREVECTOR_H_
6 #define _BITCOIN_PREVECTOR_H_
14 #include <type_traits>
35 template<
unsigned int N,
typename T,
typename Size = u
int32_t,
typename Diff =
int32_t>
164 if (new_capacity <= N) {
182 char* new_indirect =
static_cast<char*
>(malloc(((
size_t)
sizeof(T)) * new_capacity));
183 assert(new_indirect);
185 T* dst =
reinterpret_cast<T*
>(new_indirect);
209 template<
typename InputIterator>
210 void assign(InputIterator first, InputIterator last) {
216 while (first != last) {
218 new(
static_cast<void*
>(
item_ptr(
size() - 1))) T(*first);
237 template<
typename InputIterator>
241 while (first != last) {
243 new(
static_cast<void*
>(
item_ptr(
size() - 1))) T(*first);
251 while (it != other.
end()) {
263 if (&other ==
this) {
269 while (it != other.
end()) {
317 if (
size() > new_size) {
323 while (
size() < new_size) {
351 new(
static_cast<void*
>(
item_ptr(p))) T(value);
364 new(
static_cast<void*
>(
item_ptr(p + i))) T(value);
368 template<
typename InputIterator>
378 while (first != last) {
379 new(
static_cast<void*
>(
item_ptr(p))) T(*first);
386 return erase(pos, pos + 1);
397 char* endp = (
char*)&(*
end());
398 if (!std::is_trivially_destructible<T>::value) {
407 memmove(&(*first), &(*last), endp - ((
char*)(&(*last))));
446 if (!std::is_trivially_destructible<T>::value) {
463 if ((*b1) != (*b2)) {
473 return !(*
this == other);
iterator insert(iterator pos, const T &value)
std::random_access_iterator_tag iterator_category
void insert(iterator pos, size_type count, const T &value)
bool operator>(const_iterator x) const
difference_type friend operator-(iterator a, iterator b)
const typedef value_type * const_pointer
const T & operator[](size_type pos) const
iterator & operator-=(size_type n)
reverse_iterator operator++(int)
T * indirect_ptr(difference_type pos)
bool operator==(iterator x) const
iterator & operator+=(size_type n)
const_iterator & operator++()
iterator erase(iterator pos)
prevector(prevector< N, T, Size, Diff > &&other)
const T * operator->() const
const_iterator & operator+=(size_type n)
reverse_iterator & operator++()
reverse_iterator(T *ptr_)
const T & operator[](size_type pos) const
bool operator!=(const_iterator x) const
std::bidirectional_iterator_tag iterator_category
const T & operator*() const
bool operator<(const_iterator x) const
bool operator<=(iterator x) const
void change_capacity(size_type new_capacity)
bool operator==(reverse_iterator x) const
bool operator!=(const_reverse_iterator x) const
bool operator>=(const_iterator x) const
void * memcpy(void *a, const void *b, size_t c)
void * memmove(void *a, const void *b, size_t c)
const T * indirect_ptr(difference_type pos) const
const T * direct_ptr(difference_type pos) const
iterator operator+(size_type n)
T & operator[](size_type pos)
prevector(const prevector< N, T, Size, Diff > &other)
std::bidirectional_iterator_tag iterator_category
iterator operator-(size_type n)
const T * item_ptr(difference_type pos) const
const typedef T * pointer
bool operator!=(reverse_iterator x) const
void push_back(const T &value)
const_iterator & operator-=(size_type n)
prevector(size_type n, const T &val=T())
const_iterator & operator--()
bool operator!=(const prevector< N, T, Size, Diff > &other) const
std::random_access_iterator_tag iterator_category
const_iterator end() const
const_reverse_iterator rend() const
const typedef value_type & const_reference
const T * operator->() const
iterator erase(iterator first, iterator last)
reverse_iterator operator--(int)
difference_type friend operator-(const_iterator a, const_iterator b)
const T & operator*() const
reverse_iterator rbegin()
const_iterator operator--(int)
T & operator[](size_type pos)
void swap(prevector< N, T, Size, Diff > &other)
reverse_iterator & operator--()
const_reverse_iterator rbegin() const
const_iterator operator+(size_type n)
prevector & operator=(const prevector< N, T, Size, Diff > &other)
const typedef T value_type
const_reverse_iterator & operator--()
union prevector::direct_or_indirect _union
void insert(iterator pos, InputIterator first, InputIterator last)
char direct[sizeof(T) *N]
bool operator>=(iterator x) const
bool operator==(const_reverse_iterator x) const
const value_type * data() const
void assign(InputIterator first, InputIterator last)
const T * operator->() const
const typedef T value_type
void reserve(size_type new_capacity)
void resize(size_type new_size)
Implements a drop-in replacement for std::vector<T> which stores up to N elements directly (without h...
void assign(size_type n, const T &val)
const_reverse_iterator operator--(int)
const T & operator[](size_type pos) const
T * item_ptr(difference_type pos)
const_reverse_iterator(T *ptr_)
const T & operator*() const
bool operator!=(iterator x) const
size_t allocated_memory() const
bool operator>(iterator x) const
const typedef T & reference
const_reverse_iterator(reverse_iterator x)
bool operator==(const prevector< N, T, Size, Diff > &other) const
const_reverse_iterator operator++(int)
const typedef T & reference
prevector(InputIterator first, InputIterator last)
const_reverse_iterator & operator++()
bool operator==(const_iterator x) const
bool operator<(const prevector< N, T, Size, Diff > &other) const
const_iterator(const T *ptr_)
const_iterator operator-(size_type n)
const_iterator operator++(int)
const_iterator(iterator x)
prevector & operator=(prevector< N, T, Size, Diff > &&other)
bool operator<=(const_iterator x) const
bool operator<(iterator x) const
const_iterator begin() const
const typedef T * pointer
T * direct_ptr(difference_type pos)