LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::NumberNode类 参考

#include </home/runner/work/docs/docs/LMCAS/src/internal/symbolic_ast/numbers.hpp>

类 LMCAS::NumberNode 继承关系图:
LMCAS::NumberNode 的协作图:

Public 成员函数

void accept (LMCAS::detail::SymbolicVisitor &visitor) const override
std::shared_ptr< const SymbolicNode > clone () const override
int compare (const SymbolicNode &other) const
 与另一个节点进行全序比较.
bool equals (const SymbolicNode &other) const
 判断两个节点是否结构相等.
std::size_t hash () const
 获取节点哈希值(带缓存).
bool is_negative_one () const
bool is_number () const override
bool is_one () const override
bool is_positive () const override
bool is_zero () const override
int type_priority () const override
const std::variant< BigInt, Rational > & value () const noexcept

Protected 成员函数

int compare_same_type (const SymbolicNode &other) const override
std::size_t compute_hash () const override

Protected 属性

std::atomic< std::size_t > cached_hash {0}
std::atomic< bool > hash_computed {false}

Private 成员函数

 NumberNode (const BigInt &v)
 NumberNode (const Rational &v)
 NumberNode (lmmc_real_t v)
 NumberNode (std::variant< BigInt, Rational > v)

Private 属性

 LMCAS_AST_NODE_FACTORY_FRIEND
const std::variant< BigInt, Rational > value_

详细描述

在文件 numbers.hpp 第 8 行定义.

构造及析构函数说明

◆ NumberNode() [1/4]

LMCAS::NumberNode::NumberNode ( const BigInt & v)
inlineexplicitprivate

在文件 numbers.hpp 第 14 行定义.

14: value_(v) {}
const std::variant< BigInt, Rational > value_
__attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::string & v

引用了 LMCAS::v , 以及 value_.

被这些函数引用 compare_same_type().

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

◆ NumberNode() [2/4]

LMCAS::NumberNode::NumberNode ( const Rational & v)
inlineexplicitprivate

在文件 numbers.hpp 第 15 行定义.

15: value_(v) {}

引用了 LMCAS::v , 以及 value_.

◆ NumberNode() [3/4]

LMCAS::NumberNode::NumberNode ( lmmc_real_t v)
explicitprivate

在文件 symbolic_construction.cpp 第 28 行定义.

const std::variant< BigInt, Rational > & value() const noexcept

引用了 value() , 以及 value_.

函数调用图:

◆ NumberNode() [4/4]

LMCAS::NumberNode::NumberNode ( std::variant< BigInt, Rational > v)
inlineexplicitprivate

在文件 numbers.hpp 第 17 行定义.

18 : value_(std::move(v)) {}

引用了 LMCAS::v , 以及 value_.

成员函数说明

◆ accept()

void LMCAS::NumberNode::accept ( LMCAS::detail::SymbolicVisitor & visitor) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 numbers.hpp 第 38 行定义.

38{ LMCAS::detail::SymbolicVisitor::DepthGuard guard(visitor); visitor.visit(*this); }
virtual void visit(const NumberNode &node)=0

引用了 LMCAS::detail::SymbolicVisitor::visit().

函数调用图:

◆ clone()

std::shared_ptr< const SymbolicNode > LMCAS::NumberNode::clone ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 numbers.hpp 第 39 行定义.

39 {
40
41 if (std::holds_alternative<BigInt>(value_)) {
42 return LMCAS::detail::make_node<NumberNode>(std::get<BigInt>(value_));
43 }
44 return LMCAS::detail::make_node<NumberNode>(std::get<Rational>(value_));
45 }
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 LMCAS::detail::make_node() , 以及 value_.

函数调用图:

◆ compare()

int LMCAS::SymbolicNode::compare ( const SymbolicNode & other) const
inlineinherited

与另一个节点进行全序比较.

参数
other待比较的节点
返回
小于返回 -1,等于返回 0,大于返回 1

在文件 base.hpp 第 183 行定义.

