Skip to content
GRAPH_NODE_TYPE

GRAPH_NODE_TYPE

Description

Recover the node payload type from a Graph(T) handle. Walks g -> slots -> (typed) slot -> data pointer -> T. This relies on the GraphSlot(T) definition above, which carries T *data rather than void *data.

Usage example (Cross-references)

Usage examples (Cross-references)
    /// TAGS: Graph, Deinit, Cleanup
    ///
    #define GraphDeinit(g) deinit_graph(GENERIC_GRAPH(g), sizeof(GRAPH_NODE_TYPE(g)))
    
    #endif // MISRA_STD_CONTAINER_GRAPH_INIT_H
    /// TAGS: Graph, Node, Delete, Commit
    ///
    #define GraphCommitChanges(g) graph_commit_changes(GENERIC_GRAPH(g), sizeof(GRAPH_NODE_TYPE(g)))
    
    #endif // MISRA_STD_CONTAINER_GRAPH_OPS_H
    /// TAGS: Graph, Memory, Clear
    ///
    #define GraphClear(g) clear_graph(GENERIC_GRAPH(g), sizeof(GRAPH_NODE_TYPE(g)))
    
    ///
    /// TAGS: Graph, Memory, Reserve
    ///
    #define GraphReserve(g, n) (ValidateGraph(g), reserve_graph(GENERIC_GRAPH(g), sizeof(GRAPH_NODE_TYPE(g)), (n)))
    
    ///
    /// TAGS: Graph, Node, Access
    ///
    #define GraphNodeAt(g, node_id) (*(GRAPH_NODE_TYPE(g) *)graph_node_ptr_at(GENERIC_GRAPH(g), (node_id)))
    
    ///
    /// TAGS: Graph, Node, Access, Pointer
    ///
    #define GraphNodePtrAt(g, node_id) ((GRAPH_NODE_TYPE(g) *)graph_node_ptr_at(GENERIC_GRAPH(g), (node_id)))
    
    ///
    /// TAGS: Graph, Node, Access, Handle
    ///
    #define GraphNodeData(g, node) (*(GRAPH_NODE_TYPE(g) *)graph_node_data_ptr_checked(GENERIC_GRAPH(g), (node)))
    
    ///
    /// TAGS: Graph, Node, Access, Pointer, Handle
    ///
    #define GraphNodeDataPtr(g, node) ((GRAPH_NODE_TYPE(g) *)graph_node_data_ptr_checked(GENERIC_GRAPH(g), (node)))
    
    ///
    #define GraphAddNodeL(g, lval)                                                                                         \
        (ValidateGraph(g),                                                                                                 \
         CHECK_TYPE_EQUIVALENCE(TYPE_OF(lval), GRAPH_NODE_TYPE(g)),                                                        \
         graph_push_node_owned(GENERIC_GRAPH(g), &(lval), sizeof(GRAPH_NODE_TYPE(g))))
        (ValidateGraph(g),                                                                                                 \
         CHECK_TYPE_EQUIVALENCE(TYPE_OF(lval), GRAPH_NODE_TYPE(g)),                                                        \
         graph_push_node_owned(GENERIC_GRAPH(g), &(lval), sizeof(GRAPH_NODE_TYPE(g))))
    
    ///
    #define GraphAddNodeR(g, rval)                                                                                         \
        (ValidateGraph(g),                                                                                                 \
         CHECK_TYPE_CONVERTIBLE(GRAPH_NODE_TYPE(g), rval),                                                                 \
         graph_push_node(GENERIC_GRAPH(g), &LVAL_AS(GRAPH_NODE_TYPE(g), rval), sizeof(GRAPH_NODE_TYPE(g))))
        (ValidateGraph(g),                                                                                                 \
         CHECK_TYPE_CONVERTIBLE(GRAPH_NODE_TYPE(g), rval),                                                                 \
         graph_push_node(GENERIC_GRAPH(g), &LVAL_AS(GRAPH_NODE_TYPE(g), rval), sizeof(GRAPH_NODE_TYPE(g))))
    
    ///
Last updated on