Ultra 0.9.4
Loading...
Searching...
No Matches
function.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_FUNCTION_H)
14#define ULTRA_FUNCTION_H
15
16#include "kernel/symbol.h"
17#include "kernel/value.h"
18
19#include <vector>
20
21namespace ultra
22{
43class function : public symbol
44{
45public:
49 using param_data_types = std::vector<category_t>;
50
53
54 class params;
55
56 function(const std::string &, return_type, param_data_types);
57 function(const std::string &, std::size_t);
58
59 [[nodiscard]] category_t param_category(std::size_t) const noexcept;
60 [[nodiscard]] const param_data_types &categories() const noexcept;
61
62 [[nodiscard]] std::size_t arity() const noexcept;
63
76 virtual value_t eval(const params &) const = 0;
77
89 [[nodiscard]] virtual std::string to_string(format = c_format) const override;
90
91 [[nodiscard]] bool is_valid() const override;
92
93private:
94 const param_data_types params_;
95};
96
108{
109public:
116 [[nodiscard]] virtual value_t fetch_arg(std::size_t) const = 0;
117
124 virtual value_t fetch_opaque_arg(std::size_t) const = 0;
125
130 [[nodiscard]] value_t operator[](std::size_t i) const { return fetch_arg(i); }
131
132 virtual ~params() = default;
133};
134
135} // namespace ultra
136
137#endif // include guard
Definition function.h:108
virtual value_t fetch_opaque_arg(std::size_t) const =0
value_t operator[](std::size_t i) const
Definition function.h:130
virtual value_t fetch_arg(std::size_t) const =0
const param_data_types & categories() const noexcept
Definition function.cc:83
bool is_valid() const override
Definition function.cc:110
std::vector< category_t > param_data_types
Definition function.h:49
function(const std::string &, return_type, param_data_types)
Definition function.cc:27
category_t return_type
Type used to describe the return category of the function.
Definition function.h:52
std::size_t arity() const noexcept
Definition function.cc:55
virtual value_t eval(const params &) const =0
category_t param_category(std::size_t) const noexcept
Definition function.cc:69
virtual std::string to_string(format=c_format) const override
Definition function.cc:96
format
Supported rendering formats for symbol stringification.
Definition symbol.h:72
unsigned category_t
Definition symbol.h:55
symbol(const std::string &, category_t=default_category)
Definition symbol.cc:30
STL namespace.
std::variant< D_VOID, D_INT, D_DOUBLE, D_STRING, const D_NULLARY *, D_ADDRESS, const D_VARIABLE *, D_IVECTOR > value_t
Definition value.h:54