5#ifndef _DAO_GRAPH_FEATURE_ARC_WORKER_H_
6#define _DAO_GRAPH_FEATURE_ARC_WORKER_H_
11#include <rte_bitops.h>
31 STAILQ_ENTRY(dao_graph_feature_node_list) next_feature;
34 struct rte_node_register *feature_node;
43 rte_edge_t edge_to_this_feature;
132 alignas(RTE_CACHE_LINE_SIZE) RTE_MARKER cacheline1;
143 uint64_t feature_bit_mask_by_index[];
159#define dao_graph_feature_arc_get(dfl) ((struct dao_graph_feature_arc *)dfl)
167__bsf64_safe(uint64_t v, uint8_t *pos)
172 *pos = (uint8_t)rte_ctz64(v);
257#ifdef DAO_GRAPH_FEATURE_ARC_DEBUG
270 bitmask = UINT64_MAX << (*feature + 1);
273 return __bsf64_safe(bitmask, feature);
287 rte_prefetch0((uint8_t *)dfl +
289 (index *
sizeof(uint64_t *))));
323#ifdef DAO_GRAPH_FEATURE_ARC_DEBUG
327 if (unlikely(!feature))
334 if (*feature == DAO_GRAPH_FEATURE_INVALID_VALUE)
377#ifdef DAO_GRAPH_FEATURE_ARC_DEBUG
381 if (unlikely(feature >= dao_graph_feature_cast(dfl->
max_features)))
384 if (feature != DAO_GRAPH_FEATURE_INVALID_VALUE)
412 uint32_t index, rte_edge_t *edge,
420#ifdef DAO_GRAPH_FEATURE_ARC_DEBUG
425 if (unlikely(!edge && !
data))
460 uint32_t index, rte_edge_t *edge,
468#ifdef DAO_GRAPH_FEATURE_ARC_DEBUG
473 if (unlikely(!edge && !
data))
505 uint32_t index, rte_edge_t *edge,
508 if (feature == DAO_GRAPH_FEATURE_INVALID_VALUE)
#define DAO_GRAPH_FEATURE_MAX_PER_ARC
uint8_t dao_graph_feature_t
#define DAO_GRAPH_FEATURE_ARC_NAMELEN
uint64_t dao_graph_feature_arc_t
static int dao_graph_feature_arc_feature_data_get(struct dao_graph_feature_arc *dfl, dao_graph_feature_t feature, uint32_t index, rte_edge_t *edge, int64_t *data)
static int dao_graph_feature_arc_has_first_feature(struct dao_graph_feature_arc *dfl, uint32_t index, dao_graph_feature_t *feature)
static int dao_graph_feature_arc_next_feature_data_get(struct dao_graph_feature_arc *dfl, dao_graph_feature_t feature, uint32_t index, rte_edge_t *edge, int64_t *data)
static void __dao_graph_prefetch_data_prefetch(struct dao_graph_feature_arc *dfl, int index, dao_graph_feature_t feature)
static int dao_graph_feature_arc_num_enabled_features(struct dao_graph_feature_arc *arc)
static void dao_graph_feature_arc_prefetch(struct dao_graph_feature_arc *dfl, uint32_t index)
struct feature_arc_main dao_graph_feature_arc_main_t
static int dao_graph_feature_arc_has_feature(struct dao_graph_feature_arc *dfl, uint32_t index, dao_graph_feature_t *feature)
static int dao_graph_feature_arc_has_next_feature(struct dao_graph_feature_arc *dfl, uint32_t index, dao_graph_feature_t *feature)
struct dao_graph_feature_data dao_graph_feature_data_t
static void dao_graph_feature_data_prefetch(struct dao_graph_feature_arc *dfl, uint32_t index, dao_graph_feature_t feature)
static struct dao_graph_feature_data * dao_graph_feature_data_get(struct dao_graph_feature *df, uint8_t feature_index)
static struct dao_graph_feature * dao_graph_feature_get(struct dao_graph_feature_arc *dfl, uint32_t index)
static int dao_graph_feature_arc_first_feature_data_get(struct dao_graph_feature_arc *dfl, dao_graph_feature_t feature, uint32_t index, rte_edge_t *edge, int64_t *data)
struct rte_node_register * start_node
uint64_t feature_bit_mask_by_index[]
STAILQ_HEAD(, dao_graph_feature_node_list) all_features
int runtime_enabled_features
struct dao_graph_feature * features_by_index
uint32_t feature_arc_index
rte_edge_t edge_to_next_feature
rte_edge_t edge_to_this_feature
struct dao_graph_feature_node_list * node_info
uint32_t feature_data_index
uint32_t num_enabled_features
struct dao_graph_feature_node_list * node_info
struct dao_graph_feature_data feature_data[DAO_GRAPH_FEATURE_MAX_PER_ARC]
uint32_t num_feature_arcs
dao_graph_feature_arc_t feature_arcs[]
uint32_t max_feature_arcs