ELC in dev
ELC-lang
载入中...
搜索中...
未找到
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check > 模板结构体 参考
类 elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check > 继承关系图:
[图例]
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check > 的协作图:
[图例]

Public 类型

typedef ptr_t< T, ref_type, do_replace_checkthis_t
 
typedef same_ref_p_t< T, ref_typebase_t
 
typedef same_ref_p_t< T, ref_typesame_ref
 
typedef same_ptr_p_t< T > same_ptr
 

Public 成员函数

 ptr_t (T *a, special_init_t) noexcept
 
constexpr ptr_t (T *a) noexcept
 
 ptr_t (const same_ptr &a) noexcept
 
 ptr_t (const same_ref &a) noexcept
 
 ptr_t (const ptr_t &a) noexcept
 
 ptr_t (const ptr_t< remove_cv< T >, ref_type, do_replace_check > &a) noexcept
 
 ptr_t (ptr_t &&a) noexcept
 
constexpr ptr_t (nullptr_t=nullptr) noexcept
 
constexpr ptr_t (null_ptr_t) noexcept
 
 ~ptr_t () noexcept(cut_nothrow)
 
void reset (T *a) const noexcept(reset_nothrow)
 
void reset (nullptr_t=nullptr) const noexcept(reset_nothrow)
 
void replace_check () const noexcept(replace_check_nothrow)
 
void do_replace (T *p) noexcept(replace_check_nothrow &&reset_nothrow)
 
template<typename ref_type_ , bool do_replace_check_>
void do_replace (const ptr_t< T, ref_type_, do_replace_check_ > &p) noexcept(replace_check_nothrow &&reset_nothrow)
 
T * get () const noexcept(get_nothrow)
 
bool unique () const noexcept
 
constexpr conditional< do_replace_check &&type_info< T >. template has_attribute_helper< replace_able >(), unstable_hash_t, hash_thash () const noexcept(noexcept((elc::defs::hash(get()))))
 
auto operator== (const T *a) const noexcept(noexcept((pointer_equal(add_const((::std::declval< const this_t & >()).get()), a))))
 
auto operator== (nullptr_t) const noexcept(noexcept((operator==(null_ptr))))
 
auto operator== (null_ptr_t) const noexcept(noexcept((operator==((T *) null_ptr))))
 
template<typename ref_type_ , bool do_replace_check_>
auto operator== (const ptr_t< T, ref_type_, do_replace_check_ > &b) const noexcept(noexcept((pointer_equal((::std::declval< const this_t & >()).get(), b.get()))))
 
template<typename ref_type_ , bool do_replace_check_>
requires (type_info<remove_cv<T>>!=type_info<T>)
auto operator== (const ptr_t< const T, ref_type_, do_replace_check_ > &b) const noexcept(noexcept((pointer_equal((::std::declval< const this_t & >()).get(), b.get()))))
 
template<typename ref_type_ , bool do_replace_check_>
requires (type_info<remove_cv<T>>!=type_info<T>)
auto operator== (const ptr_t< remove_cv< T >, ref_type_, do_replace_check_ > &b) const noexcept(noexcept((pointer_equal((::std::declval< const this_t & >()).get(), add_const(b.get())))))
 
void add_ref () const noexcept
 
void cut_ref () const noexcept(noexcept((cut_ref(nullptr))))
 
void swap_with (same_ref_p_t &a) noexcept
 
- Public 成员函数 继承自 elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >
 same_ref_p_t (T *a) noexcept
 
 same_ref_p_t (const same_ptr_p_t< T > &a) noexcept
 
void swap_with (same_ref_p_t &a) noexcept
 
- Public 成员函数 继承自 elc::defs::memory::ptr_n::same_ptr_p_t< T >
 same_ptr_p_t (const same_ptr_p_t &) noexcept=default
 
T * get () const noexcept
 

静态 Public 成员函数

static void add_ref (T *a) noexcept
 
static void cut_ref (T *a) noexcept(cut_nothrow)
 

Public 属性

T * _to
 

静态 Public 属性

static constexpr bool reset_nothrow =cut_nothrow
 
static constexpr bool replace_check_nothrow =(type_info<T>. template not_has_has_attribute_helper< replace_able >())||reset_nothrow
 
static constexpr bool get_nothrow =replace_check_nothrow
 
static constexpr bool cut_nothrow
 
