LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{quantity.cpp} 命名空间参考

类

struct  QuantityView

函数

Result< void > checked_binary (const std::shared_ptr< SymbolicExpr > &lhs, const std::shared_ptr< SymbolicExpr > &rhs, ComputationContext &context, const char *name)
Result< Rational > exact_rational (const std::shared_ptr< const SymbolicNode > &node)
QuantityResult failure (CasErrc code, std::string message)
QuantityResult make_quantity (std::shared_ptr< const SymbolicNode > value, DimensionSignature dimension, Rational scale, std::string display)
std::shared_ptr< const SymbolicNode > rational_node (const Rational &value)
std::shared_ptr< const SymbolicNode > scaled_value (const QuantityView &quantity)
QuantityView view (const std::shared_ptr< SymbolicExpr > &expression)

变量

constexpr const char * kOperation = "quantity"

类说明

◆ LMCAS::anonymous_namespace{quantity.cpp}::QuantityView

struct LMCAS::anonymous_namespace{quantity.cpp}::QuantityView

在文件 quantity.cpp 第 13 行定义.

LMCAS::anonymous_namespace{quantity.cpp}::QuantityView 的协作图:
类成员
DimensionSignature dimension
string display
Rational scale = Rational(1)
shared_ptr< const SymbolicNode > value

函数说明

◆ checked_binary()

Result< void > LMCAS::anonymous_namespace{quantity.cpp}::checked_binary ( const std::shared_ptr< SymbolicExpr > & lhs,
const std::shared_ptr< SymbolicExpr > & rhs,
ComputationContext & context,
const char * name )

在文件 quantity.cpp 第 76 行定义.

79 {
80 auto step = context.consume_steps(1, name);
81 if (!step) return step;
82 if (!lhs || !rhs || !detail::node(lhs) || !detail::node(rhs)) {
84 "quantity operands cannot be null", kOperation);
85 }
86 return Result<void>::success();
87}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
const ExprPtr & rhs
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name

引用了 checked_binary(), LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, kOperation, LMCAS::name, LMCAS::detail::node(), LMCAS::rhs , 以及 LMCAS::Result< T >::success().

被这些函数引用 checked_binary().

函数调用图:
这是这个函数的调用关系图:

◆ exact_rational()

Result< Rational > LMCAS::anonymous_namespace{quantity.cpp}::exact_rational ( const std::shared_ptr< const SymbolicNode > & node)

在文件 quantity.cpp 第 62 行定义.

62 {
63 auto number = std::dynamic_pointer_cast<const NumberNode>(node);
64 if (!number) return Result<Rational>::failure(
65 CasErrc::UnitInvalid, "quantity exponent must be an exact rational", kOperation);
66 if (std::holds_alternative<BigInt>(number->value())) {
67 return Result<Rational>::success(Rational(std::get<BigInt>(number->value())));
68 }
69 if (std::holds_alternative<Rational>(number->value())) {
70 return Result<Rational>::success(std::get<Rational>(number->value()));
71 }
73 CasErrc::UnitInvalid, "approximate quantity exponents are not supported", kOperation);
74}

引用了 exact_rational(), LMCAS::Result< T >::failure(), kOperation, LMCAS::Result< T >::success() , 以及 LMCAS::UnitInvalid.

被这些函数引用 exact_rational().

函数调用图:
这是这个函数的调用关系图:

◆ failure()

QuantityResult LMCAS::anonymous_namespace{quantity.cpp}::failure ( CasErrc code,
std::string message )

在文件 quantity.cpp 第 20 行定义.

20 {
21 return QuantityResult::failure(code, std::move(message), kOperation);
22}

引用了 failure(), LMCAS::Result< std::shared_ptr< SymbolicExpr > >::failure() , 以及 kOperation.

被这些函数引用 failure() , 以及 make_quantity().

函数调用图:
这是这个函数的调用关系图:

◆ make_quantity()

