AutoPas  3.0.0
Loading...
Searching...
No Matches
Configuration.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <cstddef>
10#include <tuple>
11#include <type_traits>
12#include <utility>
13
24
25namespace autopas {
26
31 public:
45 constexpr Configuration(ContainerOption _container, double _cellSizeFactor, TraversalOption _traversal,
46 LoadEstimatorOption _loadEstimator, DataLayoutOption _dataLayout, Newton3Option _newton3,
47 InteractionTypeOption _interactionType, VectorizationPatternOption _vecPattern)
48 : container(_container),
49 traversal(_traversal),
50 vecPattern(_vecPattern),
51 loadEstimator(_loadEstimator),
52 dataLayout(_dataLayout),
53 newton3(_newton3),
54 cellSizeFactor(_cellSizeFactor),
55 interactionType(_interactionType) {}
56
61 constexpr Configuration()
63
68 [[nodiscard]] std::string toString() const;
69
76 [[nodiscard]] std::string toShortString(bool fixedLength = true, bool forParameterizedTestName = false) const {
77 const std::string delimiter = forParameterizedTestName ? "_" : " , ";
78 auto result = (forParameterizedTestName ? "" : "{") + interactionType.to_string() + delimiter +
79 container.to_string(fixedLength) + delimiter + std::to_string(cellSizeFactor) + delimiter +
80 traversal.to_string(fixedLength) + delimiter + loadEstimator.to_string(fixedLength) + delimiter +
81 dataLayout.to_string(fixedLength) + delimiter + newton3.to_string(fixedLength) + delimiter +
82 vecPattern.to_string(fixedLength) + (forParameterizedTestName ? "" : "}");
83
84 // For parameterized test names, no punctuation is allowed except "_"
85 if (forParameterizedTestName) {
86 std::ranges::replace(result, '.', '_');
87 std::ranges::replace(result, '-', '_');
88 std::ranges::replace(result, '/', '_');
89 }
90
91 return result;
92 }
93
98 [[nodiscard]] std::string getCSVHeader() const;
99
104 [[nodiscard]] std::string getCSVLine() const;
105
112 [[nodiscard]] bool hasValidValues() const;
113
118 [[nodiscard]] bool hasCompatibleValues() const;
119
130 [[nodiscard]] auto tie() const {
132 vecPattern);
133 }
134
139 [[nodiscard]] auto tie() {
141 vecPattern);
142 }
143
147 ContainerOption container;
151 TraversalOption traversal;
155 VectorizationPatternOption vecPattern;
163 DataLayoutOption dataLayout;
167 Newton3Option newton3;
175 InteractionTypeOption interactionType;
176
177 private:
183 [[nodiscard]] std::string getCSVRepresentation(bool returnHeaderOnly) const;
184};
185
192std::ostream &operator<<(std::ostream &os, const Configuration &configuration);
193
200std::istream &operator>>(std::istream &in, Configuration &configuration);
201
208bool operator==(const Configuration &lhs, const Configuration &rhs);
209
216bool operator!=(const Configuration &lhs, const Configuration &rhs);
217
226bool operator<(const Configuration &lhs, const Configuration &rhs);
227
237 std::size_t operator()(const Configuration &configuration) const {
238 return std::apply([](const auto &...members) { return utils::hashCombine(members...); }, configuration.tie());
239 }
240};
241
242namespace internal {
249template <class Tuple_T, std::size_t... Is>
250constexpr std::size_t sumOfMemberSizes(std::index_sequence<Is...>) {
251 return (sizeof(std::remove_reference_t<std::tuple_element_t<Is, Tuple_T>>) + ...);
252}
253} // namespace internal
254
258using ConfigurationTie = decltype(std::declval<const Configuration &>().tie());
259
265inline constexpr std::size_t serializedConfigurationSize =
266 internal::sumOfMemberSizes<ConfigurationTie>(std::make_index_sequence<std::tuple_size_v<ConfigurationTie>>{});
267
268} // namespace autopas
Class containing multiple options that form an algorithm configuration for the pairwise iteration.
Definition: Configuration.h:30
std::string toString() const
Returns string representation in JSON style of the configuration object.
Definition: Configuration.cpp:12
LoadEstimatorOption loadEstimator
Load Estimator option.
Definition: Configuration.h:159
TraversalOption traversal
Traversal option.
Definition: Configuration.h:151
auto tie()
Non-const overload of tie()
Definition: Configuration.h:139
double cellSizeFactor
CellSizeFactor.
Definition: Configuration.h:171
std::string getCSVHeader() const
Generate a csv header containing all keys from the toString() method.
Definition: Configuration.cpp:19
DataLayoutOption dataLayout
Data Layout option.
Definition: Configuration.h:163
InteractionTypeOption interactionType
Interaction type of the configuration.
Definition: Configuration.h:175
bool hasValidValues() const
Returns whether the configuration has been initialized with valid values or as an invalid one.
Definition: Configuration.cpp:23
constexpr Configuration()
Constructor taking no arguments.
Definition: Configuration.h:61
ContainerOption container
Container option.
Definition: Configuration.h:147
std::string toShortString(bool fixedLength=true, bool forParameterizedTestName=false) const
Returns a short string representation of the configuration object, suitable for tabular output or tes...
Definition: Configuration.h:76
Newton3Option newton3
Newton 3 option.
Definition: Configuration.h:167
constexpr Configuration(ContainerOption _container, double _cellSizeFactor, TraversalOption _traversal, LoadEstimatorOption _loadEstimator, DataLayoutOption _dataLayout, Newton3Option _newton3, InteractionTypeOption _interactionType, VectorizationPatternOption _vecPattern)
Constructor.
Definition: Configuration.h:45
VectorizationPatternOption vecPattern
Vectorization Pattern option.
Definition: Configuration.h:155
bool hasCompatibleValues() const
Checks if any of the configuration values are incompatible with each other.
Definition: Configuration.cpp:53
std::string getCSVLine() const
Generate a csv representation containing all values from the toString() method.
Definition: Configuration.cpp:21
auto tie() const
A tuple (std::tie) of references to all members, in a fixed order.
Definition: Configuration.h:130
Class representing the load estimator choices.
Definition: LoadEstimatorOption.h:18
constexpr std::size_t sumOfMemberSizes(std::index_sequence< Is... >)
Sum of the sizes of all members referenced by a Configuration::tie() tuple.
Definition: Configuration.h:250
std::size_t hashCombine(const Values_T &...values)
Combines the hashes of an arbitrary number of values into one hash.
Definition: HashCombine.h:51
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:34
bool operator!=(const Configuration &lhs, const Configuration &rhs)
Not-Equals operator for Configuration objects.
Definition: Configuration.cpp:122
constexpr std::size_t serializedConfigurationSize
Number of bytes a Configuration occupies when every member is serialized by value.
Definition: Configuration.h:265
bool operator==(const Configuration &lhs, const Configuration &rhs)
Equals operator for Configuration objects.
Definition: Configuration.cpp:118
decltype(std::declval< const Configuration & >().tie()) ConfigurationTie
Type of the tuple returned by Configuration::tie().
Definition: Configuration.h:258
std::ostream & operator<<(std::ostream &os, const OwnershipState &ownershipState)
Insertion operator for OwnershipState.
Definition: OwnershipState.h:84
std::istream & operator>>(std::istream &in, Configuration &configuration)
Stream extraction operator.
Definition: Configuration.cpp:130
bool operator<(const Configuration &lhs, const Configuration &rhs)
Comparison operator for Configuration objects.
Definition: Configuration.cpp:126
Hash function for Configuration objects to be used in e.g.
Definition: Configuration.h:231
std::size_t operator()(const Configuration &configuration) const
Hash Function operator.
Definition: Configuration.h:237