]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - fres/contract/fres_contract.h
Merge branch 'master' of rtime.felk.cvut.cz:/var/git/frescor/frsh_forb.git
[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 int
55 fres_contract_to_string(char *dest, size_t size, const struct fres_contract *c);
56
57 void
58 fres_contract_print(char *prefix, const struct fres_contract *c);
59
60 #define FRES_CONTRACT_ACCESSOR(type)                                    \
61         static inline int                                               \
62         fres_contract_add_##type(struct fres_contract *contract,        \
63                                  fres_block_##type *block)              \
64         {                                                               \
65                 return fres_container_add_##type(contract->container,   \
66                                                  block);                \
67         }                                                               \
68         static inline fres_block_##type *                               \
69         fres_contract_get_##type(struct fres_contract *contract)        \
70         {                                                               \
71                 return fres_container_get_##type(contract->container);  \
72         }                                                               \
73         static inline void                                              \
74         fres_contract_del_##type(struct fres_contract *contract)        \
75         {                                                               \
76                 fres_container_del_##type(contract->container);         \
77         }
78
79 FRES_CONTRACT_ACCESSOR(label)
80 FRES_CONTRACT_ACCESSOR(resource)
81 FRES_CONTRACT_ACCESSOR(basic)
82 FRES_CONTRACT_ACCESSOR(timing_reqs)
83 FRES_CONTRACT_ACCESSOR(spare_capacity)
84
85 #endif