1 #ifndef FRES_CONTRACT_H
2 #define FRES_CONTRACT_H
4 #include <fres_blocks.h>
5 #include <fres_container.h>
7 #include <fres_contract_type.h>
8 #include <fres_contract_idl.h>
9 #include <forb/server_id.h>
11 struct fres_contract {
12 fres_contract_id_t id;
13 struct fres_container *container; /**< Pointer to the container (opaque type). */
16 static inline int fres_contract_id_cmp(const fres_contract_id_t *a,
17 const fres_contract_id_t *b)
19 return forb_server_id_cmp((forb_server_id*)a,
23 static inline char *fres_contract_id_to_string(char *dest,
24 const fres_contract_id_t *id,
27 return forb_server_id_to_string(dest, (forb_server_id*)id, n);
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);
35 fres_contract_add_block(struct fres_contract *contract,
36 enum fres_block_type type, void *block)
38 return fres_container_add_block(contract->container, type, block);
41 fres_contract_del_block(struct fres_contract *contract,
42 enum fres_block_type type)
44 fres_container_del_block(contract->container, type);
48 fres_contract_get_block(struct fres_contract *contract,
49 enum fres_block_type type)
51 return fres_container_get_block(contract->container, type);
55 fres_contract_to_string(char *dest, size_t size, const struct fres_contract *c);
58 fres_contract_print(char *prefix, const struct fres_contract *c);
60 #define FRES_CONTRACT_ACCESSOR(type) \
62 fres_contract_add_##type(struct fres_contract *contract, \
63 fres_block_##type *block) \
65 return fres_container_add_##type(contract->container, \
68 static inline fres_block_##type * \
69 fres_contract_get_##type(struct fres_contract *contract) \
71 return fres_container_get_##type(contract->container); \
74 fres_contract_del_##type(struct fres_contract *contract) \
76 fres_container_del_##type(contract->container); \
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)