barry: Your go-to motif accountant  0.0-1
Full enumeration of sample space and fast count of sufficient statistics for binary arrays
barrayvector-meat.hpp
Go to the documentation of this file.
1 #ifndef BARRY_BARRAYVECTOR_MEAT_HPP
2 #define BARRY_BARRAYVECTOR_MEAT_HPP 1
3 
4 template<typename Cell_Type,typename Data_Type>
6 
7  if (vec_initialized)
8  return;
9 
10  if (dim == 0u)
11  {
12 
13  for (const auto& a : Array->el_ij[i])
14  vec.push_back(a);
15 
16  } else {
17 
18  for (const auto& a : Array->el_ji[i])
19  vec.emplace_back(std::make_pair<size_t, Cell<Cell_Type>>(a.first, *(a.second)));
20 
21  }
22 
23  vec_initialized = true;
24 
25  return;
26 }
27 
28 template<typename Cell_Type,typename Data_Type>
30  return dim == 0;
31 }
32 
33 template<typename Cell_Type, typename Data_Type>
35  return dim == 1;
36 }
37 
38 template<typename Cell_Type, typename Data_Type>
40 
41  if (dim == 0u)
42  return Array->el_ij[i].size();
43  else
44  return Array->el_ji[i].size();
45 
46 
47 }
48 
49 template<typename Cell_Type, typename Data_Type>
50 inline std::vector< Cell_Type >::const_iterator BArrayVector<Cell_Type,Data_Type>::begin() noexcept {
51 
52  // For this, we will need the iterator
53  init_vec();
54 
55  if (dim = 0u)
56  {
57 
58  } else {
59 
60  }
61 }
62 
63 template<typename Cell_Type, typename Data_Type>
64 inline std::vector< Cell_Type >::const_iterator BArrayVector<Cell_Type,Data_Type>::end() noexcept {
65 
66 }
67 
68 template<typename Cell_Type,typename Data_Type>
69 inline void BArrayVector<Cell_Type,Data_Type>::operator=(const Cell_Type & val) {
70 
71  size_t k = 0u;
72  size_t N_ = (dim == 0u) ? Array->nrow() : Array->ncol();
73 
74  if (dim == 0u)
75  {
76 
77  for (auto j = 0u; j < N_; ++j)
78  Array(i, j) = val;
79 
80  } else {
81 
82  for (auto j = 0u; j < N_; ++j)
83  Array(j, i) = val;
84 
85  }
86 
87 
88 }
89 
90 template<typename Cell_Type,typename Data_Type>
91 inline void BArrayVector<Cell_Type,Data_Type>::operator+=(const Cell_Type & val) {
92 
93  size_t k = 0u;
94  size_t N_ = (dim == 0u) ? Array->nrow() : Array->ncol();
95 
96  if (dim == 0u)
97  {
98 
99  for (auto j = 0u; j < N_; ++j)
100  Array(i, j) += val;
101 
102  } else {
103 
104  for (auto j = 0u; j < N_; ++j)
105  Array(j, i) += val;
106 
107  }
108 
109 }
110 
111 template<typename Cell_Type,typename Data_Type>
112 inline void BArrayVector<Cell_Type,Data_Type>::operator-=(const Cell_Type & val) {
113 
114  size_t k = 0u;
115  size_t N_ = (dim == 0u) ? Array->nrow() : Array->ncol();
116 
117  if (dim == 0u)
118  {
119 
120  for (auto j = 0u; j < N_; ++j)
121  Array(i, j) -= val;
122 
123  } else {
124 
125  for (auto j = 0u; j < N_; ++j)
126  Array(j, i) -= val;
127 
128  }
129 
130 }
131 
132 template<typename Cell_Type,typename Data_Type>
133 inline void BArrayVector<Cell_Type,Data_Type>::operator*=(const Cell_Type & val) {
134 
135  size_t k = 0u;
136  size_t N_ = (dim == 0u) ? Array->nrow() : Array->ncol();
137 
138  if (dim == 0u)
139  {
140 
141  for (auto j = 0u; j < N_; ++j)
142  Array(i, j) *= val;
143 
144  } else {
145 
146  for (auto j = 0u; j < N_; ++j)
147  Array(j, i) *= val;
148 
149  }
150 
151 }
152 
153 template<typename Cell_Type,typename Data_Type>
154 inline void BArrayVector<Cell_Type,Data_Type>::operator/=(const Cell_Type & val) {
155 
156  size_t k = 0u;
157  size_t N_ = (dim == 0u) ? Array->nrow() : Array->ncol();
158 
159  if (dim == 0u)
160  {
161 
162  for (auto j = 0u; j < N_; ++j)
163  Array(i, j) /= val;
164 
165  } else {
166 
167  for (auto j = 0u; j < N_; ++j)
168  Array(j, i) /= val;
169 
170  }
171 
172 }
173 
174 template<typename Cell_Type,typename Data_Type>
175 inline BArrayVector<Cell_Type,Data_Type>::operator std::vector< Cell_Type >() const {
176 
177  if (dim == 0u)
178  return Array->get_row_vec(i, false);
179  else
180  return Array->get_col_vec(i, false);
181 
182 }
183 
184 template<typename Cell_Type,typename Data_Type>
185 inline bool BArrayVector<Cell_Type,Data_Type>::operator==(const Cell_Type & val) const {
186 
187  if (dim == 0u)
188  {
189  for (size_t j = 0u; j < Array->ncol(); ++j)
190  {
191  if (Array(i, j) != val)
192  return false;
193 
194  }
195 
196  } else {
197 
198  for (size_t j = 0u; j < Array->nrow(); ++j)
199  {
200  if (Array(j, i) != val)
201  return false;
202 
203  }
204 
205  }
206 
207  return true;
208 
209 }
210 
211 template<typename Cell_Type,typename Data_Type>
212 inline BArrayVector_const<Cell_Type,Data_Type>::operator std::vector< Cell_Type >() const {
213 
214  if (dim == 0u)
215  return Array->get_row_vec(i, false);
216  else
217  return Array->get_col_vec(i, false);
218 
219 }
220 
221 template<typename Cell_Type,typename Data_Type>
222 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator==(const Cell_Type & val) const {
223 
224  if (dim == 0u)
225  {
226  for (size_t j = 0u; j < Array->ncol(); ++j)
227  {
228  if (Array(i, j) != val)
229  return false;
230 
231  }
232 
233  } else {
234 
235  for (size_t j = 0u; j < Array->nrow(); ++j)
236  {
237  if (Array(j, i) != val)
238  return false;
239 
240  }
241 
242  }
243 
244  return true;
245 
246 }
247 
248 template<typename Cell_Type,typename Data_Type>
249 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator!=(const Cell_Type & val) const {
250  return !(this->operator==(val));
251 }
252 
253 template<typename Cell_Type,typename Data_Type>
254 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator<(const Cell_Type & val) const {
255 
256  if (dim == 0u)
257  {
258  for (size_t j = 0u; j < Array->ncol(); ++j)
259  {
260  if (Array(i, j) >= val)
261  return false;
262 
263  }
264 
265  } else {
266 
267  for (size_t j = 0u; j < Array->nrow(); ++j)
268  {
269  if (Array(j, i) >= val)
270  return false;
271 
272  }
273 
274  }
275 
276  return true;
277 
278 }
279 
280 template<typename Cell_Type,typename Data_Type>
281 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator<=(const Cell_Type & val) const {
282 
283  if (dim == 0u)
284  {
285  for (size_t j = 0u; j < Array->ncol(); ++j)
286  {
287  if (Array(i, j) > val)
288  return false;
289 
290  }
291 
292  } else {
293 
294  for (size_t j = 0u; j < Array->nrow(); ++j)
295  {
296  if (Array(j, i) > val)
297  return false;
298 
299  }
300 
301  }
302 
303  return true;
304 
305 }
306 
307 template<typename Cell_Type,typename Data_Type>
308 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator>(const Cell_Type & val) const {
309  return !(this->operator<=(val));
310 }
311 
312 
313 
314 template<typename Cell_Type,typename Data_Type>
315 inline bool BArrayVector_const<Cell_Type,Data_Type>::operator>=(const Cell_Type & val) const {
316  return !(this->operator<(val));
317 }
318 
319 #endif
bool operator>=(const Cell_Type &val) const
bool operator==(const Cell_Type &val) const
bool operator<(const Cell_Type &val) const
bool operator!=(const Cell_Type &val) const
bool operator>(const Cell_Type &val) const
bool operator<=(const Cell_Type &val) const
Row or column of a BArray
bool operator==(const Cell_Type &val) const
size_t size() const noexcept
void operator+=(const Cell_Type &val)
bool is_row() const noexcept
void operator/=(const Cell_Type &val)
void operator*=(const Cell_Type &val)
std::vector< Cell_Type >::const_iterator begin() noexcept
void operator=(const Cell_Type &val)
bool is_col() const noexcept
std::vector< Cell_Type >::const_iterator end() noexcept
void operator-=(const Cell_Type &val)
Entries in BArray. For now, it only has two members:
Definition: cell-bones.hpp:10
size_t size_t j
size_t i
Data_Type &&counter_ noexcept