ROSE
0.11.109.0
|
A mostly static class for creating and storing Unique Node Identifiers.
This class by be used to uniquely identify a node by a string, or find a particular node from that string. There is no storage of the IDs on the AST or anywhere else. This class includes a couple of numbers, but those only exist as the NodeId does. Node and Ids are found and generated algorithmically. So using NodeIds does not increase the memory cost of ROSE.
It is based on the Node's location in the memory pool, so it is based on the stability of the memory pool. So it has a few constraints. It will be stable between runs of ROSE iff:
Under those constraints the construction of the AST should be deterministic, so the memory pool construction should be as well. One hopes. There is one optimization that I may have to change if it becomes an issue. I'm leaving a note here in case it becomes an issue. The memory pools are stored via sorted insert in the pools array of each AST node type. This makes the lookup slightly faster as the memory pool is sorted. However, it is possible that as the AST is constructed a memory pool pointer could be allocatted out of order, resulting in a different order of memory pools. If this happens I suggest we go back to a regular push_back instead of a sorted_insert, and then when an ID is generated for an SgNode, we will have to use linear search. I haven't seen this in testing. -Jim Leek
#include <Rose/AST/NodeId.h>
Public Member Functions | |
NodeId () | |
default constructor required for containers, but only makes invalid NodeIds | |
NodeId (SgNode *sgnode) | |
NodeId (const NodeId &rhs) | |
copy constructor | |
NodeId & | operator= (const NodeId &rhs) |
assignment operator | |
SgNode * | getNode () const |
Get the SgNode* contained in this NodeId. | |
std::string | toString () const |
Get this node ID as a string. | |
bool | operator== (const NodeId &rhs) const |
bool | operator!= (const NodeId &rhs) const |
bool | operator< (const NodeId &rhs) const |
bool | operator<= (const NodeId &rhs) const |
bool | operator> (const NodeId &rhs) const |
bool | operator>= (const NodeId &rhs) const |
Static Public Member Functions | |
static NodeId | getId (SgNode *node) |
Get the Node ID for a particular SgNode*. | |
static NodeId | getId (const std::string &nodeIdString) |
Get the Node ID from a string (e.g. from json) | |
static SgNode * | getNode (const std::string &nodeIdString) |
Get the SgNode from a string (convinience function) | |