Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
BlockName.cpp
Go to the documentation of this file.
1#include "BlockName.h"
2
3BlockName::BlockName(const std::string& name) : primary(name) {
4 block_names.insert(name);
5}
6
7BlockName::BlockName(const char* name) : primary(name == nullptr ? "" : name) {
8 if (name != nullptr) block_names.insert(std::string(name));
9}
10
11BlockName::BlockName(std::initializer_list<std::string> names)
12: block_names(names.begin(), names.end()),
13 primary(names.size() == 0 ? "" : *names.begin()) {}
14
15BlockName::BlockName(const std::unordered_set<std::string>& names)
16: block_names(names) {
17 if (!block_names.empty()) {
18 primary = *std::min_element(block_names.begin(), block_names.end());
19 }
20}
21
22std::unordered_set<std::string> BlockName::get_alias() const {
23 return block_names;
24}
25
26const std::string& BlockName::canonical() const {
27 static const std::string empty;
28 if (!primary.empty()) return primary;
29 if (block_names.empty()) return empty;
30 return *std::min_element(block_names.begin(), block_names.end());
31}
32
33BlockName::operator std::string() const {
34 return canonical();
35}
36
37bool BlockName::hasAlias(const std::string& alias) const {
38 return block_names.find(alias) != block_names.end();
39}
40
41std::string BlockName::to_string() const {
42 return operator std::string();
43}
44
45bool BlockName::operator==(const BlockName& other) const {
46 for (const auto& name : block_names) {
47 if (other.hasAlias(name)) return true;
48 }
49 return false;
50}
51
52bool BlockName::operator!=(const BlockName& other) const {
53 return !(*this == other);
54}
55
56bool BlockName::operator==(const std::string& name) const {
57 return hasAlias(name);
58}
59
60bool BlockName::operator==(const char* name) const {
61 return hasAlias(std::string(name));
62}
63
64bool BlockName::operator!=(const std::string& name) const {
65 return !hasAlias(name);
66}
67
68BlockName& BlockName::addAlias(const std::string& alias) {
69 if (primary.empty()) primary = alias;
70 block_names.insert(alias);
71 return *this;
72}
73
74BlockName operator+(const std::string& lhs, const BlockName& rhs) {
75 std::unordered_set<std::string> combined;
76 for (const auto& name : rhs.block_names) {
77 combined.insert(lhs + name);
78 }
79 return BlockName{combined};
80}
81
82std::ostream& operator<<(std::ostream& os, const BlockName& block) {
83 bool first = true;
84 for (const auto& name : block.block_names) {
85 if (!first) os << "/";
86 os << name;
87 first = false;
88 }
89 return os;
90}
91
93 std::unordered_set<std::string> upper_names;
94 upper_names.reserve(block_names.size());
95 for (auto name : block_names) {
96 std::transform(name.begin(), name.end(), name.begin(), ::toupper);
97 upper_names.insert(std::move(name));
98 }
99 block_names = std::move(upper_names);
100 primary = upper_copy(primary);
101}
102
103bool BlockName::operator<(const BlockName& other) const {
104 std::set<std::string> lhs_sorted(block_names.begin(), block_names.end());
105 std::set<std::string> rhs_sorted(other.block_names.begin(), other.block_names.end());
106 return lhs_sorted < rhs_sorted;
107}
std::ostream & operator<<(std::ostream &os, const BlockName &block)
Definition BlockName.cpp:82
BlockName operator+(const std::string &lhs, const BlockName &rhs)
Definition BlockName.cpp:74
Representation of SLHA / LHA block names with support for aliases.
Block identifier with alias support.
Definition BlockName.h:59
bool hasAlias(const std::string &alias) const
Checks whether a given alias is registered for this block.
Definition BlockName.cpp:37
BlockName & addAlias(const std::string &alias)
Adds a new alias to this block.
Definition BlockName.cpp:68
std::string to_string() const
Returns a string representation of the block name.
Definition BlockName.cpp:41
std::unordered_set< std::string > get_alias() const
Returns the set of aliases associated with this block.
Definition BlockName.cpp:22
BlockName()=default
Default constructor.
const std::string & canonical() const
Definition BlockName.cpp:26
bool operator!=(const BlockName &other) const
Inequality comparison between two BlockName objects.
Definition BlockName.cpp:52
bool operator==(const BlockName &other) const
Equality comparison between two BlockName objects.
Definition BlockName.cpp:45
bool operator<(const BlockName &other) const
Strict ordering operator for BlockName.
void to_upper()
Converts all aliases to upper-case in-place.
Definition BlockName.cpp:92