void commit_contracts(in contract::id_seq ids,
out contract::ptr_seq schedulable_contracts);
void cancel_contracts(in contract::id_seq ids);
+
+ /**
+ * Returns the list of commited contracts
+ *
+ * @param contracts Commited contracts
+ *
+ * @param utilization Utilization in the range 0-100
+ * (for visualization) or -1 if utilization cannot be
+ * calculated.
+ */
+ void get_contracts(out contract::ptr_seq contracts, out long utilization);
};
};
}
}
+static void get_contracts(fres_resource_manager obj,
+ fres_contract_ptr_seq** contracts_out,
+ CORBA_long* utilization, CORBA_Environment *ev)
+{
+ struct frm_data *frm = object_to_frm(obj);
+ struct fres_sa_contract *c;
+ fres_contract_ptr_seq *contracts;
+
+ contracts = forb_malloc(sizeof(*contracts));
+ if (!contracts) {
+ ev->major = FORB_EX_NO_MEMORY;
+ goto err;
+ }
+ contracts->_buffer = CORBA_sequence_fres_contract_ptr_allocbuf(frm->scenario->num_contracts);
+ CORBA_sequence_set_release(contracts, CORBA_TRUE);
+ contracts->_maximum = frm->scenario->num_contracts;
+ contracts->_length = 0;
+
+ fres_sa_scenario_for_each_contract(frm->scenario, c) {
+ if (c->committed) {
+ int i = contracts->_length;
+ contracts->_buffer[i] = fres_contract_duplicate(c->committed);
+ contracts->_length++;
+ }
+
+ }
+ *contracts_out = contracts;
+err:;
+}
+
static const struct forb_fres_resource_manager_impl frm_impl = {
.reserve_contracts = reserve_contracts,
.commit_contracts = commit_contracts,
.cancel_contracts = cancel_contracts,
+ .get_contracts = get_contracts,
};
/**