Skip to content

Commit cebfb0c

Browse files
committed
apply clang-tidy-19 suggestions
Signed-off-by: Martijn Govers <Martijn.Govers@Alliander.com> revert readability-math-missing-parentheses and boost-use-ranges Signed-off-by: Martijn Govers <Martijn.Govers@Alliander.com> revert readability-redundant-member-init Signed-off-by: Martijn Govers <Martijn.Govers@Alliander.com>
1 parent d0e8fbd commit cebfb0c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+628
-360
lines changed

.clang-tidy

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Checks: '
66
-*,
77
boost-*,
8+
-boost-use-ranges,
89
bugprone-*,
910
-bugprone-easily-swappable-parameters,
1011
-bugprone-exception-escape,
@@ -55,6 +56,8 @@ readability-*,
5556
-readability-function-cognitive-complexity,
5657
-readability-identifier-length,
5758
-readability-magic-numbers,
59+
-readability-math-missing-parentheses,
60+
-readability-redundant-member-init,
5861
-bugprone-unchecked-optional-access,
5962
'
6063

power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/dataset.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -535,8 +535,9 @@ template <dataset_type_tag dataset_type_> class Dataset {
535535
throw DatasetError{"Cannot have duplicated components!\n"};
536536
}
537537
check_uniform_integrity(elements_per_scenario, total_elements);
538-
dataset_info_.component_info.push_back(
539-
{&dataset_info_.dataset->get_component(component), elements_per_scenario, total_elements});
538+
dataset_info_.component_info.push_back({.component = &dataset_info_.dataset->get_component(component),
539+
.elements_per_scenario = elements_per_scenario,
540+
.total_elements = total_elements});
540541
buffers_.push_back(Buffer{});
541542
}
542543

power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/serialization/deserializer.hpp

+22-6
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ template <class T> struct DefaultErrorVisitor : DefaultNullVisitor {
186186
bool throw_error() { throw SerializationError{(static_cast<T&>(*this)).get_err_msg()}; }
187187

188188
std::string get_err_msg() { return std::string{T::static_err_msg}; }
189+
190+
private:
191+
DefaultErrorVisitor() = default;
192+
friend T; // CRTP compliance
189193
};
190194

191195
struct visit_map_t;
@@ -238,6 +242,8 @@ struct MapArrayVisitor : DefaultErrorVisitor<MapArrayVisitor<map_array>> {
238242
assert(size == 0);
239243
return true;
240244
}
245+
246+
MapArrayVisitor<map_array>() = default;
241247
};
242248

243249
struct StringVisitor : DefaultErrorVisitor<StringVisitor> {
@@ -248,6 +254,8 @@ struct StringVisitor : DefaultErrorVisitor<StringVisitor> {
248254
str = {v, size};
249255
return true;
250256
}
257+
258+
StringVisitor() = default;
251259
};
252260

253261
struct BoolVisitor : DefaultErrorVisitor<BoolVisitor> {
@@ -258,6 +266,8 @@ struct BoolVisitor : DefaultErrorVisitor<BoolVisitor> {
258266
value = v;
259267
return true;
260268
}
269+
270+
BoolVisitor() = default;
261271
};
262272

263273
template <class T> struct ValueVisitor;
@@ -282,6 +292,8 @@ template <std::integral T> struct ValueVisitor<T> : DefaultErrorVisitor<ValueVis
282292
value = static_cast<T>(v);
283293
return true;
284294
}
295+
296+
ValueVisitor<T>(T& v) : DefaultErrorVisitor<ValueVisitor<T>>{}, value{v} {}
285297
};
286298

287299
template <> struct ValueVisitor<double> : DefaultErrorVisitor<ValueVisitor<double>> {
@@ -306,6 +318,8 @@ template <> struct ValueVisitor<double> : DefaultErrorVisitor<ValueVisitor<doubl
306318
value = v;
307319
return true;
308320
}
321+
322+
ValueVisitor<double>(double& v) : DefaultErrorVisitor<ValueVisitor<double>>{}, value{v} {}
309323
};
310324

