Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of azure_c_shared_utility by
map.h
00001 // Copyright (c) Microsoft. All rights reserved. 00002 // Licensed under the MIT license. See LICENSE file in the project root for full license information. 00003 00004 /** @file map.h 00005 * @brief Map is a module that implements a dictionary of @c STRING_HANDLE 00006 * keys to @c STRING_HANDLE values. 00007 */ 00008 00009 #ifndef MAP_H 00010 #define MAP_H 00011 00012 #include "azure_c_shared_utility/macro_utils.h" 00013 #include "azure_c_shared_utility/strings.h" 00014 #include "azure_c_shared_utility/crt_abstractions.h" 00015 #include "azure_c_shared_utility/umock_c_prod.h" 00016 00017 #ifdef __cplusplus 00018 #include <cstddef> 00019 extern "C" 00020 { 00021 #else 00022 #include <stddef.h> 00023 #endif 00024 00025 #define MAP_RESULT_VALUES \ 00026 MAP_OK, \ 00027 MAP_ERROR, \ 00028 MAP_INVALIDARG, \ 00029 MAP_KEYEXISTS, \ 00030 MAP_KEYNOTFOUND, \ 00031 MAP_FILTER_REJECT 00032 00033 /** @brief Enumeration specifying the status of calls to various APIs in this 00034 * module. 00035 */ 00036 DEFINE_ENUM(MAP_RESULT, MAP_RESULT_VALUES); 00037 00038 typedef struct MAP_HANDLE_DATA_TAG* MAP_HANDLE; 00039 00040 typedef int (*MAP_FILTER_CALLBACK)(const char* mapProperty, const char* mapValue); 00041 00042 /** 00043 * @brief Creates a new, empty map. 00044 * 00045 * @param mapFilterFunc A callback function supplied by the caller that is 00046 * invoked during calls to ::Map_Add and 00047 * ::Map_AddOrUpdate to provide the caller an 00048 * opportunity to indicate whether the new entry or 00049 * the update to an existing entry can be made or not. 00050 * The callback function can request that the operation 00051 * be canceled by returning a non-zero value from the 00052 * callback. 00053 * 00054 * @return A valid @c MAP_HANDLE or @c NULL in case an error occurs. 00055 */ 00056 MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Create, MAP_FILTER_CALLBACK, mapFilterFunc); 00057 00058 /** 00059 * @brief Release all resources associated with the map. 00060 * 00061 * @param handle The handle to an existing map. 00062 */ 00063 MOCKABLE_FUNCTION(, void, Map_Destroy, MAP_HANDLE, handle); 00064 00065 /** 00066 * @brief Creates a copy of the map indicated by @p handle and returns a 00067 * handle to it. 00068 * 00069 * @param handle The handle to an existing map. 00070 * 00071 * @return A valid @c MAP_HANDLE to the cloned copy of the map or @c NULL 00072 * in case an error occurs. 00073 */ 00074 MOCKABLE_FUNCTION(, MAP_HANDLE, Map_Clone, MAP_HANDLE, handle); 00075 00076 /** 00077 * @brief Adds a key/value pair to the map. 00078 * 00079 * @param handle The handle to an existing map. 00080 * @param key The @c key to be used for this map entry. 00081 * @param value The @c value to be associated with @p key. 00082 * 00083 * If a non-NULL pointer to a callback function was supplied 00084 * via the @c mapFilterFunc parameter when ::Map_Create was 00085 * called then that callback is invoked when a new entry is 00086 * added and if the callback returns a non-zero value then 00087 * the function cancels the add operation and returns 00088 * @c MAP_FILTER_REJECT. 00089 * 00090 * @return If any of the input parameters are @c NULL then this function 00091 * returns @c MAP_INVALID_ARG. If the key already exists in the 00092 * map then @c MAP_KEYEXISTS is returned. If the filter function 00093 * associated with the map rejects the entry then 00094 * @c MAP_FILTER_REJECT is returned. In case an error occurs when 00095 * the new key is added to the map the function returns @c MAP_ERROR. 00096 * If everything goes well then @c MAP_OK is returned. 00097 */ 00098 MOCKABLE_FUNCTION(, MAP_RESULT, Map_Add, MAP_HANDLE, handle, const char*, key, const char*, value); 00099 00100 /** 00101 * @brief Adds/updates a key/value pair to the map. 00102 * 00103 * @param handle The handle to an existing map. 00104 * @param key The @c key to be used for this map entry. 00105 * @param value The @c value to be associated with @p key. 00106 * 00107 * This function behaves exactly like ::Map_Add except that if the key 00108 * already exists in the map then it overwrites the value with the 00109 * supplied value instead of returning an error. If a non-NULL pointer 00110 * to a callback function was supplied via the @c mapFilterFunc parameter 00111 * when ::Map_Create was called then that callback is invoked when a new 00112 * entry is added or when an existing entry is updated and if the 00113 * callback returns a non-zero value then the function cancels the 00114 * add/update operation and returns @c MAP_FILTER_REJECT. 00115 * 00116 * @return If any of the input parameters are @c NULL then this function 00117 * returns @c MAP_INVALID_ARG. If the filter function associated 00118 * with the map rejects the entry then @c MAP_FILTER_REJECT is 00119 * returned. In case an error occurs when the new key is 00120 * added/updated in the map the function returns @c MAP_ERROR. If 00121 * everything goes well then @c MAP_OK is returned. 00122 */ 00123 MOCKABLE_FUNCTION(, MAP_RESULT, Map_AddOrUpdate, MAP_HANDLE, handle, const char*, key, const char*, value); 00124 00125 /** 00126 * @brief Removes a key and its associated value from the map. 00127 * 00128 * @param handle The handle to an existing map. 00129 * @param key The @c key of the item to be deleted. 00130 * 00131 * @return Returns @c MAP_OK if the key was deleted successfully or an 00132 * error code otherwise. 00133 */ 00134 MOCKABLE_FUNCTION(, MAP_RESULT, Map_Delete, MAP_HANDLE, handle, const char*, key); 00135 00136 /** 00137 * @brief This function returns a boolean value in @p keyExists if the map 00138 * contains a key with the same value the parameter @p key. 00139 * 00140 * @param handle The handle to an existing map. 00141 * @param key The key that the caller wants checked. 00142 * @param keyExists The function writes @c true at the address pointed at 00143 * by this parameter if the key exists in the map and 00144 * @c false otherwise. 00145 * 00146 * @return Returns @c MAP_OK if the check was performed successfully or an 00147 * error code otherwise. 00148 */ 00149 MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsKey, MAP_HANDLE, handle, const char*, key, bool*, keyExists); 00150 00151 /** 00152 * @brief This function returns @c true in @p valueExists if at 00153 * least one <key,value> pair exists in the map where the entry's 00154 * value is equal to the parameter @c value. 00155 * 00156 * @param handle The handle to an existing map. 00157 * @param value The value that the caller wants checked. 00158 * @param valueExists The function writes @c true at the address pointed at 00159 * by this parameter if the value exists in the map and 00160 * @c false otherwise. 00161 * 00162 * @return Returns @c MAP_OK if the check was performed successfully or an 00163 * error code otherwise. 00164 */ 00165 MOCKABLE_FUNCTION(, MAP_RESULT, Map_ContainsValue, MAP_HANDLE, handle, const char*, value, bool*, valueExists); 00166 00167 /** 00168 * @brief Retrieves the value of a stored key. 00169 * 00170 * @param handle The handle to an existing map. 00171 * @param key The key to be looked up in the map. 00172 * 00173 * @return Returns @c NULL in case the input arguments are @c NULL or if the 00174 * requested key is not found in the map. Returns a pointer to the 00175 * key's value otherwise. 00176 */ 00177 MOCKABLE_FUNCTION(, const char*, Map_GetValueFromKey, MAP_HANDLE, handle, const char*, key); 00178 00179 /** 00180 * @brief Retrieves the complete list of keys and values from the map 00181 * in @p values and @p keys. Also writes the size of the list 00182 * in @p count. 00183 * 00184 * @param handle The handle to an existing map. 00185 * @param keys The location where the list of keys is to be written. 00186 * @param values The location where the list of values is to be written. 00187 * @param count The number of stored keys and values is written at the 00188 * location indicated by this pointer. 00189 * 00190 * @return Returns @c MAP_OK if the keys and values are retrieved and written 00191 * successfully or an error code otherwise. 00192 */ 00193 MOCKABLE_FUNCTION(, MAP_RESULT, Map_GetInternals, MAP_HANDLE, handle, const char*const**, keys, const char*const**, values, size_t*, count); 00194 00195 /*this API creates a JSON object from the content of the map*/ 00196 MOCKABLE_FUNCTION(, STRING_HANDLE, Map_ToJSON, MAP_HANDLE, handle); 00197 00198 #ifdef __cplusplus 00199 } 00200 #endif 00201 00202 #endif /* MAP_H */
Generated on Tue Jul 12 2022 19:14:38 by
