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
71template<
class T,
class A = std::allocator<std::pair<std::
size_t,T> > >
72class 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>
107 void serialize (Archive& ar,
const unsigned int version);
110template <
class T,
class A>
112template <
class T,
class A>
118template <
class T,
class A>
120 using type = details::generic_set_plus_op;
122template <
class T,
class A>
126#ifdef _RHEOLEF_HAVE_MPI
128template <
class T,
class A>
131 boost::mpi::is_mpi_datatype<T>::value
137 typename std::conditional<
138 boost::mpi::is_mpi_datatype<T>::value
149template <
class T,
class A>
155template <
class T,
class A>
162template <
class T,
class A>
168 if (
p == base::end()) {
173 (*p).second += x.second;
177template <
class T,
class A>
178template <
class Archive>
182 ar & boost::serialization::base_object<base>(*
this);
187template <
class T,
class A>
191 for (
const_iterator iter = a.base::begin(), last = a.base::end(); iter != last; iter++) {
192 base::insert (*iter);
195template <
class T,
class A>
200 for (
const_iterator iter = a.base::begin(), last = a.base::end(); iter != last; iter++) {
201 base::insert (*iter);
205template <
class T,
class A>
215template <
class T,
class A>
226 is >> xi.first >> xi.second;
231template <
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::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)
std::istream & operator>>(std::istream &is, const catchmark &m)
details::generic_set_plus_op type
std::conditional< boost::mpi::is_mpi_datatype< T >::value, std::true_type, std::false_type >::type type