QuantityResult LMCAS::anonymous_namespace{quantity.cpp}::make_quantity ( std::shared_ptr< const SymbolicNode > value,
DimensionSignature dimension,
Rational scale,
std::string display )

在文件 quantity.cpp 第 41 行定义.

44 {
45 try {
46 if (dimension.is_dimensionless()) {
48 scale == Rational(1)
49 ? std::move(value)
51 }
53 detail::make_node<QuantityNode>(std::move(value), std::move(dimension),
54 std::move(scale), std::move(display))));
55 } catch (const std::bad_alloc&) {
56 return failure(CasErrc::ResourceLimit, "quantity allocation failed");
57 } catch (const std::exception& error) {
58 return failure(CasErrc::InvalidArgument, error.what());
59 }
60}
static std::shared_ptr< const SymbolicNode > create_multiply(std::vector< std::shared_ptr< const SymbolicNode > > ops, detail::RewriteBudget *budget=nullptr)
创建乘法节点,自动扁平化嵌套乘法并消除单位元.
std::shared_ptr< const SymbolicNode > rational_node(const Rational &value)
QuantityResult failure(CasErrc code, std::string message)
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
std::shared_ptr< const Node > make_node(Args &&... args)
const std::string const ExprPtr & value

引用了 LMCAS::SymbolicFactory::create_multiply(), failure(), LMCAS::InvalidArgument, LMCAS::detail::make_expression_ptr(), LMCAS::detail::make_node(), make_quantity(), rational_node(), LMCAS::ResourceLimit, LMCAS::Result< std::shared_ptr< SymbolicExpr > >::success() , 以及 LMCAS::value.

被这些函数引用 make_quantity().

函数调用图:
这是这个函数的调用关系图:

◆ rational_node()

std::shared_ptr< const SymbolicNode > LMCAS::anonymous_namespace{quantity.cpp}::rational_node ( const Rational & value)

在文件 quantity.cpp 第 32 行定义.

32 {
34}
static std::shared_ptr< const SymbolicNode > create_number(const ::LMCAS::BigInt &v)

引用了 LMCAS::SymbolicFactory::create_number(), rational_node() , 以及 LMCAS::value.

被这些函数引用 make_quantity(), rational_node() , 以及 scaled_value().

函数调用图:
这是这个函数的调用关系图:

◆ scaled_value()

std::shared_ptr< const SymbolicNode > LMCAS::anonymous_namespace{quantity.cpp}::scaled_value ( const QuantityView & quantity)

在文件 quantity.cpp 第 36 行定义.

36 {
37 if (quantity.scale == Rational(1)) return quantity.value;
38 return SymbolicFactory::create_multiply({quantity.value, rational_node(quantity.scale)});
39}

引用了 LMCAS::SymbolicFactory::create_multiply(), rational_node(), LMCAS::anonymous_namespace{quantity.cpp}::QuantityView::scale, scaled_value() , 以及 LMCAS::anonymous_namespace{quantity.cpp}::QuantityView::value.

被这些函数引用 scaled_value().

函数调用图:
这是这个函数的调用关系图:

◆ view()

QuantityView LMCAS::anonymous_namespace{quantity.cpp}::view ( const std::shared_ptr< SymbolicExpr > & expression)

在文件 quantity.cpp 第 24 行定义.

24 {
25 if (auto quantity = std::dynamic_pointer_cast<const QuantityNode>(detail::node(expression))) {
26 return {quantity->value(), quantity->dimension(), quantity->scale_to_base(),
27 quantity->display_unit()};
28 }
29 return {detail::node(expression), DimensionSignature{}, Rational(1), {}};
30}
@ Rational
Rational numbers

引用了 LMCAS::detail::node() , 以及 view().

被这些函数引用 view().

函数调用图:
这是这个函数的调用关系图:

变量说明

◆ kOperation

const char* LMCAS::anonymous_namespace{quantity.cpp}::kOperation = "quantity"
constexpr

在文件 quantity.cpp 第 11 行定义.

被这些函数引用 checked_binary(), exact_rational() , 以及 failure().