Show "unchanged color" as checkered pattern
[colorize.git] / lib / darray.h
1 #ifndef _ARRAY_H
2 #define _ARRAY_H
3
4 /* enable check function for access outside array data
5  * this requres darrayCheckPr to be called before each access
6  * when disabled, the darrayCheckPr call is not compiled at all
7  */
8 //#define DARRAY_CHECK
9
10 // n-dimensional arrays of double type elements
11 //
12
13 struct double_array {
14         struct double_array     *next;
15         int                     ndimensions;
16         int                     *dimension;
17         const char              *file;
18         int                     line;
19         unsigned long           size; /* size in bytes */
20         double                  *data;
21         unsigned int            inuse; /* set to a magick, if in use */
22 };
23
24 typedef struct double_array darray_t;
25
26 #define darrayGetNumberOfDimensions(array) (array->ndimensions)
27 #define darrayGetDimensions(array) (array->dimension)
28 #define darrayGetPr(array) (array->data)
29 unsigned long darrayGetSize(const darray_t *array);
30
31 darray_t *_darrayCreate(int ndimensions, int *dimension, const char *file, int line);
32 #define darrayCreate(n, d) _darrayCreate(n, d, __FILE__, __LINE__)
33 void darrayDestroy(darray_t *array);
34 void darrayMove(darray_t *src, darray_t *dst);
35 darray_t *darrayClone(darray_t *array);
36 void darrayInfo(const darray_t *array);
37 int write_darray(const darray_t *array, const char *filename);
38 darray_t *read_darray(const char *filename);
39 int compare_darray(const darray_t *first, const darray_t *second, double threshold);
40 int compare_darray_file(const darray_t *first, const char *file, double threshold);
41 void darrayDone(void);
42 void darrayCheckList(void);
43
44 #ifdef DARRAY_CHECK
45 void darrayCheckPr(const darray_t *array, const double *ptr, int num);
46 #else
47 #define darrayCheckPr(array, ptr, num)
48 #endif
49
50 #endif /* _ARRAY_H */