diff options
Diffstat (limited to 'ctrl/facemgr/src/facelet.c')
-rw-r--r-- | ctrl/facemgr/src/facelet.c | 70 |
1 files changed, 38 insertions, 32 deletions
diff --git a/ctrl/facemgr/src/facelet.c b/ctrl/facemgr/src/facelet.c index 2308f3b6d..ac84f5f70 100644 --- a/ctrl/facemgr/src/facelet.c +++ b/ctrl/facemgr/src/facelet.c @@ -149,6 +149,12 @@ ERR_MALLOC: return NULL; } +unsigned +facelet_get_id(facelet_t * facelet) +{ + return facelet->id; +} + void facelet_set_id(facelet_t * facelet, unsigned id) { @@ -378,18 +384,7 @@ void facelet_free(facelet_t * facelet) { /* Free up routes */ - hicn_route_t ** route_array; - int n = route_set_get_array(facelet->routes, &route_array); - if (n < 0) { - ERROR("[facelet_free] Error getting route set associated to facelet"); - } else { - for (unsigned i = 0; i < n; i++) { - hicn_route_t * route = route_array[i]; - route_set_remove(facelet->routes, route, NULL); - hicn_route_free(route); - } - } - free(route_array); + route_set_clear(facelet->routes); route_set_free(facelet->routes); free(facelet); } @@ -433,21 +428,8 @@ facelet_dup(const facelet_t * current_facelet) return facelet; ERR_ROUTE: - { - /* Free all routes */ - hicn_route_t ** new_route_array; - int n = route_set_get_array(facelet->routes, &new_route_array); - if (n < 0) { - ERROR("[facelet_free] Error getting route set associated to facelet"); - } else { - for (unsigned i = 0; i < n; i++) { - hicn_route_t * new_route = new_route_array[i]; - hicn_route_free(new_route); - } - } - free(route_array); + /* This will free all routes */ facelet_free(facelet); - } ERR_CREATE: return NULL; } @@ -563,6 +545,14 @@ facelet_match(const facelet_t * facelet, const facelet_t * facelet_match) #define _(TYPE, NAME) MATCH_ATTRIBUTE(TYPE, NAME); foreach_facelet_attr #undef _ + +#if 0 + char facelet_s[MAXSZ_FACELET]; + facelet_snprintf(facelet_s, MAXSZ_FACELET, facelet_match); + DEBUG("MATCHED FACELET %s", facelet_s); + facelet_snprintf(facelet_s, MAXSZ_FACELET, facelet); + DEBUG(" WITH %s", facelet_s); +#endif return true; } @@ -721,8 +711,15 @@ int facelet_merge(facelet_t * facelet, facelet_t * facelet_to_merge) ERROR("[facelet_free] Error getting route set associated to facelet"); } else { for (unsigned i = 0; i < n; i++) { - hicn_route_t * route = hicn_route_dup(route_array[i]); - route_set_add(facelet->routes, route); + hicn_route_t * route = route_array[i]; + hicn_route_t * route_found = NULL; + if (route_set_get(facelet->routes, route, &route_found) < 0) { + ERROR("Error searching for route"); + continue; + } + if (route_found) + continue; + route_set_add(facelet->routes, hicn_route_dup(route)); } } free(route_array); @@ -903,6 +900,12 @@ facelet_get_status(const facelet_t * facelet) return facelet->status; } +void +facelet_set_status(facelet_t * facelet, facelet_status_t status) +{ + facelet->status = status; +} + #define SET_ATTR_STATUS_CLEAN(TYPE, NAME) \ do { \ if (facelet->NAME ## _status == FACELET_ATTR_STATUS_DIRTY) \ @@ -910,14 +913,11 @@ do { \ } while (0) void -facelet_set_status(facelet_t * facelet, facelet_status_t status) +facelet_set_attr_clean(facelet_t * facelet) { - if (status == FACELET_STATUS_CLEAN) { #define _(TYPE, NAME) SET_ATTR_STATUS_CLEAN(TYPE, NAME); foreach_facelet_attr #undef _ - } - facelet->status = status; } void @@ -1007,6 +1007,12 @@ facelet_remove_route(facelet_t * facelet, hicn_route_t * route, hicn_route_t ** } int +facelet_clear_routes(facelet_t * facelet) +{ + return route_set_clear(facelet->routes); +} + +int facelet_get_route_array(const facelet_t * facelet, hicn_route_t *** route_array) { return route_set_get_array(facelet->routes, route_array); |