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

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

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

Public 成员函数

void accept (LMCAS::detail::SymbolicVisitor &visitor) const override
const auto & body () const noexcept
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_definite () const noexcept
virtual bool is_number () const
virtual bool is_one () const
virtual bool is_positive () const
virtual bool is_zero () const
const auto & lower () const noexcept
int type_priority () const override
const auto & upper () const noexcept
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 成员函数

 IntegralNode (std::shared_ptr< const SymbolicNode > body, std::string variable, std::shared_ptr< const SymbolicNode > lower=nullptr, std::shared_ptr< const SymbolicNode > upper=nullptr)

Private 属性

const std::shared_ptr< const SymbolicNode > body_
const std::shared_ptr< const SymbolicNode > lower_
const std::shared_ptr< const SymbolicNode > upper_
const std::string variable_

友元

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

详细描述

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

构造及析构函数说明

◆ IntegralNode()

LMCAS::IntegralNode::IntegralNode ( std::shared_ptr< const SymbolicNode > body,
std::string variable,
std::shared_ptr< const SymbolicNode > lower = nullptr,
std::shared_ptr< const SymbolicNode > upper = nullptr )
inlineprivate

在文件 integral.hpp 第 18 行定义.

22 : body_(std::move(body)), variable_(std::move(variable)),
23 lower_(std::move(lower)), upper_(std::move(upper)) {
24 if (!body_) throw std::invalid_argument("integral body cannot be null");
25 if (variable_.empty()) throw std::invalid_argument("integral variable cannot be empty");
26 if (static_cast<bool>(lower_) != static_cast<bool>(upper_)) {
27 throw std::invalid_argument("integral bounds must both be present or absent");
28 }
29 }
const std::shared_ptr< const SymbolicNode > lower_
const auto & body() const noexcept
const auto & upper() const noexcept
const std::shared_ptr< const SymbolicNode > upper_
const auto & lower() const noexcept
const std::shared_ptr< const SymbolicNode > body_
const std::string & variable() const noexcept
const std::string variable_

引用了 body(), body_, lower(), lower_, upper(), upper_, variable() , 以及 variable_.

被这些函数引用 compare_same_type().

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

成员函数说明

◆ accept()

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

实现了 LMCAS::SymbolicNode.

在文件 integral.hpp 第 70 行定义.

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

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

函数调用图:

◆ body()

const auto & LMCAS::IntegralNode::body ( ) const
inlinenoexcept

在文件 integral.hpp 第 32 行定义.

32{ return body_; }

引用了 body_.

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

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

◆ clone()

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

实现了 LMCAS::SymbolicNode.

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

75 {
77 body_->clone(), variable_,
78 lower_ ? lower_->clone() : nullptr,
79 upper_ ? upper_->clone() : nullptr);
80 }
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 body_, lower_, LMCAS::detail::make_node(), upper_ , 以及 variable_.

函数调用图:

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

实现了 LMCAS::SymbolicNode.

在文件 integral.hpp 第 49 行定义.

49 {
50 const auto& integral = static_cast<const IntegralNode&>(other);
51 int comparison = variable_.compare(integral.variable_);
52 if (comparison != 0) {
53 return comparison;
54 }
55 comparison = body_->compare(*integral.body_);
56 if (comparison != 0) {
57 return comparison;
58 }
59 if (is_definite() != integral.is_definite()) {
60 return is_definite() ? 1 : -1;
61 }
62 if (!is_definite()) {
63 return 0;
64 }
65 comparison = lower_->compare(*integral.lower_);
66 return comparison != 0 ? comparison : upper_->compare(*integral.upper_);
67 }
IntegralNode(std::shared_ptr< const SymbolicNode > body, std::string variable, std::shared_ptr< const SymbolicNode > lower=nullptr, std::shared_ptr< const SymbolicNode > upper=nullptr)
bool is_definite() const noexcept

引用了 IntegralNode(), LMCAS::SymbolicNode::SymbolicNode(), body_, is_definite(), lower_, upper_ , 以及 variable_.

函数调用图:

◆ compute_hash()

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

实现了 LMCAS::SymbolicNode.

在文件 integral.hpp 第 40 行定义.

40 {
41 std::size_t seed = static_cast<std::size_t>(type_priority());
42 hash_combine(seed, body_->hash());
43 hash_combine(seed, std::hash<std::string>{}(variable_));
44 if (lower_) hash_combine(seed, lower_->hash());
45 if (upper_) hash_combine(seed, upper_->hash());
46 return seed;
47 }
int type_priority() const override
void hash_combine(std::size_t &seed, std::size_t value)
将一个哈希值混合到种子中,用于组合多个字段的哈希.

引用了 body_, LMCAS::hash_combine(), lower_, type_priority(), upper_ , 以及 variable_.

函数调用图:

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

bool LMCAS::IntegralNode::is_definite ( ) const
inlinenoexcept

在文件 integral.hpp 第 36 行定义.

36{ return lower_ && upper_; }

引用了 lower_ , 以及 upper_.

被这些函数引用 compare_same_type() , 以及 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

◆ lower()

const auto & LMCAS::IntegralNode::lower ( ) const
inlinenoexcept

在文件 integral.hpp 第 34 行定义.

34{ return lower_; }

引用了 lower_.

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

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

◆ type_priority()

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

实现了 LMCAS::SymbolicNode.

在文件 integral.hpp 第 37 行定义.

37{ return 108; }

被这些函数引用 compute_hash().

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

◆ upper()

const auto & LMCAS::IntegralNode::upper ( ) const
inlinenoexcept

在文件 integral.hpp 第 35 行定义.

35{ return upper_; }

引用了 upper_.

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

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

◆ variable()

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

在文件 integral.hpp 第 33 行定义.

33{ return variable_; }

引用了 variable_.

被这些函数引用 IntegralNode() , 以及 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

类成员变量说明

◆ body_

const std::shared_ptr<const SymbolicNode> LMCAS::IntegralNode::body_
private

在文件 integral.hpp 第 13 行定义.

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

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

◆ lower_

const std::shared_ptr<const SymbolicNode> LMCAS::IntegralNode::lower_
private

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

被这些函数引用 IntegralNode(), clone(), compare_same_type(), compute_hash(), is_definite() , 以及 lower().

◆ upper_

const std::shared_ptr<const SymbolicNode> LMCAS::IntegralNode::upper_
private

在文件 integral.hpp 第 16 行定义.

被这些函数引用 IntegralNode(), clone(), compare_same_type(), compute_hash(), is_definite() , 以及 upper().

◆ variable_

const std::string LMCAS::IntegralNode::variable_
private

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

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


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