inc/c_util/object_lifetime_tracker.h (50 lines of code) (raw):
// Copyright (C) Microsoft Corporation. All rights reserved.
#ifndef OBJECT_LIFETIME_TRACKER_H
#define OBJECT_LIFETIME_TRACKER_H
#include "macro_utils/macro_utils.h"
#define KEY_MATCH_FUNCTION_RESULT_VALUES \
KEY_MATCH_FUNCTION_RESULT_MATCHING, \
KEY_MATCH_FUNCTION_RESULT_NOT_MATCHING, \
KEY_MATCH_FUNCTION_RESULT_ERROR
MU_DEFINE_ENUM(KEY_MATCH_FUNCTION_RESULT, KEY_MATCH_FUNCTION_RESULT_VALUES);
#define OBJECT_MATCH_FUNCTION_RESULT_VALUES \
OBJECT_MATCH_FUNCTION_RESULT_MATCHING, \
OBJECT_MATCH_FUNCTION_RESULT_NOT_MATCHING, \
OBJECT_MATCH_FUNCTION_RESULT_ERROR
MU_DEFINE_ENUM(OBJECT_MATCH_FUNCTION_RESULT, OBJECT_MATCH_FUNCTION_RESULT_VALUES);
#define OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_RESULT_VALUES \
OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_NEW_KEY, \
OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_NEW_OBJECT, \
OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_EXISTS, \
OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_ERROR
MU_DEFINE_ENUM(OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_RESULT, OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_RESULT_VALUES);
#define OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_RESULT_VALUES \
OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_OK, \
OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_ERROR, \
OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_NOT_FOUND, \
OBJECT_LIFETIME_TRACKER_UNREGISTER_KEY_NOT_FOUND
MU_DEFINE_ENUM(OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_RESULT, OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_RESULT_VALUES);
#define OBJECT_LIFETIME_TRACKER_ACT_RESULT_VALUES \
OBJECT_LIFETIME_TRACKER_ACT_OK, \
OBJECT_LIFETIME_TRACKER_ACT_ERROR, \
OBJECT_LIFETIME_TRACKER_ACT_KEY_NOT_FOUND, \
OBJECT_LIFETIME_TRACKER_ACT_OBJECT_NOT_FOUND
MU_DEFINE_ENUM(OBJECT_LIFETIME_TRACKER_ACT_RESULT, OBJECT_LIFETIME_TRACKER_ACT_RESULT_VALUES);
typedef struct OBJECT_LIFETIME_TRACKER_TAG* OBJECT_LIFETIME_TRACKER_HANDLE;
typedef void(*DESTROY_OBJECT)(void* object, const void* context);
typedef KEY_MATCH_FUNCTION_RESULT(*KEY_MATCH_FUNCTION)(const void* lhs, const void* rhs);
typedef OBJECT_MATCH_FUNCTION_RESULT(*OBJECT_MATCH_FUNCTION)(const void* lhs, const void* rhs);
typedef int(*OBJECT_LIFETIME_TRACKER_ACTION_FUNCTION)(void* object, void* context);
#include "umock_c/umock_c_prod.h"
#ifdef __cplusplus
extern "C" {
#endif
MOCKABLE_FUNCTION(, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker_create, KEY_MATCH_FUNCTION, key_match_function, OBJECT_MATCH_FUNCTION, object_match_function);
MOCKABLE_FUNCTION(, void, object_lifetime_tracker_destroy, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker);
MOCKABLE_FUNCTION(, OBJECT_LIFETIME_TRACKER_REGISTER_OBJECT_RESULT, object_lifetime_tracker_register_object, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker, const void*, key, void*, object, DESTROY_OBJECT, destroy_object, const void*, destroy_context);
MOCKABLE_FUNCTION(, OBJECT_LIFETIME_TRACKER_UNREGISTER_OBJECT_RESULT, object_lifetime_tracker_unregister_object, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker, const void*, key, void*, object);
MOCKABLE_FUNCTION(, void, object_lifetime_tracker_destroy_all_objects_for_key, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker, const void*, key);
MOCKABLE_FUNCTION(, OBJECT_LIFETIME_TRACKER_ACT_RESULT, object_lifetime_tracker_act, OBJECT_LIFETIME_TRACKER_HANDLE, object_lifetime_tracker, const void*, key, void*, object, OBJECT_LIFETIME_TRACKER_ACTION_FUNCTION, action_function, void*, context);
#ifdef __cplusplus
}
#endif
#endif /*OBJECT_LIFETIME_TRACKER_H*/