static bool Connections_is_cyclic(const Connections* graph) { rassert(graph != NULL); // Reset testing states { AAiter* iter = AAiter_init(AAITER_AUTO, graph->nodes); Device_node* node = AAiter_get_at_least(iter, ""); while (node != NULL) { Device_node_reset_cycle_test_state(node); node = AAiter_get_next(iter); } } // Test for cycles { AAiter* iter = AAiter_init(AAITER_AUTO, graph->nodes); Device_node* node = AAiter_get_at_least(iter, ""); while (node != NULL) { if (Device_node_cycle_in_path(node)) return true; node = AAiter_get_next(iter); } } return false; }
void Event_cache_reset(Event_cache* cache) { rassert(cache != NULL); AAiter* iter = AAiter_init(AAITER_AUTO, cache->cache); Event_state* es = AAiter_get_at_least(iter, ""); while (es != NULL) { Event_state_reset(es); es = AAiter_get_next(iter); } return; }
void Channel_cv_state_reset(Channel_cv_state* state) { rassert(state != NULL); const Entry* key = Entry_init(ENTRY_AUTO, ""); AAiter* iter = AAiter_init(AAITER_AUTO, state->tree); Entry* entry = AAiter_get_at_least(iter, key); while (entry != NULL) { entry->is_set = false; entry->carry = false; entry = AAiter_get_next(iter); } return; }
bool Connections_check_connections( const Connections* graph, char err[DEVICE_CONNECTION_ERROR_LENGTH_MAX]) { rassert(graph != NULL); rassert(err != NULL); AAiter* iter = AAiter_init(AAITER_AUTO, graph->nodes); Device_node* node = AAiter_get_at_least(iter, ""); while (node != NULL) { if (!Device_node_check_connections(node, err)) return false; node = AAiter_get_next(iter); } return true; }
bool Input_map_is_valid(const Input_map* im, const Bit_array* existents) { rassert(im != NULL); rassert(existents != NULL); const Entry* key = ENTRY_KEY(0); AAiter* iter = AAiter_init(AAITER_AUTO, im->map); const Entry* pair = AAiter_get_at_least(iter, key); while (pair != NULL) { if (!Bit_array_get(existents, pair->input)) return false; pair = AAiter_get_next(iter); } return true; }