Skip to content

Commit b31f0b1

Browse files
committed
make check methods constexpr. make assign constexpr
1 parent 09744f2 commit b31f0b1

18 files changed

Lines changed: 81 additions & 71 deletions

include/MGIS/Function/Algorithms.hxx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include <optional>
1212
#include "MGIS/Config.hxx"
13-
#include "MGIS/Context.hxx"
13+
#include "MGIS/AbstractErrorHandler.hxx"
1414
#include "MGIS/Function/SpaceConcept.hxx"
1515
#include "MGIS/Function/EvaluatorConcept.hxx"
1616
#include "MGIS/Function/FunctionConcept.hxx"
@@ -24,9 +24,9 @@ namespace mgis::function {
2424
* \param[in] e: right hand side
2525
*/
2626
template <typename FunctionType, EvaluatorConcept EvaluatorType>
27-
[[nodiscard]] bool assign(Context&,
28-
FunctionType&,
29-
EvaluatorType) //
27+
[[nodiscard]] constexpr bool assign(AbstractErrorHandler&,
28+
FunctionType&,
29+
EvaluatorType) //
3030
requires(((LinearElementSpaceConcept<std::decay_t<
3131
decltype(getSpace(std::declval<EvaluatorType>()))>>) ||
3232
(LinearQuadratureSpaceConcept<std::decay_t<
@@ -44,7 +44,7 @@ namespace mgis::function {
4444
*/
4545
template <EvaluatorConcept EvaluatorType, typename OperatorType>
4646
[[nodiscard]] std::optional<real>
47-
scalar_reduce(Context&, EvaluatorType, const OperatorType, const real) requires(
47+
scalar_reduce(AbstractErrorHandler&, EvaluatorType, const OperatorType, const real) requires(
4848
LinearElementSpaceConcept<
4949
std::decay_t<decltype(getSpace(std::declval<EvaluatorType>()))>>);
5050

include/MGIS/Function/Algorithms.ixx

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ namespace mgis::function::algorithm {
2323
* \param[in] po: iterator to the output values
2424
*/
2525
template <size_type N, typename InputIterator, typename OutputIterator>
26-
void copy(const InputIterator p,
27-
const InputIterator pe,
28-
OutputIterator po) requires(N > 0) {
26+
constexpr void copy(const InputIterator p,
27+
const InputIterator pe,
28+
OutputIterator po) requires(N > 0) {
2929
if constexpr ((std::random_access_iterator<InputIterator>)&& //
3030
(std::random_access_iterator<OutputIterator>)) {
3131
if constexpr (N > 9) {
@@ -56,110 +56,117 @@ namespace mgis::function::algorithm {
5656

5757
namespace mgis::function::internals {
5858

59-
inline void assign_value(auto& lhs, const auto& rhs) {
59+
constexpr void assign_value(auto& lhs, const auto& rhs) {
6060
std::copy(rhs.begin(), rhs.end(), lhs.begin());
6161
}
6262

63-
inline void assign_value(std::span<real> lhs, const auto& rhs) {
63+
constexpr void assign_value(std::span<real> lhs, const auto& rhs) {
6464
std::copy(rhs.begin(), rhs.end(), lhs.begin());
6565
}
6666

67-
inline void assign_value(std::span<real> lhs,
68-
const std::span<const real> rhs) {
67+
constexpr void assign_value(std::span<real> lhs,
68+
const std::span<const real> rhs) {
6969
std::copy(rhs.begin(), rhs.end(), lhs.begin());
7070
}
7171

72-
inline void assign_value(std::span<real> lhs, const std::span<real> rhs) {
72+
constexpr void assign_value(std::span<real> lhs, const std::span<real> rhs) {
7373
std::copy(rhs.begin(), rhs.end(), lhs.begin());
7474
}
7575

76-
inline void assign_value(real& lhs, const std::span<real>& rhs) {
76+
constexpr void assign_value(real& lhs, const std::span<real>& rhs) {
7777
lhs = rhs[0];
7878
}
7979

80-
inline void assign_value(real& lhs, const std::span<const real>& rhs) {
80+
constexpr void assign_value(real& lhs, const std::span<const real>& rhs) {
8181
lhs = rhs[0];
8282
}
8383

84-
inline void assign_value(real& lhs, const std::span<real, 1u>& rhs) {
84+
constexpr void assign_value(real& lhs, const std::span<real, 1u>& rhs) {
8585
lhs = rhs[0];
8686
}
8787

88-
inline void assign_value(real& lhs, const std::span<const real, 1u>& rhs) {
88+
constexpr void assign_value(real& lhs, const std::span<const real, 1u>& rhs) {
8989
lhs = rhs[0];
9090
}
9191

92-
inline void assign_value(real& lhs, const std::array<real, 1u>& rhs) {
92+
constexpr void assign_value(real& lhs, const std::array<real, 1u>& rhs) {
9393
lhs = rhs[0];
9494
}
9595

96-
inline void assign_value(std::array<real, 1u>& lhs, const real rhs) {
96+
constexpr void assign_value(std::array<real, 1u>& lhs, const real rhs) {
9797
lhs[0] = rhs;
9898
}
9999

100-
inline void assign_value(std::array<real, 1u>& lhs,
101-
const std::array<real, 1u> rhs) {
100+
constexpr void assign_value(std::array<real, 1u>& lhs,
101+
const std::array<real, 1u> rhs) {
102102
lhs[0] = rhs[0];
103103
}
104104

105-
inline void assign_value(std::array<real, 1u>& lhs, const std::span<real> rhs) {
105+
constexpr void assign_value(std::array<real, 1u>& lhs,
106+
const std::span<real> rhs) {
106107
lhs[0] = rhs[0];
107108
}
108109

109-
inline void assign_value(std::array<real, 1u>& lhs, const std::span<const real> rhs) {
110+
constexpr void assign_value(std::array<real, 1u>& lhs,
111+
const std::span<const real> rhs) {
110112
lhs[0] = rhs[0];
111113
}
112114

113-
inline void assign_value(std::array<real, 1u>& lhs, const std::span<real, 1u> rhs) {
115+
constexpr void assign_value(std::array<real, 1u>& lhs,
116+
const std::span<real, 1u> rhs) {
114117
lhs[0] = rhs[0];
115118
}
116119

117-
inline void assign_value(std::array<real, 1u>& lhs, const std::span<const real, 1u> rhs) {
120+
constexpr void assign_value(std::array<real, 1u>& lhs,
121+
const std::span<const real, 1u> rhs) {
118122
lhs[0] = rhs[0];
119123
}
120124

121-
inline void assign_value(std::span<real, 1u> lhs, const real rhs) {
125+
constexpr void assign_value(std::span<real, 1u> lhs, const real rhs) {
122126
lhs[0] = rhs;
123127
}
124128

125-
inline void assign_value(std::span<real> lhs, const real rhs) {
129+
constexpr void assign_value(std::span<real> lhs, const real rhs) {
126130
lhs[0] = rhs;
127131
}
128132

129-
inline void assign_value(std::span<real> lhs, const std::span<real, 1u> rhs) {
133+
constexpr void assign_value(std::span<real> lhs,
134+
const std::span<real, 1u> rhs) {
130135
lhs[0] = rhs[0];
131136
}
132137

133-
inline void assign_value(std::span<real> lhs,
134-
const std::span<const real, 1u> rhs) {
138+
constexpr void assign_value(std::span<real> lhs,
139+
const std::span<const real, 1u> rhs) {
135140
lhs[0] = rhs[0];
136141
}
137142

138-
inline void assign_value(std::span<real, 1u> lhs, const std::span<real> rhs) {
143+
constexpr void assign_value(std::span<real, 1u> lhs,
144+
const std::span<real> rhs) {
139145
lhs[0] = rhs[0];
140146
}
141147

142-
inline void assign_value(std::span<real, 1u> lhs,
143-
const std::span<const real> rhs) {
148+
constexpr void assign_value(std::span<real, 1u> lhs,
149+
const std::span<const real> rhs) {
144150
lhs[0] = rhs[0];
145151
}
146152

147-
inline void assign_value(std::span<real, 1u> lhs,
148-
const std::span<real, 1u> rhs) {
153+
constexpr void assign_value(std::span<real, 1u> lhs,
154+
const std::span<real, 1u> rhs) {
149155
lhs[0] = rhs[0];
150156
}
151157

152-
inline void assign_value(std::span<real, 1u> lhs,
153-
const std::span<const real, 1u> rhs) {
158+
constexpr void assign_value(std::span<real, 1u> lhs,
159+
const std::span<const real, 1u> rhs) {
154160
lhs[0] = rhs[0];
155161
}
156162

157-
inline void assign_value(std::span<real, 1u> lhs, const std::array<real, 1u>& rhs) {
163+
constexpr void assign_value(std::span<real, 1u> lhs,
164+
const std::array<real, 1u>& rhs) {
158165
lhs[0] = rhs[0];
159166
}
160167

161168
template <typename FunctionType, EvaluatorConcept EvaluatorType>
162-
void assign_scalar_impl(FunctionType& f, EvaluatorType e) requires(
169+
constexpr void assign_scalar_impl(FunctionType& f, EvaluatorType e) requires(
163170
(LinearElementSpaceConcept<std::decay_t<decltype(getSpace(f))>>)&&(
164171
!hasElementWorkspace<std::decay_t<decltype(getSpace(f))>>)) {
165172
using Space = std::decay_t<decltype(getSpace(f))>;
@@ -171,7 +178,7 @@ namespace mgis::function::internals {
171178
} // end of assign_scalar_impl
172179

173180
template <typename FunctionType, EvaluatorConcept EvaluatorType>
174-
void assign_scalar_impl(FunctionType& f, EvaluatorType e) requires(
181+
constexpr void assign_scalar_impl(FunctionType& f, EvaluatorType e) requires(
175182
(LinearElementSpaceConcept<std::decay_t<decltype(getSpace(f))>>)&&(
176183
hasElementWorkspace<std::decay_t<decltype(getSpace(f))>>)) {
177184
using Space = std::decay_t<decltype(getSpace(f))>;
@@ -184,7 +191,7 @@ namespace mgis::function::internals {
184191
} // end of assign_scalar_impl
185192

186193
template <typename FunctionType, EvaluatorConcept EvaluatorType>
187-
void assign_impl(FunctionType& f, EvaluatorType e) requires(
194+
constexpr void assign_impl(FunctionType& f, EvaluatorType e) requires(
188195
(LinearElementSpaceConcept<std::decay_t<decltype(getSpace(f))>>)&&(
189196
!hasElementWorkspace<std::decay_t<decltype(getSpace(f))>>)) {
190197
using Space = std::decay_t<decltype(getSpace(f))>;
@@ -206,7 +213,7 @@ namespace mgis::function::internals {
206213
} // end of assign_impl
207214

208215
template <typename FunctionType, EvaluatorConcept EvaluatorType>
209-
void assign_impl(FunctionType& f, EvaluatorType e) requires(
216+
constexpr void assign_impl(FunctionType& f, EvaluatorType e) requires(
210217
(LinearElementSpaceConcept<std::decay_t<decltype(getSpace(f))>>)&&(
211218
hasElementWorkspace<std::decay_t<decltype(getSpace(f))>>)) {
212219
using Space = std::decay_t<decltype(getSpace(f))>;
@@ -233,9 +240,9 @@ namespace mgis::function::internals {
233240
namespace mgis::function {
234241

235242
template <typename FunctionType, EvaluatorConcept EvaluatorType>
236-
bool assign(Context& ctx,
237-
FunctionType& f,
238-
EvaluatorType e) //
243+
constexpr bool assign(AbstractErrorHandler& ctx,
244+
FunctionType& f,
245+
EvaluatorType e) //
239246
requires(((LinearElementSpaceConcept<std::decay_t<
240247
decltype(getSpace(std::declval<EvaluatorType>()))>>) ||
241248
(LinearQuadratureSpaceConcept<std::decay_t<
@@ -266,7 +273,7 @@ namespace mgis::function {
266273
} // end of assign
267274

268275
template <EvaluatorConcept EvaluatorType, typename OperatorType>
269-
[[nodiscard]] std::optional<real> scalar_reduce(Context& ctx,
276+
[[nodiscard]] std::optional<real> scalar_reduce(AbstractErrorHandler& ctx,
270277
EvaluatorType e,
271278
const OperatorType op,
272279
const real initial_value) //

include/MGIS/Function/BinaryOperationEvaluatorBase.hxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#ifndef LIB_MGIS_FUNCTION_BINARYOPERATIONEVALUATORBASE_HXX
99
#define LIB_MGIS_FUNCTION_BINARYOPERATIONEVALUATORBASE_HXX
1010

11-
#include "MGIS/Context.hxx"
11+
#include "MGIS/AbstractErrorHandler.hxx"
1212
#include "MGIS/Function/SpaceConcept.hxx"
1313
#include "MGIS/Function/Evaluator.hxx"
1414

@@ -66,7 +66,7 @@ namespace mgis::function {
6666
//! \brief move constructor
6767
constexpr BinaryOperationEvaluatorBase(BinaryOperationEvaluatorBase&&);
6868
//! \brief perform consistency checks
69-
bool check(Context&) const;
69+
constexpr bool check(AbstractErrorHandler&) const;
7070
//! \brief allocate internal workspace
7171
constexpr void allocateWorkspace();
7272
//! \brief return the underlying space

include/MGIS/Function/BinaryOperationEvaluatorBase.ixx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ namespace mgis::function {
5050
EvaluatorConcept SecondEvaluatorType>
5151
requires(BinaryOperationEvaluatorBaseRequirement<FirstEvaluatorType,
5252
SecondEvaluatorType>) //
53-
bool BinaryOperationEvaluatorBase<
53+
constexpr bool BinaryOperationEvaluatorBase<
5454
Child,
5555
FirstEvaluatorType,
56-
SecondEvaluatorType>::check(Context& ctx) const {
56+
SecondEvaluatorType>::check(AbstractErrorHandler& ctx) const {
5757
if (!checkMatchingSpaces(ctx, this->first_evaluator,
5858
this->second_evaluator)) {
5959
return false;

include/MGIS/Function/Evaluator.hxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include <type_traits>
1212
#include "MGIS/Config.hxx"
13-
#include "MGIS/Context.hxx"
13+
#include "MGIS/AbstractErrorHandler.hxx"
1414
#include "MGIS/Function/SpaceConcept.hxx"
1515
#include "MGIS/Function/CompileTimeSize.hxx"
1616
#include "MGIS/Function/EvaluatorConcept.hxx"
@@ -25,9 +25,9 @@ namespace mgis::function {
2525
* \param[in] e1: first evaluator
2626
* \param[in] e2: second evaluator
2727
*/
28-
bool checkMatchingSpaces(Context&,
29-
const EvaluatorConcept auto&,
30-
const EvaluatorConcept auto&);
28+
constexpr bool checkMatchingSpaces(AbstractErrorHandler&,
29+
const EvaluatorConcept auto&,
30+
const EvaluatorConcept auto&);
3131

3232
} // end of namespace mgis::function
3333

include/MGIS/Function/Evaluator.ixx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
namespace mgis::function {
1212

13-
bool checkMatchingSpaces(Context& ctx,
14-
const EvaluatorConcept auto& e1,
15-
const EvaluatorConcept auto& e2) {
13+
constexpr bool checkMatchingSpaces(AbstractErrorHandler& ctx,
14+
const EvaluatorConcept auto& e1,
15+
const EvaluatorConcept auto& e2) {
1616
const auto& qspace1 = getSpace(e1);
1717
const auto& qspace2 = getSpace(e2);
1818
if (!areEquivalent(qspace1, qspace2)) {

include/MGIS/Function/EvaluatorModifierBase.hxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace mgis::function {
3333
//! \brief move constructor
3434
constexpr EvaluatorModifierBase(EvaluatorModifierBase&&);
3535
//! \brief perform consistency checks
36-
bool check(Context&) const;
36+
constexpr bool check(AbstractErrorHandler&) const;
3737
//! \brief allocate internal workspace
3838
constexpr void allocateWorkspace();
3939
//! \brief return the underlying space

include/MGIS/Function/EvaluatorModifierBase.ixx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ namespace mgis::function {
2424
EvaluatorModifierBase&&) = default;
2525

2626
template <typename Child, EvaluatorConcept EvaluatorType>
27-
bool EvaluatorModifierBase<Child, EvaluatorType>::check(Context& ctx) const {
27+
constexpr bool EvaluatorModifierBase<Child, EvaluatorType>::check(
28+
AbstractErrorHandler& ctx) const {
2829
return this->evaluator.check(ctx);
2930
} // end of check
3031

include/MGIS/Function/FixedSizeModifier.hxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace mgis::function {
4848
constexpr FixedSizeModifier(const PreconditionsCheck<doPreconditionsCheck>&,
4949
const EvaluatorType&);
5050
//! \brief perform consistency checks
51-
bool check(Context&) const noexcept;
51+
constexpr bool check(AbstractErrorHandler&) const noexcept;
5252
//! \brief allocate internal workspace
5353
constexpr void allocateWorkspace();
5454
//! \brief return the underlying space

include/MGIS/Function/FixedSizeModifier.ixx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ namespace mgis::function {
4040

4141
template <EvaluatorConcept EvaluatorType, size_type N>
4242
requires(N > 0) //
43-
bool FixedSizeModifier<EvaluatorType, N>::check(
44-
Context& ctx) const noexcept {
43+
constexpr bool FixedSizeModifier<EvaluatorType, N>::check(
44+
AbstractErrorHandler& ctx) const noexcept {
4545
return checkPreconditions(ctx, this->evaluator);
4646
}
4747

0 commit comments

Comments
 (0)