OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
 
Loading...
Searching...
No Matches
compare_general.hpp
1/*
2 * compare_general.hpp
3 *
4 * Created on: Nov 1, 2015
5 * Author: i-bird
6 */
7
8#ifndef OPENFPM_DATA_SRC_UTIL_COMPARE_GENERAL_HPP_
9#define OPENFPM_DATA_SRC_UTIL_COMPARE_GENERAL_HPP_
10
11
12#include "util/common.hpp"
13#include "util/util_debug.hpp"
14#include "util/for_each_ref.hpp"
15#include <boost/mpl/range_c.hpp>
16
22template<typename T, unsigned int agg=2 * is_aggregate<T>::value>
24{
31 static inline bool compare_general_f(const T & src, const T & dst)
32 {
33#ifndef DISABLE_ALL_RTTI
34 std::cerr << "Error: " << __FILE__ << ":" << __LINE__ << " " << demangle(typeid(T).name()) << " does not have an operator== and is not an aggregate or an openfpm native structure, comparation is not possible" << "\n";
35#endif
36 return false;
37 }
38};
39
40
41template<typename T>
42struct compare_general<T,2>
43{
50 static inline bool compare_general_f(const T & src, const T & dst)
51 {
52 compare_aggregate<T> cp(src,dst);
53
54 boost::mpl::for_each_ref<boost::mpl::range_c<int,0,T::max_prop>>(cp);
55
56 return cp.result();
57 }
58};
59
60template<typename T>
61struct compare_general<T,0>
62{
69 static inline bool compare_general_f(const T & src, const T & dst)
70 {
71 return dst == src;
72 }
73};
74
75
76#endif /* OPENFPM_DATA_SRC_UTIL_COMPARE_GENERAL_HPP_ */
Structure to compare aggregates.
static bool compare_general_f(const T &src, const T &dst)
compare objects that are aggregates but define an operator=
static bool compare_general_f(const T &src, const T &dst)
compare objects that are aggregates
structure to copy aggregates
static bool compare_general_f(const T &src, const T &dst)
Spacialization when there is unknown compare method.