311325
template <> struct ValueVisitor<RealValue<asymmetric_t>> : DefaultErrorVisitor<ValueVisitor<RealValue<asymmetric_t>>> {
@@ -357,6 +371,9 @@ template <> struct ValueVisitor<RealValue<asymmetric_t>> : DefaultErrorVisitor<V
357371
value[idx] = v;
358372
return true;
359373
}
374+
375+
ValueVisitor<RealValue<asymmetric_t>>(RealValue<asymmetric_t>& v)
376+
: DefaultErrorVisitor<ValueVisitor<RealValue<asymmetric_t>>>{}, value{v} {}
360377
};
361378

362379
} // namespace detail
@@ -656,10 +673,9 @@ class Deserializer {
656673
while (n_components-- != 0) {
657674
component_key_ = parse_string();
658675
Idx const component_size = parse_map_array<visit_array_t, stay_offset>().size;
659-
size_t const scenario_offset = offset_;
660-
// skip all the real content but check if it has map
661-
bool const has_map = parse_skip_check_map();
662-
count_per_scenario.push_back({component_key_, component_size, scenario_offset, has_map});
676+
count_per_scenario.push_back({.component = component_key_, .size = component_size, .offset = offset_});
677+
// skip all the real content
678+
parse_skip();
663679
}
664680
component_key_ = {};
665681
return count_per_scenario;
@@ -943,7 +959,7 @@ class Deserializer {
943959

944960
ctype_func_selector(attribute.ctype, [&buffer_view, &component, &attribute, this]<class T> {
945961
ValueVisitor<T> visitor{
946-
{}, attribute.get_attribute<T>(component.advance_ptr(buffer_view.buffer->data, buffer_view.idx))};
962+
attribute.get_attribute<T>(component.advance_ptr(buffer_view.buffer->data, buffer_view.idx))};
947963
msgpack::parse(data_, size_, offset_, visitor);
948964
});
949965
}
@@ -954,7 +970,7 @@ class Deserializer {
954970
assert(buffer.meta_attribute != nullptr);
955971

956972
ctype_func_selector(buffer.meta_attribute->ctype, [&buffer, &idx, this]<class T> {
957-
ValueVisitor<T> visitor{{}, *(reinterpret_cast<T*>(buffer.data) + idx)};
973+
ValueVisitor<T> visitor{*(reinterpret_cast<T*>(buffer.data) + idx)};
958974
msgpack::parse(data_, size_, offset_, visitor);
959975
});
960976
}

power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/serialization/serializer.hpp

+13-4
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,19 @@ struct MapArray {
7373
bool begin{true};
7474
};
7575

