8 #include <boost/assign/list_of.hpp>
14 using namespace boost::assign;
19 : database_(db), graph_(graph), observer_(observer) {
57 bool interest =
false;
83 for (NodeList::iterator iter =
node_list_.begin();
91 if ((node == NULL) || node->
IsDeleted()) {
97 for (EdgeDescriptorList::iterator iter =
edge_list_.begin();
106 if ((node == NULL) || node->
IsDeleted()) {
128 const string &
type,
const string &metadata)
const {
130 NodeEventPolicy::const_iterator ploc =
policy_.find(type);
134 ReactionMap::const_iterator rloc = ploc->second.find(metadata);
135 if (rloc == ploc->second.end()) {
138 return &rloc->second;
147 const IFMapNode *node,
const string &metadata)
const {
173 if (plist->find(link->
metadata()) == plist->end()) {
194 if (in_edges->count(make_pair(node, metadata)) > 0) {
199 in_edges->insert(make_pair(node, metadata));
203 PropagateList::const_iterator
self = plist->find(
"self");
204 if (
self != plist->end()) {
214 if (plist->find(link->
metadata()) == plist->end()) {
const std::string & metadata() const
bool IsInterestingEvent(const IFMapNode *node, const std::string &metadata) const
boost::function< void(IFMapNode *node)> ChangeObserver
std::set< std::string > PropagateList
virtual const char * Typename() const =0
void PropagateEdge(IFMapNode *node, const std::string &metadata, InEdgeSet *in_edges)
const PropagateList * GetPropagateList(const std::string &type, const std::string &metadata) const
IFMapNode * FindNode(const std::string &name)
void AddChangeEvent(IFMapNode *node)
const std::string & name() const
EdgeDescriptorList edge_list_
std::set< std::pair< IFMapNode *, std::string > > InEdgeSet
void PropagateNode(IFMapNode *node, InEdgeSet *in_edges)
static IFMapTable * FindTable(DB *db, const std::string &element_type)
edge_iterator edge_list_end(DBGraph *graph)
bool LinkEvent(const std::string metadata, IFMapNode *left, IFMapNode *right)
IFMapDependencyTracker(DB *db, DBGraph *graph, ChangeObserver observer)
void NodeEvent(IFMapNode *node)
edge_iterator edge_list_begin(DBGraph *graph)