OpenVDB  12.0.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 >
 

Public Member Functions

 SymbolTableBlocks ()
 
 ~SymbolTableBlocks ()=default
 
SymbolTableglobals ()
 Access to the list of global variables which are always accessible. More...
 
const SymbolTableglobals () 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...
 
SymbolTablegetOrInsert (const size_t index)
 Get or insert and get a SymbolTable with a unique index. More...
 
SymbolTableget (const size_t index)
 Get a SymbolTable with a unique index. If it doesn't exist, nullptr is returned. More...
 
llvm::Value * find (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...
 
llvm::Value * find (const std::string &name) const
 Find a variable within the program starting at the lowest level SymbolTable. More...
 
bool replace (const std::string &name, llvm::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 global variables
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>

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.

Note
If the zero index is supplied, this function throws a runtime error
Parameters
indexThe SymbolTable index to erase
llvm::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
llvm::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* 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* getOrInsert ( const size_t  index)
inline

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

Parameters
indexThe SymbolTable index
SymbolTable& globals ( )
inline

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

const SymbolTable& globals ( ) const
inline
bool replace ( const std::string &  name,
llvm::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