5#include <guanaqo/demangled-typename.hpp>
6#include <guanaqo/dl.hpp>
13#if ALPAQA_WITH_EXTERNAL_CASADI
14#include <casadi/core/casadi_types.hpp>
21using guanaqo::dynamic_load_error;
26template <
class Loader,
class F>
27auto wrap_load(Loader &&loader,
const char *name, F f) {
31 throw std::invalid_argument(
32 "Unable to load function '" + loader.format_name(name) +
33 "': " + guanaqo::demangled_typename(
typeid(e)) +
": " + e.what());
37template <
class T,
class Loader,
class... Args>
38auto wrapped_load(Loader &&loader,
const char *name, Args &&...args) {
40 return T(loader(name), std::forward<Args>(args)...);
44template <
class T,
class Loader,
class... Args>
45std::optional<T>
try_load(Loader &&loader,
const char *name, Args &&...args) {
48 std::forward<Loader>(loader), name, std::forward<Args>(args)...));
49#if ALPAQA_WITH_EXTERNAL_CASADI
50 }
catch (casadi::CasadiException &) {
53 }
catch (dynamic_load_error &) {
56 }
catch (std::out_of_range &) {
62using dim = std::pair<casadi_int, casadi_int>;
63inline constexpr auto dims(
auto... a) {
64 if constexpr ((... && std::is_constructible_v<
dim,
decltype(a)>))
65 return std::array{a...};
67 return std::array{
dim{a, 1}...};
#define BEGIN_ALPAQA_CASADI_LOADER_NAMESPACE
#define END_ALPAQA_CASADI_LOADER_NAMESPACE
auto wrapped_load(Loader &&loader, const char *name, Args &&...args)
std::optional< T > try_load(Loader &&loader, const char *name, Args &&...args)
constexpr auto dims(auto... a)
std::pair< casadi_int, casadi_int > dim
auto wrap_load(Loader &&loader, const char *name, F f)