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>
10 struct fres_contract {
11 fres_contract_id_t id;
12 struct fres_container *container; /**< Pointer to the container (opaque type). */
16 struct fres_contract *fres_contract_new(void);
17 void fres_contract_destroy(struct fres_contract *contract);
18 struct fres_contract *fres_contract_duplicate(struct fres_contract *src);
20 #define FRES_CONTRACT_ACCESSOR(type) \
22 fres_contract_add_##type(struct fres_contract *contract, \
23 fres_block_##type *block) \
25 return fres_container_add_##type(contract->container, \
28 static inline fres_block_##type * \
29 fres_contract_get_##type(struct fres_contract *contract) \
31 return fres_container_get_##type(contract->container); \
34 fres_contract_del_##type(struct fres_contract *contract) \
36 fres_container_del_##type(contract->container); \
39 FRES_CONTRACT_ACCESSOR(label)
40 FRES_CONTRACT_ACCESSOR(resource)
41 FRES_CONTRACT_ACCESSOR(basic)
42 FRES_CONTRACT_ACCESSOR(timing_reqs)
43 FRES_CONTRACT_ACCESSOR(spare_capacity)