FreeTensor
Loading...
Searching...
No Matches
Public Member Functions | Friends | List of all members
freetensor::SubTree< T, POLICY > Class Template Reference

#include <sub_tree.h>

Public Member Functions

 SubTree (const ChildOf &c)
 
 ~SubTree ()
 
 SubTree (std::nullptr_t)
 
template<std::derived_from< T > U>
 SubTree (const Ref< U > &obj)
 
template<std::derived_from< T > U>
 SubTree (Ref< U > &&obj)
 
SubTreeoperator= (SubTree &&other)
 
template<NullPolicy OTHER_POLICY>
SubTreeoperator= (SubTree< T, OTHER_POLICY > &&other)
 
SubTreeoperator= (const SubTree &other)
 
template<NullPolicy OTHER_POLICY>
SubTreeoperator= (const SubTree< T, OTHER_POLICY > &other)
 
template<class U >
requires std::derived_from<T, U>
 operator Ref< U > () const
 
T & operator* () const
 
T * operator-> () const
 
template<class U >
Ref< U > as () const
 
bool isValid () const
 
 SubTree (SubTree &&other)
 
template<NullPolicy OTHER_POLICY>
 SubTree (SubTree< T, OTHER_POLICY > &&other)
 
 SubTree (const SubTree &other)
 
template<NullPolicy OTHER_POLICY>
 SubTree (const SubTree< T, OTHER_POLICY > &other)
 

Friends

template<class , NullPolicy >
class SubTree
 

Detailed Description

template<class T, NullPolicy POLICY = NullPolicy::NotNull>
class freetensor::SubTree< T, POLICY >

Plugging a Ref of ASTPart as a sub-tree in the AST

This class ensures that each Ref of an ASTPart having a single parent. In other words, there will not be two ASTParts in one AST sharing the same address. If an ASTPart is assigned as a SubTree, but it has already been in another SubTree, it will be automatically copied

Constructor & Destructor Documentation

◆ SubTree() [1/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
freetensor::SubTree< T, POLICY >::SubTree ( const ChildOf c)
inline

◆ ~SubTree()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
freetensor::SubTree< T, POLICY >::~SubTree ( )
inline

◆ SubTree() [2/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
freetensor::SubTree< T, POLICY >::SubTree ( std::nullptr_t  )
inline

◆ SubTree() [3/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<std::derived_from< T > U>
freetensor::SubTree< T, POLICY >::SubTree ( const Ref< U > &  obj)
inline

◆ SubTree() [4/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<std::derived_from< T > U>
freetensor::SubTree< T, POLICY >::SubTree ( Ref< U > &&  obj)
inline

◆ SubTree() [5/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
freetensor::SubTree< T, POLICY >::SubTree ( SubTree< T, POLICY > &&  other)
inline

Move-constructors are called when constructing a SubTree (for example, when putting a SubTree into a list), so we follow the normal rules of moving an object. No copying of the AST is performed here.

◆ SubTree() [6/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<NullPolicy OTHER_POLICY>
freetensor::SubTree< T, POLICY >::SubTree ( SubTree< T, OTHER_POLICY > &&  other)
inline

◆ SubTree() [7/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
freetensor::SubTree< T, POLICY >::SubTree ( const SubTree< T, POLICY > &  other)
inlineexplicit

For a SubTree y, auto x = y will result in a deep copy of the entire SubTree. We avoid this misuse by making the copy constructor explicit. Please use Ref<T> x = y or auto &&x = y instead

◆ SubTree() [8/8]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<NullPolicy OTHER_POLICY>
freetensor::SubTree< T, POLICY >::SubTree ( const SubTree< T, OTHER_POLICY > &  other)
inlineexplicit

Member Function Documentation

◆ as()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<class U >
Ref< U > freetensor::SubTree< T, POLICY >::as ( ) const
inline

◆ isValid()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
bool freetensor::SubTree< T, POLICY >::isValid ( ) const
inline

◆ operator Ref< U >()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<class U >
requires std::derived_from<T, U>
freetensor::SubTree< T, POLICY >::operator Ref< U > ( ) const
inline

◆ operator*()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
T & freetensor::SubTree< T, POLICY >::operator* ( ) const
inline

◆ operator->()

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
T * freetensor::SubTree< T, POLICY >::operator-> ( ) const
inline

◆ operator=() [1/4]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
SubTree & freetensor::SubTree< T, POLICY >::operator= ( const SubTree< T, POLICY > &  other)
inline

◆ operator=() [2/4]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<NullPolicy OTHER_POLICY>
SubTree & freetensor::SubTree< T, POLICY >::operator= ( const SubTree< T, OTHER_POLICY > &  other)
inline

◆ operator=() [3/4]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
SubTree & freetensor::SubTree< T, POLICY >::operator= ( SubTree< T, POLICY > &&  other)
inline

◆ operator=() [4/4]

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<NullPolicy OTHER_POLICY>
SubTree & freetensor::SubTree< T, POLICY >::operator= ( SubTree< T, OTHER_POLICY > &&  other)
inline

Friends And Related Function Documentation

◆ SubTree

template<class T , NullPolicy POLICY = NullPolicy::NotNull>
template<class , NullPolicy >
friend class SubTree
friend

The documentation for this class was generated from the following file: