23 #ifndef CSL_LIBRARYTENSOR_H_INCLUDED 24 #define CSL_LIBRARYTENSOR_H_INCLUDED 26 #ifdef THIS_FILE_IS_NOT_MEANT_TO_BE_COMPILED_SO_PLEASE_IGNORE_IT_DEAR_COMPILER 30 #include "csl/default_move_cpy.h" 39 DEFINE_DEFAULT_CPY_MV(LibraryTensor)
41 using iterator =
typename std::vector<Type>::iterator;
42 using const_iterator =
typename std::vector<Type>::const_iterator;
43 using reverse_iterator
44 =
typename std::vector<Type>::reverse_iterator;
45 using const_reverse_iterator
46 =
typename std::vector<Type>::const_reverse_iterator;
48 static size_t getTotalDimension(std::vector<size_t>
const& dimensions)
51 for (
size_t d : dimensions)
56 LibraryTensor(std::vector<size_t>
const& t_dimensions)
57 :dimensions(t_dimensions),
58 data(getTotalDimension(dimensions))
63 LibraryTensor(std::vector<size_t>
const& t_dimensions,
65 :dimensions(t_dimensions),
66 data(getTotalDimension(dimensions), filler)
71 LibraryTensor(std::vector<size_t>
const& t_dimensions,
72 std::vector<Type>
const& t_data)
73 :dimensions(t_dimensions),
76 if (getTotalDimension(dimensions) != data.size()) {
77 std::cerr <<
"Bad initialization of LibraryTensor in file " 78 << __FILE__ <<
" (l. " << __LINE__ <<
"): expected " 79 << getTotalDimension(dimensions) <<
" elements, " 80 << data.size() <<
" given.\n";
85 std::vector<size_t>
const& getDimensions()
const {
88 std::vector<Type>
const& toStdVector()
const {
92 size_t getIndex(std::vector<size_t>
const& indices)
const {
93 if (dimensions.size() == 1)
96 auto iter_index = indices.begin();
97 auto iter_dim = dimensions.begin();
98 for (; iter_dim != dimensions.end(); ++iter_index, ++iter_dim) {
100 index += *iter_index;
109 size_t size()
const {
113 #ifndef CSL_LT_DISABLE_ITERATOR 120 const_iterator begin()
const {
123 const_iterator end()
const {
127 reverse_iterator rbegin() {
128 return data.rbegin();
130 reverse_iterator rend() {
133 const_reverse_iterator rbegin()
const {
134 return data.rbegin();
136 const_reverse_iterator rend()
const {
141 Type& operator[](
size_t pos) {
144 Type const& operator[](
size_t pos)
const {
148 Type& operator[](std::vector<size_t>
const& indices) {
149 return data[getIndex(indices)];
151 Type const& operator[](std::vector<size_t>
const& indices)
const {
152 return data[getIndex(indices)];
157 std::vector<size_t> dimensions;
159 std::vector<Type> data;
166 #endif // ifndef CSL_LIBRARYTENSOR_H_INCLUDED Namespace for csl library.
Definition: abreviation.h:34
Type
Enum of the different types of Abstract (i.e. list of all possible specializations).
Definition: enum.h:47