LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
expr_serialization_common.hpp
浏览该文件的文档.
1
#pragma once
2
3
#include "
computation_context.hpp
"
4
#include "
conditional_result.hpp
"
5
#include "
internal/symbolic_ast.hpp
"
6
7
#include <array>
8
#include <string_view>
9
10
namespace
LMCAS::serialization_detail
{
11
12
inline
constexpr
std::string_view
kHeader
=
"LMCAS_EXPR/1\n"
;
13
inline
constexpr
const
char
*
kEncode
=
"LMCAS.serialize_expr"
;
14
inline
constexpr
const
char
*
kDecode
=
"LMCAS.parse_serialized_expr"
;
15
using
NodePtr
=
detail::SymbolicNodePtr
;
16
17
// These names, not the C++ enum ordinals, are the wire values.
18
inline
constexpr
std::array<std::string_view, 36>
kFunctions
= {
19
"sin"
,
"cos"
,
"tan"
,
"cot"
,
"sec"
,
"csc"
,
"asin"
,
"acos"
,
"atan"
,
20
"sinh"
,
"cosh"
,
"tanh"
,
"ln"
,
"log"
,
"abs"
,
"sqrt"
,
"exp"
,
21
"lambert_w"
,
"atan2"
,
"infinity"
,
"erf"
,
"ei"
,
"si"
,
"ci"
,
"li"
,
22
"max"
,
"min"
,
"sgn"
,
"floor"
,
"ceil"
,
"round"
,
"real"
,
"imag"
,
23
"conjugate"
,
"complex_abs"
,
"complex_arg"
24
};
25
inline
constexpr
std::array<std::string_view, 6>
kRelations
= {
26
"eq"
,
"neq"
,
"lt"
,
"gt"
,
"leq"
,
"geq"
27
};
28
inline
constexpr
std::array<std::string_view, 4>
kLogic
= {
29
"and"
,
"or"
,
"not"
,
"implies"
30
};
31
inline
constexpr
std::array<std::string_view, 5>
kTransforms
= {
32
"laplace"
,
"inverse_laplace"
,
"fourier"
,
"inverse_fourier"
,
"z"
33
};
34
inline
constexpr
std::array<std::string_view, 2>
kQuantifiers
= {
"forall"
,
"exists"
};
35
inline
constexpr
std::array<std::string_view, 3>
kDirections
= {
36
"both"
,
"below"
,
"above"
37
};
38
39
template
<
typename
Enum, std::
size_t
N>
40
std::string_view
enum_name
(Enum
value
,
const
std::array<std::string_view, N>& names,
41
const
char
* operation) {
42
auto
index =
static_cast<
std::size_t
>
(
value
);
43
if
(index >= names.size()) {
44
throw
CasError
{
CasErrc::UnsupportedExpression
,
"unsupported expression operator"
, operation};
45
}
46
return
names[index];
47
}
48
49
inline
void
check
(
Result<void>
result) {
50
if
(!result)
throw
result.
error
();
51
}
52
53
class
Recursion
{
54
public
:
55
Recursion
(
ComputationContext
&
context
,
const
char
* operation)
56
:
context_
(
context
) {
57
check
(
context_
.
enter_recursion
(operation));
58
}
59
~Recursion
() {
context_
.
leave_recursion
(); }
60
Recursion
(
const
Recursion
&) =
delete
;
61
Recursion
&
operator=
(
const
Recursion
&) =
delete
;
62
private
:
63
ComputationContext
&
context_
;
64
};
65
66
}
// namespace LMCAS::serialization_detail
LMCAS::ComputationContext
定义
computation_context.hpp:99
LMCAS::ComputationContext::leave_recursion
void leave_recursion() noexcept
定义
computation_context.hpp:136
LMCAS::ComputationContext::enter_recursion
Result< void > enter_recursion(const std::string &operation={})
定义
computation_context.hpp:125
LMCAS::Result
定义
result.hpp:39
LMCAS::Result::error
CasError & error()
定义
result.hpp:77
LMCAS::serialization_detail::Recursion::Recursion
Recursion(const Recursion &)=delete
LMCAS::serialization_detail::Recursion::context_
ComputationContext & context_
定义
expr_serialization_common.hpp:63
LMCAS::serialization_detail::Recursion::~Recursion
~Recursion()
定义
expr_serialization_common.hpp:59
LMCAS::serialization_detail::Recursion::Recursion
Recursion(ComputationContext &context, const char *operation)
定义
expr_serialization_common.hpp:55
LMCAS::serialization_detail::Recursion::operator=
Recursion & operator=(const Recursion &)=delete
computation_context.hpp
conditional_result.hpp
LMCAS::detail::SymbolicNodePtr
std::shared_ptr< const SymbolicNode > SymbolicNodePtr
定义
base.hpp:73
LMCAS::serialization_detail
定义
expr_serialization_common.hpp:10
LMCAS::serialization_detail::enum_name
std::string_view enum_name(Enum value, const std::array< std::string_view, N > &names, const char *operation)
定义
expr_serialization_common.hpp:40
LMCAS::serialization_detail::kFunctions
constexpr std::array< std::string_view, 36 > kFunctions
定义
expr_serialization_common.hpp:18
LMCAS::serialization_detail::NodePtr
detail::SymbolicNodePtr NodePtr
定义
expr_serialization_common.hpp:15
LMCAS::serialization_detail::kTransforms
constexpr std::array< std::string_view, 5 > kTransforms
定义
expr_serialization_common.hpp:31
LMCAS::serialization_detail::kDirections
constexpr std::array< std::string_view, 3 > kDirections
定义
expr_serialization_common.hpp:35
LMCAS::serialization_detail::kEncode
constexpr const char * kEncode
定义
expr_serialization_common.hpp:13
LMCAS::serialization_detail::kHeader
constexpr std::string_view kHeader
定义
expr_serialization_common.hpp:12
LMCAS::serialization_detail::kRelations
constexpr std::array< std::string_view, 6 > kRelations
定义
expr_serialization_common.hpp:25
LMCAS::serialization_detail::kQuantifiers
constexpr std::array< std::string_view, 2 > kQuantifiers
定义
expr_serialization_common.hpp:34
LMCAS::serialization_detail::check
void check(Result< void > result)
定义
expr_serialization_common.hpp:49
LMCAS::serialization_detail::kDecode
constexpr const char * kDecode
定义
expr_serialization_common.hpp:14
LMCAS::serialization_detail::kLogic
constexpr std::array< std::string_view, 4 > kLogic
定义
expr_serialization_common.hpp:28
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
LMCAS::CasErrc::UnsupportedExpression
@ UnsupportedExpression
定义
result.hpp:23
LMCAS::value
const std::string const ExprPtr & value
定义
expr.hpp:293
LMCAS::CasError
定义
result.hpp:31
symbolic_ast.hpp
内部 AST 定义。
src
internal
expr_serialization_common.hpp
生成于
, 为 LMCAS使用
1.18.0