tinyopt
700
Tinyopt, a lightweight, header only optimization library
Toggle main menu visibility
Loading...
Searching...
No Matches
params_wrapper.h
1
// Copyright 2026 Julien Michot.
2
// SPDX-License-Identifier: Apache-2.0
3
4
#pragma once
5
6
#include <type_traits>
7
#include <utility>
8
9
#include <tinyopt/traits/parameter_traits.h>
10
11
namespace
tinyopt {
12
13
template
<
typename
Params>
14
class
ParamsWrapper {
15
public
:
16
using
WrappedParams = std::remove_cvref_t<Params>;
17
using
Scalar =
typename
traits::params_trait<WrappedParams>::Scalar;
18
static
constexpr
Index Dims = Dynamic;
19
20
explicit
ParamsWrapper(Params params) : params(std::forward<Params>(params)) {}
21
22
[[nodiscard]] Index dims()
const
{
23
if
constexpr
(traits::params_trait<WrappedParams>::Dims == Dynamic)
24
return
traits::params_trait<WrappedParams>::dims(params);
25
else
26
return
traits::params_trait<WrappedParams>::Dims;
27
}
28
29
template
<
typename
T>
30
[[nodiscard]]
auto
cast()
const
{
31
auto
casted =
traits::params_trait<WrappedParams>::template
cast<T>(params);
32
using
CastParams = std::decay_t<
decltype
(casted)>;
33
return
ParamsWrapper<CastParams>(std::move(casted));
34
}
35
36
ParamsWrapper& operator+=(
const
auto
& delta) {
37
params += delta;
38
return
*
this
;
39
}
40
41
Params params;
42
};
43
44
}
// namespace tinyopt
tinyopt::traits::params_trait
Definition
parameter_traits.h:15
include
tinyopt
params_wrapper.h
Generated by
1.18.0