]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - fres/contract/fres_contract.h
Small additions: documentation, useful helper functions
[frescor/frsh.git] / fres / contract / fres_contract.h
1 #ifndef FRES_CONTRACT_H
2 #define FRES_CONTRACT_H
3
4 #include <fres_blocks.h>
5 #include <fres_container.h>
6 #include <ul_gavl.h>
7 #include <fres_contract_type.h>
8 #include <fres_contract_idl.h>
9 #include <forb/server_id.h>
10
11 struct fres_contract {
12         fres_contract_id_t id;
13         struct fres_container *container;       /**< Pointer to the container (opaque type). */
14 };
15
16 static inline int fres_contract_id_cmp(const fres_contract_id_t *a,
17                                        const fres_contract_id_t *b)
18 {
19         return forb_server_id_cmp((forb_server_id*)a,
20                                   (forb_server_id*)b);
21 }
22
23 static inline char *fres_contract_id_to_string(char *dest,
24                                                const fres_contract_id_t *id,
25                                                size_t n)
26 {
27         return forb_server_id_to_string(dest, (forb_server_id*)id, n);
28 }
29
30 struct fres_contract *fres_contract_new(void);
31 void fres_contract_destroy(struct fres_contract *contract);
32 struct fres_contract *fres_contract_duplicate(struct fres_contract *src);
33
34 static inline int
35 fres_contract_add_block(struct fres_contract *contract,
36                         enum fres_block_type type, void *block)
37 {
38         return fres_container_add_block(contract->container, type, block);
39 }
40 static inline void
41 fres_contract_del_block(struct fres_contract *contract,
42                         enum fres_block_type type)
43 {
44         fres_container_del_block(contract->container, type);
45 }
46
47 static inline void *
48 fres_contract_get_block(struct fres_contract *contract,
49                         enum fres_block_type type)
50 {
51         return fres_container_get_block(contract->container, type);
52 }
53
54 #define FRES_CONTRACT_ACCESSOR(type)                                    \
55         static inline int                                               \
56         fres_contract_add_##type(struct fres_contract *contract,        \
57                                  fres_block_##type *block)              \
58         {                                                               \
59                 return fres_container_add_##type(contract->container,   \
60                                                  block);                \
61         }                                                               \
62         static inline fres_block_##type *                               \
63         fres_contract_get_##type(struct fres_contract *contract)        \
64         {                                                               \
65                 return fres_container_get_##type(contract->container);  \
66         }                                                               \
67         static inline void                                              \
68         fres_contract_del_##type(struct fres_contract *contract)        \
69         {                                                               \
70                 fres_container_del_##type(contract->container);         \
71         }
72
73 FRES_CONTRACT_ACCESSOR(label)
74 FRES_CONTRACT_ACCESSOR(resource)
75 FRES_CONTRACT_ACCESSOR(basic)
76 FRES_CONTRACT_ACCESSOR(timing_reqs)
77 FRES_CONTRACT_ACCESSOR(spare_capacity)
78
79 #endif