Rheolef  7.1
an efficient C++ finite element environment
disarray_store.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_ARRAY_STORE_H
2 #define _RHEOLEF_ARRAY_STORE_H
3 namespace rheolef {
24 //
25 // implementation for dense disarray
26 //
27 template <class OutputRandomIterator, class SetOp, class Size, class IsContainer = std::false_type>
28 struct disarray_store {};
29 
30 // dense disarray of simple type, i.e. T is a mpi_datatype
31 template <class OutputRandomIterator, class SetOp, class Size>
32 struct disarray_store<OutputRandomIterator, SetOp, Size, std::false_type> {
33  typedef typename std::iterator_traits<OutputRandomIterator>::value_type T;
34  typedef typename std::pair<Size,T> data_type;
35  void operator()(const std::pair<Size,T>& val) { _op(_x [val.first], val.second); }
36  Size n_new_entry() const { return 0; }
37  disarray_store(OutputRandomIterator x, SetOp op) : _x(x), _op(op) {}
38  OutputRandomIterator _x;
39  SetOp _op;
40 };
41 // dense disarray of more complex type, i.e. T is a container of mpi_datatype
42 template <class OutputRandomIterator, class SetOp, class Size>
43 struct disarray_store<OutputRandomIterator, SetOp, Size, std::true_type> {
44  typedef typename std::iterator_traits<OutputRandomIterator>::value_type T;
45  typedef typename T::value_type U;
46  typedef typename std::pair<Size,U> data_type;
47  void operator()(const std::pair<Size,U>& val) {
48 #ifdef TO_CLEAN
49  // TODO: assume here that op is set_add_op; how to implement set_op ?
50  // and that T=set, because we use T::insert() and T::value_type
51  _x [val.first].insert (val.second);
52 #endif // TO_CLEAN
53  _op (_x [val.first], val.second);
54  }
55  Size n_new_entry() const { return 0; }
56  disarray_store(OutputRandomIterator x, SetOp op) : _x(x), _op(op) {}
57  OutputRandomIterator _x;
58  SetOp _op;
59 };
60 
61 // a simple wrapper, for convenience:
62 template <class OutputRandomIterator, class SetOp, class Size, class IsContainer>
63 inline
65 disarray_make_store(OutputRandomIterator x, SetOp op, Size, IsContainer)
66 {
68 }
69 } // namespace rheolef
70 #endif // _RHEOLEF_ARRAY_STORE_H
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::n_new_entry
Size n_new_entry() const
Definition: disarray_store.h:55
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::operator()
void operator()(const std::pair< Size, T > &val)
Definition: disarray_store.h:35
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::T
std::iterator_traits< OutputRandomIterator >::value_type T
Definition: disarray_store.h:44
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::_op
SetOp _op
Definition: disarray_store.h:39
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::n_new_entry
Size n_new_entry() const
Definition: disarray_store.h:36
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::operator()
void operator()(const std::pair< Size, U > &val)
Definition: disarray_store.h:47
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::data_type
std::pair< Size, T > data_type
Definition: disarray_store.h:34
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::_op
SetOp _op
Definition: disarray_store.h:58
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::U
T::value_type U
Definition: disarray_store.h:45
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::data_type
std::pair< Size, U > data_type
Definition: disarray_store.h:46
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::_x
OutputRandomIterator _x
Definition: disarray_store.h:57
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::T
std::iterator_traits< OutputRandomIterator >::value_type T
Definition: disarray_store.h:33
rheolef::disarray_make_store
disarray_store< OutputRandomIterator, SetOp, Size, IsContainer > disarray_make_store(OutputRandomIterator x, SetOp op, Size, IsContainer)
Definition: disarray_store.h:65
rheolef::disarray_store
Definition: disarray_store.h:28
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::true_type >::disarray_store
disarray_store(OutputRandomIterator x, SetOp op)
Definition: disarray_store.h:56
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::_x
OutputRandomIterator _x
Definition: disarray_store.h:38
rheolef::disarray_store< OutputRandomIterator, SetOp, Size, std::false_type >::disarray_store
disarray_store(OutputRandomIterator x, SetOp op)
Definition: disarray_store.h:37
rheolef::std
Definition: vec_expr_v2.h:402