- 静态 Public 属性 继承自 elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >
static constexpr bool cut_nothrow =noexcept((::std::declval< ref_type >()).cut_ref())
 

额外继承的成员函数

- Protected 成员函数 继承自 elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >
void cut_ref () const noexcept(noexcept((cut_ref(nullptr))))
 
void add_ref () const noexcept
 
- Protected 成员函数 继承自 elc::defs::memory::ptr_n::same_ptr_p_t< T >
 same_ptr_p_t (T *a) noexcept
 
- 静态 Protected 成员函数 继承自 elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >
static void cut_ref (T *a) noexcept(cut_nothrow)
 
static void add_ref (T *a) noexcept
 
- Protected 属性 继承自 elc::defs::memory::ptr_n::same_ptr_p_t< T >
T * _to
 

详细描述

template<class T, typename ref_type, bool do_replace_check>
struct elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >

在文件 all_defs.cpp22899 行定义.

成员类型定义说明

◆ base_t

在文件 all_defs.cpp22902 行定义.

◆ same_ptr

在文件 all_defs.cpp22904 行定义.

◆ same_ref

在文件 all_defs.cpp22903 行定义.

◆ this_t

在文件 all_defs.cpp22900 行定义.

构造及析构函数说明

◆ ptr_t() [1/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( T *  a,
special_init_t   
)
inlineexplicitnoexcept

在文件 all_defs.cpp22911 行定义.

22911:same_ref(a){}
constexpr T down_cast(U a) noexcept
向下转型至
same_ref_p_t< T, ref_type > same_ref

◆ ptr_t() [2/9]

template<class T , typename ref_type , bool do_replace_check>
constexpr elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( T *  a)
inlineconstexprnoexcept

在文件 all_defs.cpp22912 行定义.

22912:same_ref(a){add_ref();}
void add_ref() const noexcept

◆ ptr_t() [3/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( const same_ptr a)
inlinenoexcept

在文件 all_defs.cpp22913 行定义.

22913 :same_ref(a){
22914 if constexpr(type_info<T>.has_attribute(weak_ref_able) && type_info<ref_type> == type_info<ref_able<remove_cv<T>>>)
22915 if(get_ref_num(_to))
22916 add_ref();
22917 else
22918 add_ref(_to=null_ptr);
22919 else
22920 add_ref();
22921 }
link_num_t get_ref_num(const T *a) noexcept
函数调用图:

◆ ptr_t() [4/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( const same_ref a)
inlinenoexcept

在文件 all_defs.cpp22922 行定义.

22922:same_ref(a){add_ref();}

◆ ptr_t() [5/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( const ptr_t< T, ref_type, do_replace_check > &  a)
inlinenoexcept

在文件 all_defs.cpp22923 行定义.

22923:ptr_t((same_ptr&)a){}
ptr_t(T *a, special_init_t) noexcept

◆ ptr_t() [6/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( const ptr_t< remove_cv< T >, ref_type, do_replace_check > &  a)
inlinenoexcept

在文件 all_defs.cpp22924 行定义.

22924:ptr_t(a.get()){}

◆ ptr_t() [7/9]

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( ptr_t< T, ref_type, do_replace_check > &&  a)
inlinenoexcept

在文件 all_defs.cpp22925 行定义.

22925 :ptr_t((same_ptr&)a){
22926 //为什么不默认构造后swap_with?
22927 /*
22928 直接构造:
22929 对目标进行addref
22930 移动对象析构(单次cutref)
22931 总耗费4
22932 默认构造后swap_with:
22933 对nullptr进行addref
22934 交换ptr值
22935 移动对象析构(单次cutref)
22936 总耗费6
22937
22938 总结:多此一举
22939 */
22940 }

◆ ptr_t() [8/9]

template<class T , typename ref_type , bool do_replace_check>
constexpr elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( nullptr_t< T, ref_type, do_replace_check = nullptr)
inlineconstexprnoexcept

在文件 all_defs.cpp22941 行定义.

22941:ptr_t(null_ptr){}

◆ ptr_t() [9/9]

template<class T , typename ref_type , bool do_replace_check>
constexpr elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::ptr_t ( null_ptr_t< T, ref_type, do_replace_check )
inlineconstexprnoexcept

在文件 all_defs.cpp22942 行定义.

22942:ptr_t((T*)(null_ptr)){}

◆ ~ptr_t()

template<class T , typename ref_type , bool do_replace_check>
elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::~ptr_t ( )
inlinenoexcept

在文件 all_defs.cpp22943 行定义.

22943{cut_ref();}
void cut_ref() const noexcept(noexcept((cut_ref(nullptr))))

成员函数说明

◆ add_ref() [1/2]

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::add_ref ( ) const
inlinenoexcept

在文件 all_defs.cpp22890 行定义.

22890{add_ref(_to);}

◆ add_ref() [2/2]

template<class T , typename ref_type , bool do_replace_check>
static void elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::add_ref ( T *  a)
inlinestaticnoexcept

在文件 all_defs.cpp22887 行定义.

22887{attribute_ptr_cast<ref_type>(a)->add_ref();}

◆ cut_ref() [1/2]

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::cut_ref ( ) const
inlinenoexcept

在文件 all_defs.cpp22889 行定义.

22889{cut_ref(_to);}

◆ cut_ref() [2/2]

template<class T , typename ref_type , bool do_replace_check>
static void elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::cut_ref ( T *  a)
inlinestaticnoexcept

在文件 all_defs.cpp22886 行定义.

22886{attribute_ptr_cast<ref_type>(a)->cut_ref();}

◆ do_replace() [1/2]

template<class T , typename ref_type , bool do_replace_check>
template<typename ref_type_ , bool do_replace_check_>
void elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::do_replace ( const ptr_t< T, ref_type_, do_replace_check_ > &  p)
inlinenoexcept

在文件 all_defs.cpp22962 行定义.

22962 {
22963 do_replace(p.get());
22964 }
void do_replace(T *p) noexcept(replace_check_nothrow &&reset_nothrow)

◆ do_replace() [2/2]

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::do_replace ( T *  p)
inlinenoexcept

在文件 all_defs.cpp22955 行定义.

22955 {
22956 if constexpr(type_info<remove_cvref<T>>.has_attribute(replace_able)){
22957 attribute_ptr_cast<replace_able>(_to)->be_replace_as(p);
22958 reset(p);
22959 }
22960 }
void reset(T *a) const noexcept(reset_nothrow)

◆ get()

template<class T , typename ref_type , bool do_replace_check>
T * elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::get ( ) const
inlinenoexcept

在文件 all_defs.cpp22966 行定义.

22966 {
22967 replace_check();
22968 return base_t::get();
22969 }
void replace_check() const noexcept(replace_check_nothrow)
这是这个函数的调用关系图:

◆ hash()

template<class T , typename ref_type , bool do_replace_check>
constexpr conditional< do_replace_check &&type_info< T >. template has_attribute_helper< replace_able >(), unstable_hash_t, hash_t > elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::hash ( ) const
inlineconstexprnoexcept

在文件 all_defs.cpp22973 行定义.

22973 {//注意:当T可replace时,同一ptr的hash可能变动
22974 using elc::defs::hash;
22975 return hash(get());
22976 }
constexpr conditional< do_replace_check &&type_info< T >. template has_attribute_helper< replace_able >(), unstable_hash_t, hash_t > hash() const noexcept(noexcept((elc::defs::hash(get()))))
T * get() const noexcept(get_nothrow)

◆ operator==() [1/6]

template<class T , typename ref_type , bool do_replace_check>
template<typename ref_type_ , bool do_replace_check_>
requires (type_info<remove_cv<T>>!=type_info<T>)
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( const ptr_t< const T, ref_type_, do_replace_check_ > &  b) const
inlinenoexcept

在文件 all_defs.cpp22996 行定义.

23000 {
23001 return pointer_equal(get(),b.get());
23002 }
constexpr auto pointer_equal(T *a, T *b) noexcept
指针比较的重载接口,允许类对此进行自定义 elc内部的指针比较应当视情况使用默认配置或此重载接口
函数调用图:

◆ operator==() [2/6]

template<class T , typename ref_type , bool do_replace_check>
template<typename ref_type_ , bool do_replace_check_>
requires (type_info<remove_cv<T>>!=type_info<T>)
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( const ptr_t< remove_cv< T >, ref_type_, do_replace_check_ > &  b) const
inlinenoexcept

在文件 all_defs.cpp23004 行定义.

23008 {
23009 return pointer_equal(get(),add_const(b.get()));
23010 }
constexpr const T add_const(T a) noexcept
对值追加const
函数调用图:

◆ operator==() [3/6]

template<class T , typename ref_type , bool do_replace_check>
template<typename ref_type_ , bool do_replace_check_>
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( const ptr_t< T, ref_type_, do_replace_check_ > &  b) const
inlinenoexcept

在文件 all_defs.cpp22988 行定义.

22992 {
22993 return pointer_equal(get(),b.get());
22994 }
函数调用图:

◆ operator==() [4/6]

template<class T , typename ref_type , bool do_replace_check>
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( const T *  a) const
inlinenoexcept

在文件 all_defs.cpp22978 行定义.

22978 {
22979 return pointer_equal(add_const(get()),a);
22980 }
函数调用图:

◆ operator==() [5/6]

template<class T , typename ref_type , bool do_replace_check>
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( null_ptr_t< T, ref_type, do_replace_check ) const
inlinenoexcept

在文件 all_defs.cpp22984 行定义.

22984 {
22985 return operator==((T*)null_ptr);
22986 }
auto operator==(const T *a) const noexcept(noexcept((pointer_equal(add_const((::std::declval< const this_t & >()).get()), a))))
函数调用图:

◆ operator==() [6/6]

template<class T , typename ref_type , bool do_replace_check>
auto elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::operator== ( nullptr_t< T, ref_type, do_replace_check ) const
inlinenoexcept

在文件 all_defs.cpp22981 行定义.

22981 {
22982 return operator==(null_ptr);
22983 }
函数调用图:

◆ replace_check()

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::replace_check ( ) const
inlinenoexcept

在文件 all_defs.cpp22950 行定义.

22950 {
22951 if constexpr(do_replace_check&&type_info<remove_cvref<T>>.has_attribute(replace_able))
22952 if(attribute_ptr_cast<replace_able>(_to)->replaced())
22954 }

◆ reset() [1/2]

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::reset ( nullptr_t< T, ref_type, do_replace_check = nullptr) const
inlinenoexcept

在文件 all_defs.cpp22947 行定义.

22947{reset(null_ptr);}
函数调用图:
这是这个函数的调用关系图:

◆ reset() [2/2]

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::reset ( T *  a) const
inlinenoexcept

在文件 all_defs.cpp22946 行定义.

22946{auto tmp=_to;add_ref(_to=a);cut_ref(tmp);}

◆ swap_with()

template<class T , typename ref_type , bool do_replace_check>
void elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::swap_with ( same_ref_p_t a)
inlinenoexcept

在文件 all_defs.cpp22882 行定义.

22882{swap(_to,a._to);}
void swap(same_ref_p_t< T, ref_type > &a, same_ref_p_t< T, ref_type > &b) noexcept

◆ unique()

template<class T , typename ref_type , bool do_replace_check>
bool elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::unique ( ) const
inlinenoexcept

在文件 all_defs.cpp22970 行定义.

22970{return attribute_ptr_cast<ref_able>(get())->link_num()==1;}

类成员变量说明

◆ _to

template<class T , typename ref_type , bool do_replace_check>
T* elc::defs::memory::ptr_n::same_ptr_p_t< T >::_to
mutable

在文件 all_defs.cpp22870 行定义.

◆ cut_nothrow

template<class T , typename ref_type , bool do_replace_check>
constexpr bool elc::defs::memory::ptr_n::same_ref_p_t< T, ref_type >::cut_nothrow
staticconstexpr

在文件 all_defs.cpp22884 行定义.

◆ get_nothrow

template<class T , typename ref_type , bool do_replace_check>
constexpr bool elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::get_nothrow =replace_check_nothrow
staticconstexpr

在文件 all_defs.cpp22965 行定义.

◆ replace_check_nothrow

template<class T , typename ref_type , bool do_replace_check>
constexpr bool elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::replace_check_nothrow =(type_info<T>. template not_has_has_attribute_helper< replace_able >())||reset_nothrow
staticconstexpr

在文件 all_defs.cpp22949 行定义.

◆ reset_nothrow

template<class T , typename ref_type , bool do_replace_check>
constexpr bool elc::defs::memory::ptr_n::ptr_t< T, ref_type, do_replace_check >::reset_nothrow =cut_nothrow
staticconstexpr

在文件 all_defs.cpp22945 行定义.


该结构体的文档由以下文件生成: