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

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

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

Public 类型

enum class  Op { And , Or , Not , Implies }

Public 成员函数

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

静态 Public 成员函数

static std::string op_to_string (Op op)
 将逻辑运算符转换为字符串表示。

Protected 属性

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

Private 成员函数

 LogicalNode (std::shared_ptr< const SymbolicNode > l, std::shared_ptr< const SymbolicNode > r, Op o)

Private 属性

const std::shared_ptr< const SymbolicNode > left_
 LMCAS_AST_NODE_FACTORY_FRIEND
const Op op_
const std::shared_ptr< const SymbolicNode > right_

详细描述

在文件 relations.hpp 第 73 行定义.

成员枚举类型说明

◆ Op

enum class LMCAS::LogicalNode::Op
strong
枚举值
And 

逻辑与。

Or 

逻辑或。

Not 

一元逻辑非,right 为 nullptr。

Implies 

逻辑蕴含 A ⇒ B。

在文件 relations.hpp 第 75 行定义.

75 {
76 And, /**< 逻辑与。 */
77 Or, /**< 逻辑或。 */
78 Not, /**< 一元逻辑非,right 为 nullptr。 */
79 Implies /**< 逻辑蕴含 A ⇒ B。 */
80 };

构造及析构函数说明

◆ LogicalNode()

LMCAS::LogicalNode::LogicalNode ( std::shared_ptr< const SymbolicNode > l,
std::shared_ptr< const SymbolicNode > r,
Op o )
inlineprivate

在文件 relations.hpp 第 89 行定义.

90 : left_(std::move(l)), right_(std::move(r)), op_(o) {
91 if (!left_) {
92 throw std::invalid_argument("LogicalNode left operand cannot be null");
93 }
94 if (op_ != Op::Not && !right_) {
95 throw std::invalid_argument("LogicalNode binary right operand cannot be null");
96 }
97 }
@ Not
一元逻辑非,right 为 nullptr。
const std::shared_ptr< const SymbolicNode > left_
const std::shared_ptr< const SymbolicNode > right_
__attribute__((visibility("default"))) ComplexSymbolicResult complex_exp_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_exp_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_trig_form_checked(std __attribute__((visibility("default"))) ComplexSymbolicResult complex_trig_form_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_nth_root_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_nth_root_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_quadratic_checked(std __attribute__((visibility("default"))) ComplexRootsResult solve_complex_quadratic_checked(std std::shared_ptr< SymbolicExpr > r

引用了 left_, Not, op_, LMCAS::r , 以及 right_.

被这些函数引用 compare_same_type().

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

成员函数说明

◆ accept()

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

实现了 LMCAS::SymbolicNode.

在文件 relations.hpp 第 104 行定义.

104{ 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::LogicalNode::clone ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 relations.hpp 第 106 行定义.

106 {
108 left_ ? left_->clone() : nullptr,
109 right_ ? right_->clone() : nullptr,
110 op_);
111 }
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 left_, LMCAS::detail::make_node(), op_ , 以及 right_.

函数调用图:

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

实现了 LMCAS::SymbolicNode.

在文件 relations.hpp 第 122 行定义.

122 {
123 const auto& o = static_cast<const LogicalNode&>(other);
124 if (op_ != o.op_) {
125 return (int)op_ < (int)o.op_ ? -1 : 1;
126 }
127 bool l_null = !left_;
128 bool ol_null = !o.left_;
129 if (l_null != ol_null) {
130 return l_null ? -1 : 1;
131 }
132 if (!l_null) {
133 int cmp = left_->compare(*o.left_);
134 if (cmp != 0) {
135 return cmp;
136 }
137 }
138 bool r_null = !right_;
139 bool or_null = !o.right_;
140 if (r_null != or_null) {
141 return r_null ? -1 : 1;
142 }
143 if (!r_null) {
144 return right_->compare(*o.right_);
145 }
146 return 0;
147 }
LogicalNode(std::shared_ptr< const SymbolicNode > l, std::shared_ptr< const SymbolicNode > r, Op o)

引用了 LogicalNode(), LMCAS::SymbolicNode::SymbolicNode(), left_, op_ , 以及 right_.

函数调用图:

◆ compute_hash()

std::size_t LMCAS::LogicalNode::compute_hash ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 relations.hpp 第 115 行定义.

115 {
116 std::size_t h = std::hash<int>{}((int)op_);
117 if (left_) hash_combine(h, left_->hash());
118 if (right_) hash_combine(h, right_->hash());
119 return h;
120 }
void hash_combine(std::size_t &seed, std::size_t value)
将一个哈希值混合到种子中,用于组合多个字段的哈希.

引用了 LMCAS::hash_combine(), left_, op_ , 以及 right_.

函数调用图:

◆ 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_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

◆ left()

const std::shared_ptr< const SymbolicNode > & LMCAS::LogicalNode::left ( ) const
inlinenoexcept

◆ op()

Op LMCAS::LogicalNode::op ( ) const
inlinenoexcept

在文件 relations.hpp 第 102 行定义.

102{ return op_; }

引用了 op_.

被这些函数引用 LMCAS::anonymous_namespace{solve_solution_finalization.cpp}::logical_condition_truth(), LMCAS::detail::definite::anonymous_namespace{integration_definite_segments.cpp}::logical_predicate_truth(), op_to_string() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

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

◆ op_to_string()

std::string LMCAS::LogicalNode::op_to_string ( Op op)
inlinestatic

将逻辑运算符转换为字符串表示。

参数
op逻辑运算符
返回
"And"、"Or"、"Not" 或 "Implies"

在文件 relations.hpp 第 154 行定义.

154 {
155 switch(op) {
156 case Op::And: return "And";
157 case Op::Or: return "Or";
158 case Op::Not: return "Not";
159 case Op::Implies: return "Implies";
160 default: return "?";
161 }
162 }
@ Implies
逻辑蕴含 A ⇒ B。
Op op() const noexcept

引用了 And, Implies, Not, op() , 以及 Or.

函数调用图:

◆ right()

const std::shared_ptr< const SymbolicNode > & LMCAS::LogicalNode::right ( ) const
inlinenoexcept

◆ type_priority()

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

实现了 LMCAS::SymbolicNode.

在文件 relations.hpp 第 113 行定义.

113{ return 101; }

类成员变量说明

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

◆ left_

const std::shared_ptr<const SymbolicNode> LMCAS::LogicalNode::left_
private

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

被这些函数引用 LogicalNode(), clone(), compare_same_type(), compute_hash() , 以及 left().

◆ LMCAS_AST_NODE_FACTORY_FRIEND

LMCAS::LogicalNode::LMCAS_AST_NODE_FACTORY_FRIEND
private

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

◆ op_

const Op LMCAS::LogicalNode::op_
private

在文件 relations.hpp 第 87 行定义.

被这些函数引用 LogicalNode(), clone(), compare_same_type(), compute_hash() , 以及 op().

◆ right_

const std::shared_ptr<const SymbolicNode> LMCAS::LogicalNode::right_
private

在文件 relations.hpp 第 86 行定义.

被这些函数引用 LogicalNode(), clone(), compare_same_type(), compute_hash() , 以及 right().


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