Go to the documentation of this file.
12 #ifndef OPENVDB_AX_COMPILER_AST_SCANNERS_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_COMPILER_AST_SCANNERS_HAS_BEEN_INCLUDED
38 const std::string& name,
50 const std::string& name,
62 std::vector<const ast::Variable*>* readOnly,
63 std::vector<const ast::Variable*>* writeOnly,
64 std::vector<const ast::Variable*>* readWrite,
65 const bool locals =
true,
66 const bool attributes =
true);
82 std::vector<std::string>* readOnly,
83 std::vector<std::string>* writeOnly,
84 std::vector<std::string>* readWrite);
88 const std::string& name,
90 std::vector<std::string>& dependencies);
99 template <
typename NodeT,
typename OpT>
104 template<
typename NodeT,
typename ContainerType = std::vector<const NodeT*>>
117 template <
typename NodeTypeList,
typename ContainerType = std::vector<const Node*>>
133 template<
typename ContainerType,
typename T,
typename ...Ts>
138 template<
typename ContainerType,
typename T,
typename ...Ts>
141 collectNodeType<T, ContainerType>(node, C);
147 template<
typename NodeT,
typename ContainerType>
150 visitNodeType<NodeT>(node, [&](
const NodeT& node) ->
bool {
151 array.push_back(&node);
156 template <
typename NodeTypeList,
typename ContainerType>
162 template <
typename NodeT,
typename OpT,
typename Derived =
void>
165 std::is_same<Derived, void>::value,
166 VisitNodeType<NodeT, OpT>,
170 std::is_same<Derived, void>::value,
178 return std::is_abstract<NodeT>::value;
183 inline bool visit(
const NodeT* node) {
184 if (node)
return mOp(*node);
191 template <
typename NodeT,
typename OpT>
203 #endif // OPENVDB_AX_COMPILER_AST_SCANNERS_HAS_BEEN_INCLUDED
bool visit(const NodeT *node)
Definition: Scanners.h:183
A Tree is the highest concrete (non-abstract) node in the entire AX AST hierarchy....
Definition: AST.h:562
typename std::conditional< std::is_same< Derived, void >::value, VisitNodeType< NodeT, OpT >, Derived >::type VisitorT
Definition: Scanners.h:172
void visitNodeType(const ast::Node &node, const OpT &op)
For an AST node of a given type, search for and call a custom const operator() which takes a const re...
Definition: Scanners.h:192
static void exec(const ast::Node &node, ContainerType &C)
Definition: Scanners.h:140
void linearize(const ast::Node &node, std::vector< const ast::Node * > &list)
Flatten the provided AST branch into a linear list using post order traversal.
void catalogueVariables(const ast::Node &node, std::vector< const ast::Variable * > *readOnly, std::vector< const ast::Variable * > *writeOnly, std::vector< const ast::Variable * > *readWrite, const bool locals=true, const bool attributes=true)
todo
void collectNodeType(const ast::Node &node, ContainerType &array)
Visit all nodes of a given type and store pointers to them in a provided compatible container.
Definition: Scanners.h:148
CoreType
Definition: Tokens.h:32
void attributeDependencyTokens(const ast::Tree &tree, const std::string &name, const tokens::CoreType type, std::vector< std::string > &dependencies)
Populate a list of attribute names which the given attribute depends on.
Library and file format version numbers.
Definition: Scanners.h:134
bool writesToAttribute(const ast::Node &node, const std::string &name, const tokens::CoreType type=tokens::UNKNOWN)
Returns whether or not a given branch of an AST writes to a given attribute.
void collectNodeTypes(const ast::Node &node, ContainerType &array)
Visit all nodes of the given types and store pointers to them in a container of base ast::Node pointe...
Definition: Scanners.h:157
const ast::Variable * lastUse(const ast::Node &node, const std::string &token)
const ast::Variable * firstUse(const ast::Node &node, const std::string &token)
bool callsFunction(const ast::Node &node, const std::string &name)
Returns whether or not a given branch of an AST calls a function.
The Visitor class uses the Curiously Recursive Template Pattern (CRTP) to provide a customizable inte...
Definition: Visitor.h:96
static void exec(const ast::Node &, ContainerType &)
Definition: Scanners.h:135
Variables are a base type for Locals, Attributes and ExternalVariables. Unlike other abstract types,...
Definition: AST.h:337
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:153
bool visitNodeHierarchies() const
Definition: Scanners.h:177
void catalogueAttributeTokens(const ast::Node &node, std::vector< std::string > *readOnly, std::vector< std::string > *writeOnly, std::vector< std::string > *readWrite)
Parse all attributes into three unique vectors which represent how they are accessed within the synta...
The base abstract node which determines the interface and required methods for all derived concrete n...
Definition: AST.h:102
Contains the AX AST Node Visitor, providing default and customizable traversal and visitation methods...
bool traverse(NodeType< ast::Tree > *tree)
Default traversals for a given concrete AST node type.
Definition: Visitor.h:161
Definition: Scanners.h:168
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:101
@ UNKNOWN
Definition: Tokens.h:63
A list of types (not necessarily unique)
Definition: TypeList.h:366
VisitNodeType(const OpT &op)
Definition: Scanners.h:181
Definition: openvdb/Exceptions.h:13
bool usesAttribute(const ast::Node &node, const std::string &name, const tokens::CoreType type=tokens::UNKNOWN)
Returns whether or not a given branch of an AST reads from or writes to a given attribute.
Provides the definition for every abstract and concrete derived class which represent a particular ab...