cppassist  1.0.0.f4fab4f962ff
C++ sanctuary for small but powerful and frequently required, stand alone features.
vector.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 
5 #include <vector>
6 
7 #include <cppassist/simd/simd.h>
9 #include <cppassist/simd/value.h>
10 
11 
12 
13 namespace cppassist
14 {
15 
16 
17 template <typename T, size_t SIMD_SIZE = CPPASSIST_SIMD_SIZE>
18 class CPPASSIST_TEMPLATE_API vector
19 {
20  static const auto simd_size = SIMD_SIZE;
21 
22 public:
23  using primitive_type = T;
26  using iterator = typename std::vector<value_type, allocator>::iterator;
27  using const_iterator = typename std::vector<value_type, allocator>::const_iterator;
28  using size_type = typename std::vector<value_type, allocator>::size_type;
29  using reference = typename std::vector<value_type, allocator>::reference;
30  using const_reference = typename std::vector<value_type, allocator>::const_reference;
31 
32 public:
33  vector();
34  vector(size_t count);
35  vector(T * data, size_t count);
36  vector(const vector & data);
37  vector(vector && data);
38 
39  T * data();
40  const T * data() const;
41 
42  size_t size() const;
43  void resize(size_t size);
44 
45  bool empty();
46  void clear();
47 
48  size_t chunkSize() const;
49 
50  value<T, SIMD_SIZE> & chunk(size_t i);
51  const value<T, SIMD_SIZE> & chunk(size_t i) const;
52 
53  /*
54  T & at(size_t i);
55  const T & at(size_t i) const;
56 
57  T & operator[](size_t i);
58  const T & operator[](size_t i) const;
59 
60  T & front();
61  const T & front() const;
62  T & back();
63  const T & back() const;
64  */
65 
66  iterator begin();
67  const_iterator begin() const;
68  iterator end();
69  const_iterator end() const;
70 
71  T * valueBegin();
72  const T * valueBegin() const;
73  T * valueEnd();
74  const T * valueEnd() const;
75 protected:
76  size_t m_size;
77  std::vector<value<T, simd_size>, allocator> m_data;
78 };
79 
80 
81 // Iterators
82 
83 template <typename Callback, typename Vector, typename... Vectors>
84 inline void traverse(Callback callback, Vector && vector, Vectors && ... vectors);
85 
86 template <typename Callback, typename Vector, typename... Vectors>
87 inline void traverse_mt(Callback callback, Vector && vector, Vectors && ... vectors);
88 
89 
90 } // namespace cppassist
91 
92 
Definition: ArgumentParser.h:12
Definition: allocator.h:23
typename std::vector< value_type, allocator >::const_iterator const_iterator
Definition: vector.h:27
void traverse_mt(Callback callback, Vector &&vector, Vectors &&... vectors)
Definition: vector.inl:218
Definition: value.h:14
typename std::vector< value_type, allocator >::iterator iterator
Definition: vector.h:26
void traverse(Callback callback, Vector &&vector, Vectors &&... vectors)
Definition: vector.inl:209
std::vector< value< T, simd_size >, allocator > m_data
Definition: vector.h:77
Definition: vector.h:18
typename std::vector< value_type, allocator >::size_type size_type
Definition: vector.h:28
typename std::vector< value_type, allocator >::const_reference const_reference
Definition: vector.h:30
T primitive_type
Definition: vector.h:23
size_t m_size
Definition: vector.h:76
typename std::vector< value_type, allocator >::reference reference
Definition: vector.h:29