183 {
184 if (type_priority() != other.type_priority()) {
185 return type_priority() < other.type_priority() ? -1 : 1;
186 }
187 return compare_same_type(other);
188 }
virtual int compare_same_type(const SymbolicNode &other) const =0
virtual int type_priority() const =0

引用了 SymbolicNode(), compare_same_type() , 以及 type_priority().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_cancel.cpp}::combine_fraction_terms() , 以及 LMCAS::endpoints_equivalent().

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

◆ compare_same_type()

int LMCAS::NumberNode::compare_same_type ( const SymbolicNode & other) const
overrideprotectedvirtual

实现了 LMCAS::SymbolicNode.

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

36 {
37 const auto& right = static_cast<const NumberNode&>(other);
38 return compare_exact_nodes(*this, right);
39}
NumberNode(const BigInt &v)
int compare_exact_nodes(const NumberNode &left, const NumberNode &right)
const ExprPtr & right

引用了 NumberNode(), LMCAS::SymbolicNode::SymbolicNode() , 以及 LMCAS::right.

函数调用图:

◆ compute_hash()

std::size_t LMCAS::NumberNode::compute_hash ( ) const
inlineoverrideprotectedvirtual

实现了 LMCAS::SymbolicNode.

在文件 numbers.hpp 第 28 行定义.

28 {
29 if (std::holds_alternative<Rational>(value_)) {
30 return std::get<Rational>(value_).hash();
31 }
32 return Rational(std::get<BigInt>(value_)).hash();
33 }
@ Rational
Rational numbers

引用了 value_.

◆ equals()

bool LMCAS::SymbolicNode::equals ( const SymbolicNode & other) const
inlineinherited

判断两个节点是否结构相等.

参数
other待比较的节点
返回
相等返回 true

在文件 base.hpp 第 195 行定义.

195 {
196 if (this == &other) return true;
197 if (hash() != other.hash()) return false;
198 if (type_priority() != other.type_priority()) return false;
199 return compare_same_type(other) == 0;
200 }
std::size_t hash() const
获取节点哈希值(带缓存).

引用了 SymbolicNode(), compare_same_type(), hash() , 以及 type_priority().

被这些函数引用 LMCAS::complementary_square(), LMCAS::anonymous_namespace{relation_store.cpp}::expr_equals(), LMCAS::match_recursive(), LMCAS::tf_remove_exp_factor() , 以及 LMCAS::tf_substitute_expr().

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

◆ hash()

std::size_t LMCAS::SymbolicNode::hash ( ) const
inlineinherited

获取节点哈希值(带缓存).

返回
哈希值

在文件 base.hpp 第 168 行定义.

168 {
169 if (!hash_computed.load(std::memory_order_acquire)) {
170 std::size_t h = compute_hash();
171 cached_hash.store(h, std::memory_order_relaxed);
172 hash_computed.store(true, std::memory_order_release);
173 return h;
174 }
175 return cached_hash.load(std::memory_order_relaxed);
176 }
virtual std::size_t compute_hash() const =0
std::atomic< std::size_t > cached_hash
std::atomic< bool > hash_computed

引用了 cached_hash, compute_hash() , 以及 hash_computed.

被这些函数引用 LMCAS::MatrixNode::compute_hash(), LMCAS::VariableNode::compute_hash() , 以及 equals().

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

◆ is_negative_one()

bool LMCAS::NumberNode::is_negative_one ( ) const

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

41 {
42 if (const auto* integer = std::get_if<BigInt>(&value_)) {
43 const auto narrowed = integer->try_to_int64();
44 return narrowed && *narrowed == -1;
45 }
46 return std::get<Rational>(value_) == Rational(-1);
47}
ExprResult integer(Integer)=delete

引用了 LMCAS::integer , 以及 value_.

◆ is_number()

bool LMCAS::NumberNode::is_number ( ) const
inlineoverridevirtual

重载 LMCAS::SymbolicNode .

在文件 numbers.hpp 第 47 行定义.

47{ return true; }

◆ is_one()

bool LMCAS::NumberNode::is_one ( ) const
inlineoverridevirtual

重载 LMCAS::SymbolicNode .

在文件 numbers.hpp 第 55 行定义.

