struct loc_network* network;
- // Set if deleted
- int deleted:1;
+ // Flags
+ enum loc_network_tree_node_flags {
+ NETWORK_TREE_NODE_DELETED = (1 << 0),
+ } flags;
};
int loc_network_tree_new(struct loc_ctx* ctx, struct loc_network_tree** tree) {
return 0;
}
+static int loc_network_tree_node_has_flag(struct loc_network_tree_node* node, int flag) {
+ return node->flags & flag;
+}
+
struct loc_network_tree_node* loc_network_tree_get_root(struct loc_network_tree* tree) {
return loc_network_tree_node_ref(tree->root);
}
}
// If the node existed, but has been deleted, we undelete it
- if (*n && (*n)->deleted) {
- (*n)->deleted = 0;
+ if (*n && loc_network_tree_node_has_flag(*n, NETWORK_TREE_NODE_DELETED)) {
+ (*n)->flags &= ~NETWORK_TREE_NODE_DELETED;
// If the desired node doesn't exist, yet, we will create it
} else if (!*n) {
int r;
// If the node has been deleted, don't process it
- if (node->deleted)
+ if (loc_network_tree_node_has_flag(node, NETWORK_TREE_NODE_DELETED))
return 0;
// Finding a network ends the walk here
// Mark the node as deleted if it was a leaf
if (!node->zero && !node->one)
- node->deleted = 1;
+ node->flags |= NETWORK_TREE_NODE_DELETED;
return 0;
}
size_t counter = 1;
// Don't count deleted nodes
- if (node->deleted)
+ if (loc_network_tree_node_has_flag(node, NETWORK_TREE_NODE_DELETED))
return 0;
if (node->zero)
int r1 = 1;
// Return for nodes that have already been deleted
- if (n->deleted)
+ if (loc_network_tree_node_has_flag(n, NETWORK_TREE_NODE_DELETED))
goto DELETE;
// Delete zero