Skip to content

Commit

Permalink
[C API] Use a redefinable userdata type (#5500)
Browse files Browse the repository at this point in the history
* [C API] Use a redefinable userdata type

* bring back userdata parameter names
  • Loading branch information
fealebenpae authored May 23, 2022
1 parent 336cae9 commit 41de527
Show file tree
Hide file tree
Showing 10 changed files with 239 additions and 220 deletions.
289 changes: 145 additions & 144 deletions src/realm.h

Large diffs are not rendered by default.

68 changes: 34 additions & 34 deletions src/realm/object-store/c_api/app.cpp

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions src/realm/object-store/c_api/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ RLM_API void realm_config_set_schema_mode(realm_config_t* config, realm_schema_m
config->schema_mode = from_capi(mode);
}

RLM_API void realm_config_set_migration_function(realm_config_t* config, realm_migration_func_t func, void* userdata,
realm_free_userdata_func_t callback)
RLM_API void realm_config_set_migration_function(realm_config_t* config, realm_migration_func_t func,
realm_userdata_t userdata, realm_free_userdata_func_t callback)
{
if (func) {
auto migration_func = [=](SharedRealm old_realm, SharedRealm new_realm, Schema& schema) {
Expand All @@ -105,7 +105,8 @@ RLM_API void realm_config_set_migration_function(realm_config_t* config, realm_m
}

RLM_API void realm_config_set_data_initialization_function(realm_config_t* config,
realm_data_initialization_func_t func, void* userdata,
realm_data_initialization_func_t func,
realm_userdata_t userdata,
realm_free_userdata_func_t callback)
{
if (func) {
Expand All @@ -127,7 +128,8 @@ RLM_API void realm_config_set_data_initialization_function(realm_config_t* confi

RLM_API void realm_config_set_should_compact_on_launch_function(realm_config_t* config,
realm_should_compact_on_launch_func_t func,
void* userdata, realm_free_userdata_func_t callback)
realm_userdata_t userdata,
realm_free_userdata_func_t callback)
{
if (func) {
auto should_func = [=](uint64_t total_bytes, uint64_t used_bytes) -> bool {
Expand Down
4 changes: 2 additions & 2 deletions src/realm/object-store/c_api/http.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ class CNetworkTransport final : public GenericNetworkTransport {
} // namespace
} // namespace realm::c_api

RLM_API realm_http_transport_t* realm_http_transport_new(realm_http_request_func_t request_executor, void* userdata,
realm_free_userdata_func_t free)
RLM_API realm_http_transport_t* realm_http_transport_new(realm_http_request_func_t request_executor,
realm_userdata_t userdata, realm_free_userdata_func_t free)
{
auto transport = std::make_shared<realm::c_api::CNetworkTransport>(realm::c_api::UserdataPtr{userdata, free},
request_executor);
Expand Down
2 changes: 1 addition & 1 deletion src/realm/object-store/c_api/logging.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class CLogger : public realm::util::RootLogger {
};
} // namespace

realm::SyncClientConfig::LoggerFactory make_logger_factory(realm_log_func_t logger, void* userdata,
realm::SyncClientConfig::LoggerFactory make_logger_factory(realm_log_func_t logger, realm_userdata_t userdata,
realm_free_userdata_func_t free_userdata)
{
return [logger, userdata = SharedUserdata{userdata, free_userdata}](Logger::Level level) {
Expand Down
41 changes: 26 additions & 15 deletions src/realm/object-store/c_api/notifications.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,11 @@ KeyPathArray build_key_path_array(realm_key_path_array_t* key_path_array)

} // namespace

RLM_API realm_notification_token_t* realm_object_add_notification_callback(
realm_object_t* obj, void* userdata, realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_object_change_func_t on_change, realm_callback_error_func_t on_error, realm_scheduler_t*)
RLM_API realm_notification_token_t*
realm_object_add_notification_callback(realm_object_t* obj, realm_userdata_t userdata,
realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_object_change_func_t on_change, realm_callback_error_func_t on_error,
realm_scheduler_t*)
{
return wrap_err([&]() {
ObjectNotificationsCallback cb;
Expand Down Expand Up @@ -127,9 +129,11 @@ RLM_API size_t realm_object_changes_get_modified_properties(const realm_object_c
return i;
}

RLM_API realm_notification_token_t* realm_list_add_notification_callback(
realm_list_t* list, void* userdata, realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change, realm_callback_error_func_t on_error, realm_scheduler_t*)
RLM_API realm_notification_token_t*
realm_list_add_notification_callback(realm_list_t* list, realm_userdata_t userdata, realm_free_userdata_func_t free,
realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change,
realm_callback_error_func_t on_error, realm_scheduler_t*)
{
return wrap_err([&]() {
CollectionNotificationsCallback cb;
Expand All @@ -141,9 +145,12 @@ RLM_API realm_notification_token_t* realm_list_add_notification_callback(
});
}

RLM_API realm_notification_token_t* realm_set_add_notification_callback(
realm_set_t* set, void* userdata, realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change, realm_callback_error_func_t on_error, realm_scheduler_t*)
RLM_API realm_notification_token_t* realm_set_add_notification_callback(realm_set_t* set, realm_userdata_t userdata,
realm_free_userdata_func_t free,
realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change,
realm_callback_error_func_t on_error,
realm_scheduler_t*)
{
return wrap_err([&]() {
CollectionNotificationsCallback cb;
Expand All @@ -155,9 +162,11 @@ RLM_API realm_notification_token_t* realm_set_add_notification_callback(
});
}

RLM_API realm_notification_token_t* realm_dictionary_add_notification_callback(
realm_dictionary_t* dict, void* userdata, realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change, realm_callback_error_func_t on_error, realm_scheduler_t*)
RLM_API realm_notification_token_t*
realm_dictionary_add_notification_callback(realm_dictionary_t* dict, realm_userdata_t userdata,
realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change,
realm_callback_error_func_t on_error, realm_scheduler_t*)
{
return wrap_err([&]() {
CollectionNotificationsCallback cb;
Expand All @@ -169,9 +178,11 @@ RLM_API realm_notification_token_t* realm_dictionary_add_notification_callback(
});
}

RLM_API realm_notification_token_t* realm_results_add_notification_callback(
realm_results_t* results, void* userdata, realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change, realm_callback_error_func_t on_error, realm_scheduler_t*)
RLM_API realm_notification_token_t*
realm_results_add_notification_callback(realm_results_t* results, realm_userdata_t userdata,
realm_free_userdata_func_t free, realm_key_path_array_t* key_path_array,
realm_on_collection_change_func_t on_change,
realm_callback_error_func_t on_error, realm_scheduler_t*)
{
return wrap_err([&]() {
CollectionNotificationsCallback cb;
Expand Down
2 changes: 1 addition & 1 deletion src/realm/object-store/c_api/realm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ RLM_API bool realm_rollback(realm_t* realm)

RLM_API realm_callback_token_t* realm_add_realm_changed_callback(realm_t* realm,
realm_on_realm_change_func_t callback,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t free_userdata)
{
util::UniqueFunction<void()> func = [callback, userdata = UserdataPtr{userdata, free_userdata}]() {
Expand Down
8 changes: 4 additions & 4 deletions src/realm/object-store/c_api/scheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ struct DefaultFactory {
// which must be copyable.
std::shared_ptr<Inner> m_inner;

DefaultFactory(void* userdata, realm_free_userdata_func_t free_func,
DefaultFactory(realm_userdata_t userdata, realm_free_userdata_func_t free_func,
realm_scheduler_default_factory_func_t factory_func)
: m_inner(std::make_shared<Inner>())
{
Expand All @@ -124,8 +124,8 @@ struct DefaultFactory {
} // namespace

RLM_API realm_scheduler_t*
realm_scheduler_new(void* userdata, realm_free_userdata_func_t free_func, realm_scheduler_notify_func_t notify_func,
realm_scheduler_is_on_thread_func_t is_on_thread_func,
realm_scheduler_new(realm_userdata_t userdata, realm_free_userdata_func_t free_func,
realm_scheduler_notify_func_t notify_func, realm_scheduler_is_on_thread_func_t is_on_thread_func,
realm_scheduler_is_same_as_func_t is_same_as,
realm_scheduler_can_deliver_notifications_func_t can_deliver_notifications_func)
{
Expand Down Expand Up @@ -178,7 +178,7 @@ RLM_API bool realm_scheduler_has_default_factory()
#endif
}

RLM_API bool realm_scheduler_set_default_factory(void* userdata, realm_free_userdata_func_t free_func,
RLM_API bool realm_scheduler_set_default_factory(realm_userdata_t userdata, realm_free_userdata_func_t free_func,
realm_scheduler_default_factory_func_t factory_func)
{
return wrap_err([&]() {
Expand Down
2 changes: 1 addition & 1 deletion src/realm/object-store/c_api/schema.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ RLM_API bool realm_find_property_by_public_name(const realm_t* realm, realm_clas

RLM_API realm_callback_token_t* realm_add_schema_changed_callback(realm_t* realm,
realm_on_schema_change_func_t callback,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t free_userdata)
{
util::UniqueFunction<void(const Schema&)> func =
Expand Down
33 changes: 19 additions & 14 deletions src/realm/object-store/c_api/sync.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ RLM_API void realm_sync_client_config_set_metadata_encryption_key(realm_sync_cli
}

RLM_API void realm_sync_client_config_set_log_callback(realm_sync_client_config_t* config, realm_log_func_t callback,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
config->logger_factory = make_logger_factory(callback, userdata, userdata_free);
Expand Down Expand Up @@ -335,7 +335,8 @@ RLM_API void realm_sync_config_set_session_stop_policy(realm_sync_config_t* conf
}

RLM_API void realm_sync_config_set_error_handler(realm_sync_config_t* config, realm_sync_error_handler_func_t handler,
void* userdata, realm_free_userdata_func_t userdata_free) noexcept
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [handler, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](
std::shared_ptr<SyncSession> session, SyncError error) {
Expand Down Expand Up @@ -375,7 +376,8 @@ RLM_API void realm_sync_config_set_ssl_trust_certificate_path(realm_sync_config_
}

RLM_API void realm_sync_config_set_ssl_verify_callback(realm_sync_config_t* config,
realm_sync_ssl_verify_func_t callback, void* userdata,
realm_sync_ssl_verify_func_t callback,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [callback, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](
Expand Down Expand Up @@ -456,7 +458,7 @@ realm_sync_subscription_updated_at(const realm_flx_sync_subscription_t* subscrip

RLM_API void realm_sync_config_set_before_client_reset_handler(realm_sync_config_t* config,
realm_sync_before_client_reset_func_t callback,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [callback, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](SharedRealm before_realm) {
Expand All @@ -468,7 +470,7 @@ RLM_API void realm_sync_config_set_before_client_reset_handler(realm_sync_config

RLM_API void realm_sync_config_set_after_client_reset_handler(realm_sync_config_t* config,
realm_sync_after_client_reset_func_t callback,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [callback, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](
Expand Down Expand Up @@ -506,9 +508,11 @@ realm_sync_on_subscription_set_state_change_wait(const realm_flx_sync_subscripti
return realm_flx_sync_subscription_set_state_e(static_cast<int>(state));
}

RLM_API bool realm_sync_on_subscription_set_state_change_async(
const realm_flx_sync_subscription_set_t* subscription_set, realm_flx_sync_subscription_set_state_e notify_when,
realm_sync_on_subscription_state_changed_t callback, void* userdata, realm_free_userdata_func_t userdata_free)
RLM_API bool
realm_sync_on_subscription_set_state_change_async(const realm_flx_sync_subscription_set_t* subscription_set,
realm_flx_sync_subscription_set_state_e notify_when,
realm_sync_on_subscription_state_changed_t callback,
realm_userdata_t userdata, realm_free_userdata_func_t userdata_free)
{
REALM_ASSERT(subscription_set != nullptr && callback != nullptr);
return wrap_err([&]() {
Expand Down Expand Up @@ -731,7 +735,7 @@ RLM_API realm_async_open_task_t* realm_open_synchronized(realm_config_t* config)
}

RLM_API void realm_async_open_task_start(realm_async_open_task_t* task, realm_async_open_task_completion_func_t done,
void* userdata, realm_free_userdata_func_t userdata_free) noexcept
realm_userdata_t userdata, realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [done, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](ThreadSafeReference realm,
std::exception_ptr error) {
Expand All @@ -753,7 +757,7 @@ RLM_API void realm_async_open_task_cancel(realm_async_open_task_t* task) noexcep
}

RLM_API uint64_t realm_async_open_task_register_download_progress_notifier(
realm_async_open_task_t* task, realm_sync_progress_func_t notifier, void* userdata,
realm_async_open_task_t* task, realm_sync_progress_func_t notifier, realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
auto cb = [notifier, userdata = SharedUserdata(userdata, FreeUserdata(userdata_free))](uint64_t transferred,
Expand Down Expand Up @@ -822,7 +826,7 @@ RLM_API bool realm_sync_immediately_run_file_actions(realm_app* app, const char*
}

RLM_API uint64_t realm_sync_session_register_connection_state_change_callback(
realm_sync_session_t* session, realm_sync_connection_state_changed_func_t callback, void* userdata,
realm_sync_session_t* session, realm_sync_connection_state_changed_func_t callback, realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
std::function<realm::SyncSession::ConnectionStateChangeCallback> cb =
Expand All @@ -842,7 +846,7 @@ RLM_API void realm_sync_session_unregister_connection_state_change_callback(real
RLM_API uint64_t realm_sync_session_register_progress_notifier(realm_sync_session_t* session,
realm_sync_progress_func_t notifier,
realm_sync_progress_direction_e direction,
bool is_streaming, void* userdata,
bool is_streaming, realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
std::function<realm::SyncSession::ProgressNotifierCallback> cb =
Expand All @@ -861,7 +865,7 @@ RLM_API void realm_sync_session_unregister_progress_notifier(realm_sync_session_

RLM_API void realm_sync_session_wait_for_download_completion(realm_sync_session_t* session,
realm_sync_download_completion_func_t done,
void* userdata,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
util::UniqueFunction<void(std::error_code)> cb =
Expand All @@ -879,7 +883,8 @@ RLM_API void realm_sync_session_wait_for_download_completion(realm_sync_session_
}

RLM_API void realm_sync_session_wait_for_upload_completion(realm_sync_session_t* session,
realm_sync_upload_completion_func_t done, void* userdata,
realm_sync_upload_completion_func_t done,
realm_userdata_t userdata,
realm_free_userdata_func_t userdata_free) noexcept
{
util::UniqueFunction<void(std::error_code)> cb =
Expand Down

0 comments on commit 41de527

Please sign in to comment.