Halide
Halide::Internal::Scope< T > Class Template Reference

A common pattern when traversing Halide IR is that you need to keep track of stuff when you find a Let or a LetStmt, and that it should hide previous values with the same name until you leave the Let or LetStmt nodes This class helps with that. More...

#include <ModulusRemainder.h>

Classes

class  const_iterator
 Iterate through the scope. More...
 

Public Member Functions

 Scope ()=default
 
 Scope (Scope &&that) noexcept=default
 
Scopeoperator= (Scope &&that) noexcept=default
 
 Scope (const Scope< T > &)=delete
 
Scope< T > & operator= (const Scope< T > &)=delete
 
void set_containing_scope (const Scope< T > *s)
 Set the parent scope. More...
 
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
T2 get (const std::string &name) const
 Retrieve the value referred to by a name. More...
 
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
T2 & ref (const std::string &name)
 Return a reference to an entry. More...
 
bool contains (const std::string &name) const
 Tests if a name is in scope. More...
 
size_t count (const std::string &name) const
 How many nested definitions of a single name exist? More...
 
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
void push (const std::string &name, T2 &&value)
 Add a new (name, value) pair to the current scope. More...
 
template<typename T2 = T, typename = typename std::enable_if<std::is_same<T2, void>::value>::type>
void push (const std::string &name)
 
void pop (const std::string &name)
 A name goes out of scope. More...
 
const_iterator cbegin () const
 
const_iterator cend () const
 
void swap (Scope< T > &other)
 

Static Public Member Functions

static const Scope< T > & empty_scope ()
 A const ref to an empty scope. More...
 

Detailed Description

template<typename T = void>
class Halide::Internal::Scope< T >

A common pattern when traversing Halide IR is that you need to keep track of stuff when you find a Let or a LetStmt, and that it should hide previous values with the same name until you leave the Let or LetStmt nodes This class helps with that.

Definition at line 17 of file ModulusRemainder.h.

Constructor & Destructor Documentation

◆ Scope() [1/3]

template<typename T = void>
Halide::Internal::Scope< T >::Scope ( )
default

◆ Scope() [2/3]

template<typename T = void>
Halide::Internal::Scope< T >::Scope ( Scope< T > &&  that)
defaultnoexcept

◆ Scope() [3/3]

template<typename T = void>
Halide::Internal::Scope< T >::Scope ( const Scope< T > &  )
delete

Member Function Documentation

◆ operator=() [1/2]

template<typename T = void>
Scope& Halide::Internal::Scope< T >::operator= ( Scope< T > &&  that)
defaultnoexcept

◆ operator=() [2/2]

template<typename T = void>
Scope<T>& Halide::Internal::Scope< T >::operator= ( const Scope< T > &  )
delete

◆ set_containing_scope()

template<typename T = void>
void Halide::Internal::Scope< T >::set_containing_scope ( const Scope< T > *  s)
inline

Set the parent scope.

If lookups fail in this scope, they check the containing scope before returning an error. Caller is responsible for managing the memory of the containing scope.

Definition at line 113 of file Scope.h.

Referenced by Halide::Internal::ExprUsesVars< T >::ExprUsesVars().

◆ empty_scope()

template<typename T = void>
static const Scope<T>& Halide::Internal::Scope< T >::empty_scope ( )
inlinestatic

A const ref to an empty scope.

Useful for default function arguments, which would otherwise require a copy constructor (with llvm in c++98 mode)

Definition at line 120 of file Scope.h.

◆ get()

template<typename T = void>
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
T2 Halide::Internal::Scope< T >::get ( const std::string &  name) const
inline

Retrieve the value referred to by a name.

Definition at line 128 of file Scope.h.

◆ ref()

template<typename T = void>
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
T2& Halide::Internal::Scope< T >::ref ( const std::string &  name)
inline

Return a reference to an entry.

Does not consider the containing scope.

Definition at line 144 of file Scope.h.

◆ contains()

template<typename T = void>
bool Halide::Internal::Scope< T >::contains ( const std::string &  name) const
inline

Tests if a name is in scope.

Definition at line 154 of file Scope.h.

◆ count()

template<typename T = void>
size_t Halide::Internal::Scope< T >::count ( const std::string &  name) const
inline

How many nested definitions of a single name exist?

Definition at line 167 of file Scope.h.

◆ push() [1/2]

template<typename T = void>
template<typename T2 = T, typename = typename std::enable_if<!std::is_same<T2, void>::value>::type>
void Halide::Internal::Scope< T >::push ( const std::string &  name,
T2 &&  value 
)
inline

Add a new (name, value) pair to the current scope.

Hide old values that have this name until we pop this name.

Definition at line 181 of file Scope.h.

Referenced by Halide::Internal::stmt_or_expr_uses_var().

◆ push() [2/2]

template<typename T = void>
template<typename T2 = T, typename = typename std::enable_if<std::is_same<T2, void>::value>::type>
void Halide::Internal::Scope< T >::push ( const std::string &  name)
inline

Definition at line 187 of file Scope.h.

◆ pop()

template<typename T = void>
void Halide::Internal::Scope< T >::pop ( const std::string &  name)
inline

A name goes out of scope.

Restore whatever its old value was (or remove it entirely if there was nothing else of the same name in an outer scope)

Definition at line 194 of file Scope.h.

◆ cbegin()

template<typename T = void>
const_iterator Halide::Internal::Scope< T >::cbegin ( ) const
inline

Definition at line 239 of file Scope.h.

◆ cend()

template<typename T = void>
const_iterator Halide::Internal::Scope< T >::cend ( ) const
inline

Definition at line 243 of file Scope.h.

◆ swap()

template<typename T = void>
void Halide::Internal::Scope< T >::swap ( Scope< T > &  other)
inline

Definition at line 247 of file Scope.h.


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