ADAPT / lib / include / task_graph.h
task_graph.h
Raw
#include <stdint.h>
#include "task.h"

#ifndef TASK_GRAPH_H
#define TASK_GRAPH_H


#define INIT_TASK_NODE_EDGES 8

struct task_dep_node
{
    struct task *task;
    uint32_t *in_edges, *out_edges;
    size_t num_in_edges, num_out_edges;
    size_t max_in_edges, max_out_edges;
    struct task_dep_node *next;
};


void task_dep_node_init(struct task_dep_node *d_n, struct task *t);
//sets the max equal to num and allocates that much memory instead.
void task_dep_node_init_explicit(struct task_dep_node *d_n, struct task *t,
				 size_t max_in_edges, size_t max_out_edges);
void task_dep_node_add_in(struct task_dep_node *d_n, uint32_t t_id);
void task_dep_node_rem_in(struct task_dep_node *d_n, uint32_t t_id);
void task_dep_node_add_out(struct task_dep_node *d_n, uint32_t t_id);
void task_dep_node_rem_out(struct task_dep_node *d_n, uint32_t t_id);
void task_dep_node_destroy(struct task_dep_node *d_n);
void task_dep_node_print(struct task_dep_node *d_n);

struct task_graph
{
    //This is a hash table
    // list of primes: 17, 37, 47, 67, 97
    struct task_dep_node **dep_nodes_hash;
    //how large the hash table should be.
    uint32_t num_cells;
};

void task_graph_init(struct task_graph *d_g, uint32_t init_size);
void task_graph_add(struct task_graph *d_g, struct task_dep_node *d_n);
void task_graph_rem(struct task_graph *d_g, struct task_dep_node *d_n);
void task_graph_destroy(struct task_graph *d_g);
void task_graph_print(struct task_graph *d_g);
struct task_dep_node *task_graph_get(struct task_graph *d_g, uint32_t t_id);


#endif