zone_node_t *binode_node(zone_node_t *node, bool second)
{
- if (node != NULL && (node->flags & NODE_FLAGS_BINODE)) {
- if (second && !(node->flags & NODE_FLAGS_SECOND)) {
- return node + 1;
- }
- if (!second && (node->flags & NODE_FLAGS_SECOND)) {
- return node - 1;
- }
+ if (unlikely(node == NULL || !(node->flags & NODE_FLAGS_BINODE))) {
+ return node;
}
- return node;
+ return node + (second - (int)((node->flags & NODE_FLAGS_SECOND) >> 9));
}
bool binode_rdata_shared(zone_node_t *node, uint16_t type)
/*! \brief Node is the zone Apex. */
NODE_FLAGS_APEX = 1 << 6,
/*! \brief Is this i bi-node? */
- NODE_FLAGS_BINODE = 1 << 8,
+ NODE_FLAGS_BINODE = 1 << 8, // this value shall be fixed
/*! \brief Is this the second half of bi-node? */
- NODE_FLAGS_SECOND = 1 << 9,
+ NODE_FLAGS_SECOND = 1 << 9, // this value shall be fixed
/*! \brief The node shall be deleted. It's just not because it's a bi-node and the counterpart still exists. */
NODE_FLAGS_DELETED = 1 << 10,
};