OpenVDB  12.1.0
Public Types | Public Member Functions | List of all members
SymbolTableBlocks Struct Reference

A map of unique ids to symbol tables which can be used to represent local variables within a program. New scopes can be added and erased where necessary and iterated through using find(). Find assumes that tables are added through parented ascending ids. More...

#include <openvdb_ax/codegen/SymbolTable.h>

Public Types

using MapType = std::map< size_t, SymbolTable< Value >>
 

Public Member Functions

 SymbolTableBlocks ()
 
 ~SymbolTableBlocks ()=default
 
SymbolTable< llvm::Value * > & globals ()
 Access to the list of global variables which are always accessible. More...
 
const SymbolTable< llvm::Value * > & globals () const
 
bool erase (const size_t index)
 Erase a given scoped indexed SymbolTable from the list of held SymbolTables. Returns true if the table previously existed. More...
 
SymbolTable< Value > * getOrInsert (const size_t index)
 Get or insert and get a SymbolTable with a unique index. More...
 
SymbolTable< Value > * get (const size_t index)
 Get a SymbolTable with a unique index. If it doesn't exist, nullptr is returned. More...
 
const Valuefind (const std::string &name, const size_t startIndex) const
 Find a variable within the program starting at a given table index. If the given index does not exist, the next descending index is used. More...
 
const Valuefind (const std::string &name) const
 Find a variable within the program starting at the lowest level SymbolTable. More...
 
bool replace (const std::string &name, Value value)
 Replace the first occurrance of a variable with a given name with a replacement value. Returns true if a replacement occurred. More...
 

Detailed Description

A map of unique ids to symbol tables which can be used to represent local variables within a program. New scopes can be added and erased where necessary and iterated through using find(). Find assumes that tables are added through parented ascending ids.

Note
The zero id is used to represent the top block scope, but globals are stored separately.
The block symbol table is fairly simple and currently only supports insertion by integer ids. Scopes that exist at the same level are expected to be built in isolation and erase and re-create the desired ids where necessary.

Member Typedef Documentation

using MapType = std::map<size_t, SymbolTable<Value>>

Constructor & Destructor Documentation

SymbolTableBlocks ( )
inline
~SymbolTableBlocks ( )
default

Member Function Documentation

bool erase ( const size_t  index)
inline

Erase a given scoped indexed SymbolTable from the list of held SymbolTables. Returns true if the table previously existed.

Parameters
indexThe SymbolTable index to erase
const Value* find ( const std::string &  name,
const size_t  startIndex 
) const
inline

Find a variable within the program starting at a given table index. If the given index does not exist, the next descending index is used.

Note
This function assumes that tables have been added in ascending order dictating their nested structure.
Parameters
nameThe variable name to find
startIndexThe start SymbolTable index
const Value* find ( const std::string &  name) const
inline

Find a variable within the program starting at the lowest level SymbolTable.

Parameters
nameThe variable name to find
SymbolTable<Value>* get ( const size_t  index)
inline

Get a SymbolTable with a unique index. If it doesn't exist, nullptr is returned.

Parameters
indexThe SymbolTable index
SymbolTable<Value>* getOrInsert ( const size_t  index)
inline

Get or insert and get a SymbolTable with a unique index.

Parameters
indexThe SymbolTable index
SymbolTable<llvm::Value*>& globals ( )
inline

Access to the list of global variables which are always accessible.

const SymbolTable<llvm::Value*>& globals ( ) const
inline
bool replace ( const std::string &  name,
Value  value 
)
inline

Replace the first occurrance of a variable with a given name with a replacement value. Returns true if a replacement occurred.

Parameters
nameThe variable name to find and replace
valueThe llvm::Value to replace