aboutsummaryrefslogtreecommitdiffstats
path: root/l4array2.h
blob: 964f92c5770cb2119e38df1963c96df434aa1a60 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* vim: set sw=4 ts=4 sts=4 et: */
#ifndef LBS_ARRAY2_H
#define LBS_ARRAY2_H

#include <l4common.h>

typedef struct LbsArray2Struct {
    /*< private >*/
    size_t size;        /* element size */
    size_t lenx;        /* x length */
    size_t leny;        /* y length */
    unsigned ref_count; /* reference count */

    /*< public >*/
    char data[];        /* data */
} LbsArray2;

#define    LBS_ARRAY2(x)            ((LbsArray2*)(x))

LbsArray2* lbs_array2_new           (size_t size, int lenx, int leny);
void       lbs_array2_copy_in       (LbsArray2* array2, const void* copy_in);
void       lbs_array2_copy_out      (LbsArray2* array2, void* copy_out);

#define   lbs_array2_ref(array2) \
    (lbs_array2_ref_generic (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)))
#define   lbs_array2_unref(array2) \
    (lbs_array2_unref_generic (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)))
void*      lbs_array2_ref_generic   (void* array2);
void       lbs_array2_unref_generic (void* array2);

#define   lbs_array2_get_data(array2) \
    (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)->data)
#define   lbs_array2_get_size(array2) \
    (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)->size)
#define   lbs_array2_get_lenx(array2) \
    (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)->lenx)
#define   lbs_array2_get_leny(array2) \
    (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)->leny)
#define   lbs_array2_get_ref_count(array2) \
    (LBS_COMMON_CHECK_TYPE ((array2), LbsArray2*)->ref_count)

#define   lbs_array2_v(array2,type,x,y) \
    (*(((type*)((array2)->data)) + \
    ((x)*((array2)->leny))+(y)))
#define   lbs_array2_vp(array2,x,y) \
    ((void*)(((char*)((array2)->data)) + \
    ((array2)->size)*((x)*((array2)->leny)+(y))))

#endif /* LBS_ARRAY2_H */