55 {
56 if (std::holds_alternative<BigInt>(value_)) {
57 return std::get<BigInt>(value_) == BigInt(1);
58 }
59 return std::get<Rational>(value_) == Rational(1);
60 }

引用了 value_.

◆ is_positive()

bool LMCAS::NumberNode::is_positive ( ) const
inlineoverridevirtual

重载 LMCAS::SymbolicNode .

在文件 numbers.hpp 第 62 行定义.

62 {
63 if (std::holds_alternative<BigInt>(value_)) {
64 const auto& b = std::get<BigInt>(value_);
65 return !b.is_negative() && !(b == BigInt(0));
66 }
67 return std::get<Rational>(value_) > Rational(0);
68 }
const MultiPoly & b

引用了 LMCAS::b , 以及 value_.

◆ is_zero()

bool LMCAS::NumberNode::is_zero ( ) const
inlineoverridevirtual

重载 LMCAS::SymbolicNode .

在文件 numbers.hpp 第 48 行定义.

48 {
49
50 if (std::holds_alternative<BigInt>(value_)) {
51 return std::get<BigInt>(value_) == BigInt(0);
52 }
53 return std::get<Rational>(value_) == Rational(0);
54 }

引用了 value_.

◆ type_priority()

int LMCAS::NumberNode::type_priority ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 numbers.hpp 第 25 行定义.

25{ return -10; }

◆ value()

const std::variant< BigInt, Rational > & LMCAS::NumberNode::value ( ) const
inlinenoexcept

在文件 numbers.hpp 第 21 行定义.

21 {
22 return value_;
23 }

引用了 value_.

被这些函数引用 NumberNode(), LMCAS::bernoulli_integer_exponent(), LMCAS::detail::anonymous_namespace{interval_endpoint.cpp}::comparable_number(), LMCAS::anonymous_namespace{symbolic_number_order.cpp}::compare_exact_nodes(), LMCAS::anonymous_namespace{symbolic_number_order.cpp}::compare_exact_to_rational(), LMCAS::anonymous_namespace{expr_number_domains.cpp}::domain_contains_number(), LMCAS::detail::exact_rational_value(), LMCAS::anonymous_namespace{normalization_numeric_powers.cpp}::half_numeric_power(), LMCAS::integration_bounded_exponent(), LMCAS::is_negative_infinity_coefficient(), LMCAS::normalization_exact_square_root(), LMCAS::anonymous_namespace{normalization_numeric_functions.cpp}::numeric_absolute(), LMCAS::anonymous_namespace{normalization_signs.cpp}::positive_negative_number(), LMCAS::anonymous_namespace{normalization_numeric_powers.cpp}::reciprocal_exact_number(), LMCAS::anonymous_namespace{rational_polynomial_recognition.cpp}::recognize_number(), LMCAS::detail::inequality_support::anonymous_namespace{inequality_solver_ordering.cpp}::root_number_sign(), LMCAS::detail::series_support::series_number_value(), LMCAS::anonymous_namespace{normalization_numeric_powers.cpp}::small_exact_power(), LMCAS::solver_detail::solver_number_value(), LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit() , 以及 LMCAS::detail::RewriteBudget::Measurement::visit().

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

类成员变量说明

◆ cached_hash

std::atomic<std::size_t> LMCAS::SymbolicNode::cached_hash {0}
mutableprotectedinherited

在文件 base.hpp 第 149 行定义.

被这些函数引用 SymbolicNode() , 以及 hash().

◆ hash_computed

std::atomic<bool> LMCAS::SymbolicNode::hash_computed {false}
mutableprotectedinherited

在文件 base.hpp 第 150 行定义.

被这些函数引用 SymbolicNode() , 以及 hash().

◆ LMCAS_AST_NODE_FACTORY_FRIEND

LMCAS::NumberNode::LMCAS_AST_NODE_FACTORY_FRIEND
private

在文件 numbers.hpp 第 10 行定义.

◆ value_

const std::variant<BigInt, Rational> LMCAS::NumberNode::value_
private

该类的文档由以下文件生成: