This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/674-add-element-type-to-array-list in repository https://gitbox.apache.org/repos/asf/celix.git
commit ba42e664ca5eff9e43a2d0df1400538161cac2d7 Author: Pepijn Noltes <[email protected]> AuthorDate: Sun Feb 4 19:07:24 2024 +0100 #674 Refactor array list compare in ctx, reg and rsa --- .../discovery_common/src/endpoint_discovery_poller.c | 8 ++++++-- .../rsa_common/src/remote_interceptors_handler.c | 10 +++++----- libs/framework/include_deprecated/service_registry.h | 2 +- libs/framework/src/bundle_context.c | 4 ++-- libs/framework/src/service_registry.c | 10 +++++----- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bundles/remote_services/discovery_common/src/endpoint_discovery_poller.c b/bundles/remote_services/discovery_common/src/endpoint_discovery_poller.c index edf560fc..567ff84b 100644 --- a/bundles/remote_services/discovery_common/src/endpoint_discovery_poller.c +++ b/bundles/remote_services/discovery_common/src/endpoint_discovery_poller.c @@ -195,7 +195,9 @@ celix_status_t endpointDiscoveryPoller_addDiscoveryEndpoint(endpoint_discovery_p // Avoid memory leaks when adding an already existing URL... celix_array_list_t* endpoints = hashMap_get(poller->entries, url); if (endpoints == NULL) { - endpoints = celix_arrayList_createWithEquals(endpointDiscoveryPoller_endpointDescriptionEquals); + celix_array_list_create_options_t opts = CELIX_EMPTY_ARRAY_LIST_CREATE_OPTIONS; + opts.equalsCallback = endpointDiscoveryPoller_endpointDescriptionEquals; + endpoints = celix_arrayList_createWithOptions(&opts); if (endpoints) { celix_logHelper_debug(*poller->loghelper, "ENDPOINT_POLLER: add new discovery endpoint with url %s", url); @@ -253,7 +255,9 @@ celix_status_t endpointDiscoveryPoller_removeDiscoveryEndpoint(endpoint_discover celix_status_t endpointDiscoveryPoller_poll(endpoint_discovery_poller_t* poller, char* url, celix_array_list_t* currentEndpoints) { // create an arraylist with a custom equality test to ensure we can find endpoints properly... - celix_array_list_t* updatedEndpoints = celix_arrayList_createWithEquals(endpointDiscoveryPoller_endpointDescriptionEquals); + celix_array_list_create_options_t opts = CELIX_EMPTY_ARRAY_LIST_CREATE_OPTIONS; + opts.equalsCallback = endpointDiscoveryPoller_endpointDescriptionEquals; + celix_array_list_t* updatedEndpoints = celix_arrayList_createWithOptions(&opts); if (!updatedEndpoints) { return CELIX_ENOMEM; } diff --git a/bundles/remote_services/rsa_common/src/remote_interceptors_handler.c b/bundles/remote_services/rsa_common/src/remote_interceptors_handler.c index 65c25207..591e7322 100644 --- a/bundles/remote_services/rsa_common/src/remote_interceptors_handler.c +++ b/bundles/remote_services/rsa_common/src/remote_interceptors_handler.c @@ -42,7 +42,7 @@ struct remote_interceptors_handler { celix_thread_mutex_t lock; }; -static int referenceCompare(const void *a, const void *b); +static int referenceCompare(celix_array_list_entry_t a, celix_array_list_entry_t b); static void remoteInterceptorsHandler_addInterceptor(void *handle, void *svc, const celix_properties_t *props); static void remoteInterceptorsHandler_removeInterceptor(void *handle, void *svc, const celix_properties_t *props); @@ -104,7 +104,7 @@ void remoteInterceptorsHandler_addInterceptor(void *handle, void *svc, const cel entry->interceptor = svc; celix_arrayList_add(handler->interceptors, entry); - celix_arrayList_sort(handler->interceptors, referenceCompare); + celix_arrayList_sortEntries(handler->interceptors, referenceCompare); } celixThreadMutex_unlock(&handler->lock); @@ -197,9 +197,9 @@ void remoteInterceptorHandler_invokePostProxyCall(remote_interceptors_handler_t celixThreadMutex_unlock(&handler->lock); } -int referenceCompare(const void *a, const void *b) { - const entry_t *aEntry = a; - const entry_t *bEntry = b; +int referenceCompare(celix_array_list_entry_t a, celix_array_list_entry_t b) { + const entry_t *aEntry = a.voidPtrVal; + const entry_t *bEntry = b.voidPtrVal; long servIdA = celix_properties_getAsLong(aEntry->properties, CELIX_FRAMEWORK_SERVICE_ID, 0); long servIdB = celix_properties_getAsLong(bEntry->properties, CELIX_FRAMEWORK_SERVICE_ID, 0); diff --git a/libs/framework/include_deprecated/service_registry.h b/libs/framework/include_deprecated/service_registry.h index 84a55104..7cdb785d 100644 --- a/libs/framework/include_deprecated/service_registry.h +++ b/libs/framework/include_deprecated/service_registry.h @@ -152,7 +152,7 @@ CELIX_FRAMEWORK_EXPORT char* celix_serviceRegistry_createFilterFor( * Find services and return a array list of service ids (long). * Caller is responsible for freeing the returned array list. */ -CELIX_FRAMEWORK_EXPORT celix_array_list_t* celix_serviceRegisrty_findServices(celix_service_registry_t* registry, const char* filter); +CELIX_FRAMEWORK_EXPORT celix_array_list_t* celix_serviceRegistry_findServices(celix_service_registry_t* registry, const char* filterStr); #ifdef __cplusplus diff --git a/libs/framework/src/bundle_context.c b/libs/framework/src/bundle_context.c index 0f0bc344..e1075e71 100644 --- a/libs/framework/src/bundle_context.c +++ b/libs/framework/src/bundle_context.c @@ -1365,7 +1365,7 @@ long celix_bundleContext_findServiceWithOptions(celix_bundle_context_t *ctx, con long result = -1L; char* filter = celix_serviceRegistry_createFilterFor(ctx->framework->registry, opts->serviceName, opts->versionRange, opts->filter); if (filter != NULL) { - celix_array_list_t *svcIds = celix_serviceRegisrty_findServices(ctx->framework->registry, filter); + celix_array_list_t *svcIds = celix_serviceRegistry_findServices(ctx->framework->registry, filter); if (svcIds != NULL && celix_arrayList_size(svcIds) > 0) { result = celix_arrayList_getLong(svcIds, 0); } @@ -1388,7 +1388,7 @@ celix_array_list_t* celix_bundleContext_findServicesWithOptions(celix_bundle_con celix_array_list_t* result = NULL; char* filter = celix_serviceRegistry_createFilterFor(ctx->framework->registry, opts->serviceName, opts->versionRange, opts->filter); if (filter != NULL) { - result = celix_serviceRegisrty_findServices(ctx->framework->registry, filter); + result = celix_serviceRegistry_findServices(ctx->framework->registry, filter); free(filter); } return result; diff --git a/libs/framework/src/service_registry.c b/libs/framework/src/service_registry.c index 467925bb..0afcd4ae 100644 --- a/libs/framework/src/service_registry.c +++ b/libs/framework/src/service_registry.c @@ -843,9 +843,9 @@ char* celix_serviceRegistry_createFilterFor(celix_service_registry_t* registry, return filter; } -static int celix_serviceRegistry_compareRegistrations(const void *a, const void *b) { - const service_registration_t* regA = a; - const service_registration_t* regB = b; +static int celix_serviceRegistry_compareRegistrations(celix_array_list_entry_t a, celix_array_list_entry_t b) { + const service_registration_t* regA = a.voidPtrVal; + const service_registration_t* regB = b.voidPtrVal; celix_properties_t* propsA = NULL; celix_properties_t* propsB = NULL; @@ -861,7 +861,7 @@ static int celix_serviceRegistry_compareRegistrations(const void *a, const void return celix_utils_compareServiceIdsAndRanking(servIdA, servRankingA, servIdB, servRankingB); } -celix_array_list_t* celix_serviceRegisrty_findServices( +celix_array_list_t* celix_serviceRegistry_findServices( celix_service_registry_t* registry, const char* filterStr) { @@ -892,7 +892,7 @@ celix_array_list_t* celix_serviceRegisrty_findServices( //sort matched registration and add the svc id to the result list. if (celix_arrayList_size(matchedRegistrations) > 1) { - celix_arrayList_sort(matchedRegistrations, celix_serviceRegistry_compareRegistrations); + celix_arrayList_sortEntries(matchedRegistrations, celix_serviceRegistry_compareRegistrations); } for (int i = 0; i < celix_arrayList_size(matchedRegistrations); ++i) { service_registration_t* reg = celix_arrayList_get(matchedRegistrations, i);
