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

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

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

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
 判断两个节点是否结构相等.
const LMCAS::detail::ExactRootId & exact_id () const noexcept
std::size_t hash () const
 获取节点哈希值(带缓存).
std::size_t index () const noexcept
virtual bool is_number () const
virtual bool is_one () const
virtual bool is_positive () const
virtual bool is_zero () const
std::shared_ptr< const SymbolicNode > polynomial () const
int type_priority () const override
const std::string & variable () 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 成员函数

 RootOfNode (LMCAS::detail::ExactRootId id, std::string display_variable="_root")

Private 属性

const std::string display_variable_
const LMCAS::detail::ExactRootId id_

友元

template<typename Node, typename... Args>
std::shared_ptr< const Node > LMCAS::detail::make_node (Args &&... args)

详细描述

在文件 special_forms.hpp 第 76 行定义.

构造及析构函数说明

◆ RootOfNode()

LMCAS::RootOfNode::RootOfNode ( LMCAS::detail::ExactRootId id,
std::string display_variable = "_root" )
inlineexplicitprivate

在文件 special_forms.hpp 第 85 行定义.

88 : id_(std::move(id)),
89 display_variable_(std::move(display_variable)) {
90 if (id_.polynomial.degree() <= 0 ||
91 id_.index >= static_cast<std::size_t>(id_.polynomial.degree()) ||
92 display_variable_.empty()) {
93 throw std::invalid_argument("RootOf identity is invalid");
94 }
95 }
int degree() const
获取多项式的次数
const std::string display_variable_
const LMCAS::detail::ExactRootId id_
Polynomial< Rational > polynomial

引用了 LMCAS::Polynomial< CoeffType >::degree(), display_variable_, id_, LMCAS::detail::ExactRootId::index , 以及 LMCAS::detail::ExactRootId::polynomial.

被这些函数引用 compare_same_type().

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

成员函数说明

◆ accept()

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

实现了 LMCAS::SymbolicNode.

在文件 special_forms.hpp 第 144 行定义.

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

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

函数调用图:

◆ clone()

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

实现了 LMCAS::SymbolicNode.

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

149 {
152 }
std::shared_ptr< const Node > make_node(Args &&... args)

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

函数调用图:

◆ 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::RootOfNode::compare_same_type ( const SymbolicNode & other) const
inlineoverrideprotectedvirtual

实现了 LMCAS::SymbolicNode.

在文件 special_forms.hpp 第 139 行定义.

139 {
140 return id_.compare(static_cast<const RootOfNode&>(other).id_);
141 }
RootOfNode(LMCAS::detail::ExactRootId id, std::string display_variable="_root")
int compare(const ExactRootId &other) const

引用了 RootOfNode(), LMCAS::SymbolicNode::SymbolicNode(), LMCAS::detail::ExactRootId::compare() , 以及 id_.

函数调用图:

◆ compute_hash()

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

实现了 LMCAS::SymbolicNode.

在文件 special_forms.hpp 第 133 行定义.

133 {
134 std::size_t seed = static_cast<std::size_t>(type_priority());
135 hash_combine(seed, id_.hash());
136 return seed;
137 }
int type_priority() const override
void hash_combine(std::size_t &seed, std::size_t value)
将一个哈希值混合到种子中,用于组合多个字段的哈希.

引用了 LMCAS::detail::ExactRootId::hash(), LMCAS::hash_combine(), id_ , 以及 type_priority().

函数调用图:

◆ 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().

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

◆ exact_id()

const LMCAS::detail::ExactRootId & LMCAS::RootOfNode::exact_id ( ) const
inlinenoexcept

在文件 special_forms.hpp 第 98 行定义.

98{ return id_; }

引用了 id_.

被这些函数引用 LMCAS::detail::anonymous_namespace{interval_endpoint.cpp}::comparable_root(), LMCAS::detail::anonymous_namespace{facts_query.cpp}::DomainTraversal::root_facts() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

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

◆ 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().

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

◆ index()

std::size_t LMCAS::RootOfNode::index ( ) const
inlinenoexcept

在文件 special_forms.hpp 第 99 行定义.

99{ return id_.index; }

引用了 id_ , 以及 LMCAS::detail::ExactRootId::index.

被这些函数引用 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

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

◆ is_number()

