1 #ifndef _RHEOLEF_PAIR_SET_H
2 #define _RHEOLEF_PAIR_SET_H
36 #include "rheolef/communicator.h"
37 #include "rheolef/pretty_name.h"
38 #include "rheolef/msg_util.h"
40 #pragma GCC diagnostic push
41 #pragma GCC diagnostic ignored "-Weffc++"
42 #pragma GCC diagnostic ignored "-Wparentheses"
43 #pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
44 #ifdef _RHEOLEF_HAVE_MPI
45 #include "rheolef/mpi_pair_datatype.h"
47 #include <boost/serialization/map.hpp>
48 #include <boost/serialization/base_object.hpp>
49 #pragma GCC diagnostic pop
71 template<
class T,
class A = std::allocator<std::pair<std::
size_t,T> > >
72 class pair_set:
public std::map<std::size_t, T, std::less<std::size_t> > {
82 typedef std::map<size_type, T, std::less<size_type> >
106 template <
class Archive>
110 template <
class T,
class A>
112 template <
class T,
class A>
118 template <
class T,
class A>
120 using type = details::generic_set_plus_op;
122 template <
class T,
class A>
126 #ifdef _RHEOLEF_HAVE_MPI
128 template <
class T,
class A>
131 boost::mpi::is_mpi_datatype<T>::value
137 typename std::conditional<
138 boost::mpi::is_mpi_datatype<T>::value
149 template <
class T,
class A>
155 template <
class T,
class A>
162 template <
class T,
class A>
168 if (
p == base::end()) {
173 (*p).second += x.second;
177 template <
class T,
class A>
178 template <
class Archive>
182 ar & boost::serialization::base_object<base>(*
this);
187 template <
class T,
class A>
191 for (
const_iterator iter =
a.base::begin(), last =
a.base::end(); iter != last; iter++) {
192 base::insert (*iter);
195 template <
class T,
class A>
200 for (
const_iterator iter =
a.base::begin(), last =
a.base::end(); iter != last; iter++) {
201 base::insert (*iter);
205 template <
class T,
class A>
215 template <
class T,
class A>
226 is >> xi.first >> xi.second;
231 template <
class T,
class A>
237 os <<
a.size() <<
"\t";
238 for (
const_iterator iter =
a.begin(), last =
a.end(); iter != last; iter++) {
239 os <<
" " << (*iter).first <<
" " << (*iter).second;
field::size_type size_type
pair_set(const pair_set< T, A > &x, const A &alloc=A())
std::map< size_type, T, std::less< size_type > > base
pair_set(const A &alloc=A())
pair_set< T, A > & operator+=(const pair_type &x)
std::pair< const size_type, T > const_pair_type
void serialize(Archive &ar, const unsigned int version)
std::pair< size_type, T > pair_type
base::const_iterator const_iterator
pair_set< T, A > & operator=(const pair_set< T, A > &x)
base::allocator_type allocator_type
This file is part of Rheolef.
std::istream & operator>>(std::istream &is, const catchmark &m)
std::ostream & operator<<(std::ostream &os, const catchmark &m)
std::enable_if< details::is_rheolef_arithmetic< U >::value,ad3_basic< T > & >::type operator+=(ad3_basic< T > &a, const U &b)
details::generic_set_plus_op type
std::conditional< boost::mpi::is_mpi_datatype< T >::value,std::true_type,std::false_type >::type type