/* Search::ContextGraph - XS implementation (C) 2003 Schuyler Erle, Maciej Ceglowski This is free software, released under the GPL. See LICENSE for more information. */ typedef struct edge_t { int sink; float weight; } Edge; typedef enum node_type_t { UNUSED = 0, TERM, DOCUMENT } NodeType; typedef struct node_t { //NodeType type; int degree; int capacity; float energy; Edge * edges; } Node; typedef struct graph_t { int size; int capacity; Node * nodes; float * energy; float activationThreshold; float collectionThreshold; float startingEnergy; long maxDepth; long numCalls; int debug; int indent; } Graph; Edge *new_edge ( Edge *edge, long sink, float weight ); Node *new_node ( Node *node, NodeType type, long capacity ); int preallocate( Graph *graph, int capacity ); void presize( Graph *graph, long node, int size ); Graph *new_graph ( Graph *graph, long capacity, float activationThreshold, float collectionThreshold, long maxDepth ); void free_node (Node *node); void free_graph (Graph *graph); void reset_graph( Graph *graph ); Edge *add_edge ( Node *node, long sink, float weight ); Node *add_node ( Graph *graph, long id, NodeType type, long capacity ); int energize_node( Graph *graph, long id, float energy, int isStartingNode ); int compare_results( const void *a, const void *b ); Edge *collect_results( Graph *graph ); Edge *search_graph( Graph *graph, float startEnergy, long num_ids, long ids[]);