76-
struct JsonConverter : msgpack::null_visitor {
76+
template <typename T> struct NullVisitor : msgpack::null_visitor {
77+
private:
78+
NullVisitor() = default;
79+
friend T; // CRTP compliance
80+
};
81+
82+
struct JsonConverter : NullVisitor<JsonConverter> {
7783
static constexpr char sep_char = ' ';
7884

7985
Idx indent{};
8086
Idx max_indent_level{};
81-
std::stringstream ss{}; // NOLINT(readability-redundant-member-init)
82-
std::stack<MapArray> map_array{}; // NOLINT(readability-redundant-member-init)
87+
std::stringstream ss{};
88+
std::stack<MapArray> map_array{};
8389

8490
void print_indent() {
8591
if (indent < 0) {
@@ -194,6 +200,9 @@ struct JsonConverter : msgpack::null_visitor {
194200
ss << '}';
195201
return true;
196202
}
203+
204+
JsonConverter(Idx indent_, Idx max_indent_level_)
205+
: NullVisitor<JsonConverter>{}, indent{indent_}, max_indent_level{max_indent_level_} {}
197206
};
198207

199208
} // namespace json_converter
@@ -380,7 +389,7 @@ class Serializer {
380389
std::string const& get_json(bool use_compact_list, Idx indent) {
381390
if (json_buffer_.empty() || (use_compact_list_ != use_compact_list) || (json_indent_ != indent)) {
382391
Idx const max_indent_level = dataset_handler_.is_batch() ? 4 : 3;
383-
json_converter::JsonConverter visitor{{}, indent, max_indent_level};
392+
json_converter::JsonConverter visitor{indent, max_indent_level};
384393
auto const msgpack_data = get_msgpack(use_compact_list);
385394
msgpack::parse(msgpack_data.data(), msgpack_data.size(), visitor);
386395
json_buffer_ = visitor.ss.str();

power_grid_model_c/power_grid_model/include/power_grid_model/common/exception.hpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,9 @@ class InvalidArguments : public PowerGridError {
4444

4545
template <class... Options>
4646
requires(std::same_as<std::remove_cvref_t<Options>, TypeValuePair> && ...)
47-
InvalidArguments(std::string const& method, Options&&... options)
47+
InvalidArguments(std::string const& method, Options const&... options)
4848
: InvalidArguments{method, "the following combination of options"} {
49-
(append_msg(" " + std::forward<Options>(options).name + ": " + std::forward<Options>(options).value + "\n"),
50-
...);
49+
(append_msg(" " + options.name + ": " + options.value + "\n"), ...);
5150
}
5251
};
5352

power_grid_model_c/power_grid_model/include/power_grid_model/common/grouped_index_vector.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ class SparseGroupedIdxVector {
132132
: indptr_{sparse_group_elements.empty() ? IdxVector{0} : std::move(sparse_group_elements)} {
133133
assert(size() >= 0);
134134
assert(element_size() >= 0);
135-
assert(std::is_sorted(std::begin(indptr_), std::end(indptr_)));
135+
assert(std::ranges::is_sorted(indptr_));
136136
}
137137
SparseGroupedIdxVector(from_sparse_t /* tag */, IdxVector sparse_group_elements)
138138
: SparseGroupedIdxVector{std::move(sparse_group_elements)} {}
@@ -154,7 +154,7 @@ class DenseGroupedIdxVector {
154154
explicit constexpr GroupIterator(IdxVector const& dense_vector, Idx group)
155155
: dense_vector_{&dense_vector},
156156
group_{group},
157-
group_range_{std::equal_range(std::cbegin(*dense_vector_), std::cend(*dense_vector_), group)} {}
157+
group_range_{std::ranges::equal_range(*dense_vector_, group)} {}
158158

159159
private:
160160
using group_iterator = IdxVector::const_iterator;
@@ -215,7 +215,7 @@ class DenseGroupedIdxVector {
215215
: num_groups_{num_groups}, dense_vector_{std::move(dense_vector)} {
216216
assert(size() >= 0);
217217
assert(element_size() >= 0);
218-
assert(std::is_sorted(std::begin(dense_vector_), std::end(dense_vector_)));
218+
assert(std::ranges::is_sorted(dense_vector_));
219219
assert(num_groups_ >= (dense_vector_.empty() ? 0 : dense_vector_.back()));
220220
}
221221
DenseGroupedIdxVector(from_sparse_t /* tag */, IdxVector const& sparse_group_elements)

power_grid_model_c/power_grid_model/include/power_grid_model/component/base.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Base {
2828
virtual ~Base() = default;
2929
constexpr ID id() const noexcept { return id_; }
3030
constexpr BaseOutput base_output(bool is_energized) const {
31-
return BaseOutput{id_, static_cast<IntS>(is_energized)};
31+
return BaseOutput{.id = id_, .energized = static_cast<IntS>(is_energized)};
3232
}
3333
virtual bool energized(bool is_connected_to_source) const = 0;
3434

power_grid_model_c/power_grid_model/include/power_grid_model/component/branch.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class Branch : public Base {
187187
assert(update_data.id == this->id() || is_nan(update_data.id));
188188
bool const changed = set_status(update_data.from_status, update_data.to_status);
189189
// change branch connection will change both topo and param
190-
return {changed, changed};
190+
return {.topo = changed, .param = changed};
191191
}
192192

193193
auto inverse(std::convertible_to<BranchUpdate> auto update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/branch3.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class Branch3 : public Base {
209209
assert(update_data.id == this->id() || is_nan(update_data.id));
210210
bool const changed = set_status(update_data.status_1, update_data.status_2, update_data.status_3);
211211
// change in branch3 connection will change both topo and param
212-
return {changed, changed};
212+
return {.topo = changed, .param = changed};
213213
}
214214

215215
auto inverse(std::convertible_to<Branch3Update> auto update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/component.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ struct UpdateChange {
1818
bool param{};
1919

2020
friend constexpr UpdateChange operator||(UpdateChange const& x, UpdateChange const& y) {
21-
return UpdateChange{x.topo || y.topo, x.param || y.param};
21+
return UpdateChange{.topo = x.topo || y.topo, .param = x.param || y.param};
2222
}
2323
};
2424

power_grid_model_c/power_grid_model/include/power_grid_model/component/current_sensor.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ template <symmetry_tag current_sensor_symmetry_> class CurrentSensor : public Ge
105105
update_real_value<current_sensor_symmetry>(update_data.i_measured, i_measured_, base_current_inv_);
106106
update_real_value<current_sensor_symmetry>(update_data.i_angle_measured, i_angle_measured_, 1.0);
107107

108-
return {false, false};
108+
return {.topo = false, .param = false};
109109
}
110110

111111
CurrentSensorUpdate<current_sensor_symmetry>

power_grid_model_c/power_grid_model/include/power_grid_model/component/fault.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class Fault final : public Base {
114114
x_f_ = update.x_f;
115115
}
116116
check_sanity();
117-
return {false, false}; // topology and parameters do not change
117+
return {.topo = false, .param = false}; // topology and parameters do not change
118118
}
119119

120120
FaultUpdate inverse(FaultUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/load_gen.hpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class LoadGen final : public std::conditional_t<is_generator_v<appliance_type_>,
106106
this->set_status(update_data.status);
107107
set_power(update_data.p_specified, update_data.q_specified);
108108
// change load connection and/or value will not change topology or parameters
109-
return {false, false};
109+
return {.topo = false, .param = false};
110110
}
111111

112112
LoadGenUpdate<loadgen_symmetry> inverse(LoadGenUpdate<loadgen_symmetry> update_data) const {
@@ -161,7 +161,7 @@ class LoadGen final : public std::conditional_t<is_generator_v<appliance_type_>,
161161

162162
// scale load
163163
template <symmetry_tag calculation_symmetry>
164-
ComplexValue<calculation_symmetry> scale_power(ComplexValue<calculation_symmetry> u) const {
164+
ComplexValue<calculation_symmetry> scale_power(ComplexValue<calculation_symmetry> const& u) const {
165165
using enum LoadGenType;
166166

167167
auto const params = [this] { return this->template calc_param<calculation_symmetry>(); };
@@ -173,7 +173,9 @@ class LoadGen final : public std::conditional_t<is_generator_v<appliance_type_>,
173173
case const_i:
174174
return params() * cabs(u);
175175
default:
176-
throw MissingCaseForEnumError(std::string(this->name) + " power scaling factor", this->type());
176+
auto const& load_gen_name =
177+
this->name; // NOLINT(readability-static-accessed-through-instance) // for derived class type
178+
throw MissingCaseForEnumError(std::string{load_gen_name} + " power scaling factor", this->type());
177179
}
178180
}
179181
};

power_grid_model_c/power_grid_model/include/power_grid_model/component/node.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ class Node final : public Base {
2626
explicit Node(NodeInput const& node_input) : Base{node_input}, u_rated_{node_input.u_rated} {}
2727

2828
// update node, nothing happens here
29-
static constexpr UpdateChange update(BaseUpdate const& /* update_data */) { return {false, false}; }
29+
static constexpr UpdateChange update(BaseUpdate const& /* update_data */) {
30+
return {.topo = false, .param = false};
31+
}
3032
static constexpr BaseUpdate inverse(BaseUpdate update_data) { return update_data; }
3133

3234
// energized

power_grid_model_c/power_grid_model/include/power_grid_model/component/power_sensor.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ template <symmetry_tag power_sensor_symmetry_> class PowerSensor : public Generi
9595
update_real_value<power_sensor_symmetry>(update_data.p_sigma, p_sigma_, inv_base_power);
9696
update_real_value<power_sensor_symmetry>(update_data.q_sigma, q_sigma_, inv_base_power);
9797

98-
return {false, false};
98+
return {.topo = false, .param = false};
9999
}
100100

101101
PowerSensorUpdate<power_sensor_symmetry> inverse(PowerSensorUpdate<power_sensor_symmetry> update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/shunt.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class Shunt : public Appliance {
5151
changed = update_params(update_data) || changed;
5252

5353
// change shunt connection will not change topology, but will change parameters
54-
return {false, changed};
54+
return {.topo = false, .param = changed};
5555
}
5656

5757
ShuntUpdate inverse(ShuntUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/source.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class Source : public Appliance {
9393
bool const param_changed = set_u_ref(update_data.u_ref, update_data.u_ref_angle);
9494
// change source connection will change both topo and param
9595
// change u ref will change param
96-
return {topo_changed, param_changed || topo_changed};
96+
return {.topo = topo_changed, .param = param_changed || topo_changed};
9797
}
9898

9999
SourceUpdate inverse(SourceUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/three_winding_transformer.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class ThreeWindingTransformer : public Branch3 {
105105
double base_i_2() const final { return base_i_2_; }
106106
double base_i_3() const final { return base_i_3_; }
107107
double loading(double s_1, double s_2, double s_3) const final {
108-
return std::max(std::max(s_1 / sn_1_, s_2 / sn_2_), s_3 / sn_3_);
108+
return std::max({s_1 / sn_1_, s_2 / sn_2_, s_3 / sn_3_});
109109
}
110110
// 3-way branch, phase shift = phase_node_x - phase_internal_node
111111
// the clock_12 and clock_13 is reverted
@@ -133,7 +133,7 @@ class ThreeWindingTransformer : public Branch3 {
133133
assert(update_data.id == this->id() || is_nan(update_data.id));
134134
bool const topo_changed = set_status(update_data.status_1, update_data.status_2, update_data.status_3);
135135
bool const param_changed = set_tap(update_data.tap_pos) || topo_changed;
136-
return {topo_changed, param_changed};
136+
return {.topo = topo_changed, .param = param_changed};
137137
}
138138

139139
ThreeWindingTransformerUpdate inverse(ThreeWindingTransformerUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/transformer.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class Transformer : public Branch {
9797
assert(update_data.id == this->id() || is_nan(update_data.id));
9898
bool const topo_changed = set_status(update_data.from_status, update_data.to_status);
9999
bool const param_changed = set_tap(update_data.tap_pos) || topo_changed;
100-
return {topo_changed, param_changed};
100+
return {.topo = topo_changed, .param = param_changed};
101101
}
102102

103103
TransformerUpdate inverse(TransformerUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/transformer_tap_regulator.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class TransformerTapRegulator : public Regulator {
4141
update_real_value<symmetric_t>(update_data.u_band, u_band_, 1.0);
4242
update_real_value<symmetric_t>(update_data.line_drop_compensation_r, line_drop_compensation_r_, 1.0);
4343
update_real_value<symmetric_t>(update_data.line_drop_compensation_x, line_drop_compensation_x_, 1.0);
44-
return {false, false};
44+
return {.topo = false, .param = false};
4545
}
4646

4747
TransformerTapRegulatorUpdate inverse(TransformerTapRegulatorUpdate update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/component/voltage_sensor.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ template <symmetry_tag sym> class VoltageSensor : public GenericVoltageSensor {
8989
u_sigma_ = update_data.u_sigma * inv_u_norm();
9090
}
9191

92-
return {false, false};
92+
return {.topo = false, .param = false};
9393
}
9494

9595
VoltageSensorUpdate<sym> inverse(VoltageSensorUpdate<sym> update_data) const {

power_grid_model_c/power_grid_model/include/power_grid_model/container.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class Container<RetrievableTypes<GettableTypes...>, StorageableTypes...> {
9292
// create object
9393
vec.emplace_back(std::forward<Args>(args)...);
9494
// insert idx to map
95-
map_[id] = Idx2D{group, pos};
95+
map_[id] = Idx2D{.group = group, .pos = pos};
9696
}
9797

9898
// get item based on Idx2D

power_grid_model_c/power_grid_model/include/power_grid_model/main_core/input.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ constexpr std::array<Branch3Side, 3> const branch3_sides = {Branch3Side::side_1,
2323
template <std::derived_from<Base> Component, class ComponentContainer,
2424
forward_iterator_like<typename Component::InputType> ForwardIterator>
2525
requires model_component_state_c<MainModelState, ComponentContainer, Component>
26-
inline void add_component(MainModelState<ComponentContainer>& state, ForwardIterator begin, ForwardIterator end,
27-
double system_frequency) {
26+
inline void add_component(MainModelState<ComponentContainer>& state, ForwardIterator const& begin,
27+
ForwardIterator const& end, double system_frequency) {
2828
using ComponentView = std::conditional_t<std::same_as<decltype(*begin), typename Component::InputType const&>,
2929
typename Component::InputType const&, typename Component::InputType>;
3030

0 commit comments

Comments
 (0)