virtual bool LMCAS::SymbolicNode::is_number ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

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

201{ return false; }

◆ is_one()

virtual bool LMCAS::SymbolicNode::is_one ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

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

202{ return false; }

◆ is_positive()

virtual bool LMCAS::SymbolicNode::is_positive ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

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

204{ return false; }

◆ is_zero()

virtual bool LMCAS::SymbolicNode::is_zero ( ) const
inlinevirtualinherited

◆ polynomial()

std::shared_ptr< const SymbolicNode > LMCAS::RootOfNode::polynomial ( ) const
inline

在文件 special_forms.hpp 第 103 行定义.

103 {
104 const auto variable_node =
106 std::vector<std::shared_ptr<const SymbolicNode>> terms;
107 for (std::size_t degree = 0;
108 degree < id_.polynomial.coeffs.size(); ++degree) {
109 const auto& coefficient = id_.polynomial.coeffs[degree];
110 if (coefficient == Rational(0)) continue;
111 auto coefficient_node =
113 if (degree == 0) {
114 terms.push_back(coefficient_node);
115 continue;
116 }
117 auto variable_power = degree == 1
120 variable_node,
121 SymbolicFactory::create_number(BigInt(degree)));
122 terms.push_back(
123 coefficient == Rational(1)
124 ? variable_power
126 {coefficient_node, variable_power}));
127 }
128 return SymbolicFactory::create_add(std::move(terms));
129 }
std::vector< CoeffType > coeffs
系数数组,coeffs[i] 为 x^i 的系数
const std::string & variable() const noexcept
static std::shared_ptr< const SymbolicNode > create_add(std::vector< std::shared_ptr< const SymbolicNode > > ops, detail::RewriteBudget *budget=nullptr)
创建加法节点,自动扁平化嵌套加法并消除零项.
static std::shared_ptr< const SymbolicNode > create_variable(const std::string &name)
static std::shared_ptr< const SymbolicNode > create_power(std::shared_ptr< const SymbolicNode > base, std::shared_ptr< const SymbolicNode > exponent)
创建幂运算节点,自动处理指数为 0/1 及底数为 0/1 的情况.
static std::shared_ptr< const SymbolicNode > create_multiply(std::vector< std::shared_ptr< const SymbolicNode > > ops, detail::RewriteBudget *budget=nullptr)
创建乘法节点,自动扁平化嵌套乘法并消除单位元.
static std::shared_ptr< const SymbolicNode > create_number(const ::LMCAS::BigInt &v)
std::shared_ptr< const SymbolicNode > variable_node(size_t index, const PolyContext &context)
@ Rational
Rational numbers

引用了 LMCAS::Polynomial< CoeffType >::coeffs, LMCAS::SymbolicFactory::create_add(), LMCAS::SymbolicFactory::create_multiply(), LMCAS::SymbolicFactory::create_number(), LMCAS::SymbolicFactory::create_power(), LMCAS::SymbolicFactory::create_variable(), id_, LMCAS::detail::ExactRootId::polynomial , 以及 variable().

函数调用图:

◆ type_priority()

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

实现了 LMCAS::SymbolicNode.

在文件 special_forms.hpp 第 130 行定义.

130{ return 110; }

被这些函数引用 compute_hash().

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

◆ variable()

const std::string & LMCAS::RootOfNode::variable ( ) const
inlinenoexcept

在文件 special_forms.hpp 第 100 行定义.

100 {
101 return display_variable_;
102 }

引用了 display_variable_.

被这些函数引用 polynomial() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

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

◆ LMCAS::detail::make_node

template<typename Node, typename... Args>
std::shared_ptr< const Node > LMCAS::detail::make_node ( Args &&... args)
friend

类成员变量说明

◆ cached_hash

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

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

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

◆ display_variable_

const std::string LMCAS::RootOfNode::display_variable_
private

在文件 special_forms.hpp 第 83 行定义.

被这些函数引用 RootOfNode(), clone() , 以及 variable().

◆ hash_computed

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

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

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

◆ id_

const LMCAS::detail::ExactRootId LMCAS::RootOfNode::id_
private

在文件 special_forms.hpp 第 82 行定义.

被这些函数引用 RootOfNode(), clone(), compare_same_type(), compute_hash(), exact_id(), index() , 以及 polynomial().


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