@kv  0.0.4
Library for graph problems in C and Python
grapharray.h
1 
18 #if !defined(AT_CORE_H_INSIDE)
19 #error "Only <at/core.h> can be included directly."
20 #endif
21 
22 #ifndef AT_GRAPHARRAY_H
23 #define AT_GRAPHARRAY_H
24 #include <stdint.h>
25 #include <at/core.h>
26 AT_BEGIN_DECLS
27 /*=============================================================================
28  STRUCTURE
29  ============================================================================*/
30 
31 typedef enum {
32  AT_ADJACENCY_4 = 4,
33  AT_ADJACENCY_8 = 8,
34  AT_ADJACENCY_6 = 6,
35  AT_ADJACENCY_18 = 18,
36  AT_ADJACENCY_26 = 26,
37  AT_ADJACENCY_CUSTOM = 1
38 }AtAdjacency;
39 
43 typedef struct AtGraphArray{
44  uint64_t* neighbors; /*00-8*/
45  AtArrayHeader* h; /*08-8*/
46  double * weights; /*16-8*/
47  uint8_t * active; /*24-8*/
48  uint8_t adjacency; /*32-1*/
49  uint8_t padding[6]; /*33-7*/
50 }AtGraphArray; /* Total: 40B
51 
52 /*=============================================================================
53  FUNCTIONS
54  ============================================================================*/
55 #define at_grapharray_new(array, adjacency, weighting) _Generic((array), \
56  AtArrayU8*: at_grapharrayu8_new)(array, adjacency, weighting)
57 typedef double
58 (*AtWeightingFuncu8) (AtArrayU8* graph, uint64_t s, uint64_t t, void* params);
59 
63 typedef struct AtWeighting{
64  AtWeightingFuncu8 f;
65  void* params;
67 
68 AtWeighting at_wdiffabs;
69 AtWeighting at_wdiffabsc;
70 AtWeighting at_wdiffabscalpha;
71 
72 // Weighting functions
73 //---------------------
81 double
82 at_weighting_diff_abs(AtArrayU8* array, uint64_t s, uint64_t t, void* params);
90 double
91 at_weighting_diff_absc(AtArrayU8* array, uint64_t s, uint64_t t, void* params);
100 double
101 at_weighting_diff_absc_alpha(AtArrayU8* array, uint64_t s, uint64_t t, void* params);
102 
103 // GraphArray functions
104 //---------------------
105 
111 at_grapharray_create();
112 
119 at_grapharrayu8_new(AtArrayU8* array,
120  AtAdjacency adjacency,
121  AtWeighting w);
126 void
127 at_grapharrayu8_renew_edges(AtGraphArray* g);
134 void
135 at_grapharray_remove_arc(AtGraphArray* g, uint64_t s, uint64_t t);
142 void
143 at_grapharray_remove_arcs(AtGraphArray* g, uint64_t* pairs, uint64_t n);
144 
151 void
152 at_grapharray_add_arc(AtGraphArray* g, uint64_t s, uint64_t t);
153 
160 void
161 at_grapharray_remove_edge(AtGraphArray* grapharray, uint64_t s, uint64_t t);
162 
169 void
170 at_grapharray_add_edge(AtGraphArray* grapharray, uint64_t s, uint64_t t);
171 
179 double
180 at_grapharray_get(AtGraphArray* graph, uint64_t s, uint64_t t);
188 uint64_t
189 at_grapharray_get_indexr(AtGraphArray* g, uint64_t s, uint64_t t);
194 void
195 at_grapharray_destroy(AtGraphArray** grapharray);
196 AT_END_DECLS
197 #endif
uint8_t * active
Definition: grapharray.h:47
AtWeightingFuncu8 f
Definition: grapharray.h:64
uint64_t * neighbors
Definition: grapharray.h:44
AtArrayHeader * h
Definition: grapharray.h:45
A directed weighted grid graph.
Definition: grapharray.h:43
double * weights
Definition: grapharray.h:46
uint8_t adjacency
Definition: grapharray.h:48
Weighting information.
Definition: grapharray.h:63
uint8_t padding[6]
Definition: grapharray.h:49
A directed weighted grid graph.
Definition: array.h:40
void * params
Definition: grapharray.h:65