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