Hyperiso 1.0.3
Modular flavour-physics calculations, Wilson coefficients and statistical inference
Loading...
Searching...
No Matches
LhaID.h
Go to the documentation of this file.
1#ifndef LHA_ID_H
2#define LHA_ID_H
3
4#include <string>
5#include <stdexcept>
6#include <algorithm>
7#include <iostream>
8#include <unordered_set>
9#include <initializer_list>
10#include <map>
11#include <vector>
12#include <set>
13#include <ranges>
14#include <concepts>
15#include <variant>
16#include "Logger.h"
17#include "Utils.h"
18#include "GeneralEnum.h"
19
20namespace fs = std::filesystem;
21
56struct LhaID {
57 std::vector<long> parts;
75 template<typename... Args>
76 requires (std::convertible_to<Args, long> && ...)
77 LhaID(Args... sub_ids) : parts({static_cast<long>(sub_ids)...}) {}
78
96 LhaID(const std::string& parts);
97
105 LhaID(const std::vector<long>& sub_ids) : parts(sub_ids) {}
106 LhaID(std::vector<long>&& sub_ids) : parts(std::move(sub_ids)) {}
107
108 // /**
109 // * @brief Constructs an LhaID from an initializer list of sub-ids.
110 // *
111 // * This is especially convenient for brace-initialization:
112 // * @code
113 // * LhaID id{5, 2};
114 // * @endcode
115 // *
116 // * @param sub_ids Sub-identifiers of the element.
117 // */
118 // LhaID(std::initializer_list<long> sub_ids) : parts(sub_ids) {}
119
128 LhaID(long id) : parts({id}) {}
129
138 std::string to_string() const;
139
148 std::vector<long> get_parts() const { return parts; }
149
162 operator long() const;
163
174 inline friend bool operator==(const LhaID& lhs, const LhaID& rhs) { return lhs.parts == rhs.parts; };
175
183 inline friend bool operator!=(const LhaID& lhs, const LhaID& rhs) { return !(lhs == rhs); };
184
195 inline friend bool operator<(const LhaID& lhs, const LhaID& rhs) { return (lhs.parts <=> rhs.parts) == std::weak_ordering::less; };
196
207 friend std::ostream& operator<<(std::ostream&, const LhaID&);
208};
209
210namespace std {
218 template <>
219 struct hash<LhaID> {
226 std::size_t operator()(const LhaID& p) const noexcept {
227 return std::hash<std::string>{}(p.to_string());
228 }
229 };
230}
231
232#endif
Hash specialization for SymbolId<Tag>.
Definition BlockName.h:353
Represents an identifier of a LHA element, possibly containing several sub-ids.
Definition LhaID.h:56
std::vector< long > get_parts() const
Returns the underlying vector of sub-ids.
Definition LhaID.h:148
std::vector< long > parts
Definition LhaID.h:57
LhaID(const std::vector< long > &sub_ids)
Constructs an LhaID from an explicit vector of sub-ids.
Definition LhaID.h:105
friend bool operator==(const LhaID &lhs, const LhaID &rhs)
Equality comparison operator.
Definition LhaID.h:174
friend std::ostream & operator<<(std::ostream &, const LhaID &)
Stream output operator for LhaID.
Definition LhaID.cpp:3
friend bool operator<(const LhaID &lhs, const LhaID &rhs)
Strict weak ordering based on lexicographic comparison of parts.
Definition LhaID.h:195
LhaID(long id)
Constructs an LhaID with a single identifier.
Definition LhaID.h:128
LhaID(Args... sub_ids)
Constructs an LhaID from a list of integral sub-ids.
Definition LhaID.h:77
LhaID(std::vector< long > &&sub_ids)
Definition LhaID.h:106
std::string to_string() const
Returns the canonical string representation of this LhaID.
Definition LhaID.cpp:19
friend bool operator!=(const LhaID &lhs, const LhaID &rhs)
Inequality comparison operator.
Definition LhaID.h:183
std::size_t operator()(const LhaID &p) const noexcept
Computes the hash of a given LhaID.
Definition LhaID.h:226