1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
* Copyright (C) 2015-2020 Mateusz Łącki and Michał Startek.
*
* This file is part of IsoSpec.
*
* IsoSpec is free software: you can redistribute it and/or modify
* it under the terms of the Simplified ("2-clause") BSD licence.
*
* IsoSpec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the Simplified BSD Licence
* along with IsoSpec. If not, see <https://opensource.org/licenses/BSD-2-Clause>.
*/
#pragma once
#include <string.h>
#include "platform.h"
#include "conf.h"
#include "isoMath.h"
#include "misc.h"
namespace IsoSpec
{
class ConfOrder
{
// configurations comparator
public:
inline bool operator()(void* conf1, void* conf2) const
{
return *reinterpret_cast<double*>(conf1) < *reinterpret_cast<double*>(conf2);
};
};
template<typename T> class TableOrder
{
const T* tbl;
public:
inline explicit TableOrder(const T* _tbl) : tbl(_tbl) {}
inline bool operator()(size_t i, size_t j) { return tbl[i] < tbl[j]; }
};
} // namespace IsoSpec
#include "marginalTrek++.h"
class PrecalculatedMarginal; // In case marginalTrek++.h us including us, and can't be included again...
namespace IsoSpec
{
template<typename T> class OrderMarginalsBySizeDecresing
{
T const* const* const MT;
public:
explicit OrderMarginalsBySizeDecresing(T const* const * const MT_) : MT(MT_) {};
inline bool operator()(size_t m1, size_t m2) { return MT[m1]->get_no_confs() > MT[m2]->get_no_confs(); }
};
} // namespace IsoSpec