static void _set_node_commit_state(CfgNode& node, CommitState s, bool recursive) { node.setCommitState(s); if (recursive) { for (size_t i = 0; i < node.numChildNodes(); i++) { _set_node_commit_state(*(node.childAt(i)), s, recursive); } } }
static void _set_node_commit_path(CfgNode& node, const Cpath &p, bool recursive) { node.setCommitPath(p, node.isValue(), node.getValue(), node.getName()); if (recursive) { for (size_t i = 0; i < node.numChildNodes(); i++) { _set_node_commit_path(*(node.childAt(i)), node.getCommitPath(), recursive); } } }
static void _set_node_commit_create_failed(CfgNode& node) { // recursively top-down if (node.getCommitState() == COMMIT_STATE_ADDED) { // only set failure if the node is being created node.setCommitCreateFailed(); } for (size_t i = 0; i < node.numChildNodes(); i++) { _set_node_commit_create_failed(*(node.childAt(i))); } }
// nodes other than "changed" leaf nodes static CfgNode * _create_commit_cfg_node(CfgNode& cn, const Cpath& p, CommitState s) { CfgNode *node = new CfgNode(cn); _set_node_commit_state(*node, s, (s != COMMIT_STATE_UNCHANGED)); _set_node_commit_path(*node, p, (s != COMMIT_STATE_UNCHANGED)); if (s == COMMIT_STATE_UNCHANGED) { node->clearChildNodes(); } else { for (size_t i = 0; i < node->numChildNodes(); i++) { node->childAt(i)->setParent(node); } } return node; }