From 77b02c9404dbfef325b7a19228045a817cafe064 Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Sat, 10 Oct 2009 18:20:01 +0200 Subject: Rework public API to make it more consistent. --- include/plist/plist.h | 345 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 258 insertions(+), 87 deletions(-) (limited to 'include') diff --git a/include/plist/plist.h b/include/plist/plist.h index 6388603..f8c5c53 100644 --- a/include/plist/plist.h +++ b/include/plist/plist.h @@ -65,13 +65,11 @@ extern "C" { * The enumeration of plist node types. */ typedef enum { - PLIST_BOOLEAN, - /**< Boolean, scalar type */ + PLIST_BOOLEAN, /**< Boolean, scalar type */ PLIST_UINT, /**< Unsigned integer, scalar type */ PLIST_REAL, /**< Real, scalar type */ - PLIST_STRING, - /**< ASCII string, scalar type */ - PLIST_ARRAY,/**< Ordered array, structured type */ + PLIST_STRING, /**< ASCII string, scalar type */ + PLIST_ARRAY, /**< Ordered array, structured type */ PLIST_DICT, /**< Unordered dictionary (key/value pair), structured type */ PLIST_DATE, /**< Date, scalar type */ PLIST_DATA, /**< Binary data, scalar type */ @@ -102,6 +100,62 @@ extern "C" { */ PLIST_API plist_t plist_new_array(void); +/** + * Create a new plist_t type #PLIST_STRING + * + * @param val the sting value, encoded in UTF8. + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_string(const char *val); + +/** + * Create a new plist_t type #PLIST_BOOLEAN + * + * @param val the boolean value, 0 is false, other values are true. + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_bool(uint8_t val); + +/** + * Create a new plist_t type #PLIST_UINT + * + * @param val the unsigned integer value + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_uint(uint64_t val); + +/** + * Create a new plist_t type #PLIST_REAL + * + * @param val the real value + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_real(double val); + +/** + * Create a new plist_t type #PLIST_DATA + * + * @param val the binary buffer + * @param length the length of the buffer + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_data(const char *val, uint64_t length); + +/** + * Create a new plist_t type #PLIST_DATE + * + * @param sec the number of seconds since 01/01/2001 + * @param usec the number of microseconds + * @return the created item + * @sa #plist_type + */ + PLIST_API plist_t plist_new_date(int32_t sec, int32_t usec); + /** * Destruct a plist_t node and all its children recursively * @@ -120,139 +174,113 @@ extern "C" { /******************************************** * * - * Tree navigation * + * Array functions * * * ********************************************/ /** - * Get the first child of a node + * Get size of a #PLIST_ARRAY node. * - * @param node the first child + * @param node the node of type #PLIST_ARRAY + * @return size of the #PLIST_ARRAY node */ - PLIST_API plist_t plist_get_first_child(plist_t node); - + PLIST_API uint32_t plist_array_get_size(plist_t node); /** - * Get the next sibling of a node + * Get the nth item in a #PLIST_ARRAY node. * - * @param node the next sibling + * @param node the node of type #PLIST_ARRAY + * @param n the index of the item to get. Range is [0, array_size[ + * @return the nth item or NULL if node is not of type #PLIST_ARRAY */ - PLIST_API plist_t plist_get_next_sibling(plist_t node); - + PLIST_API plist_t plist_array_get_item(plist_t node, uint32_t n); /** - * Get the previous sibling of a node + * Set the nth item in a #PLIST_ARRAY node. + * The previous item at index n will be freed using #plist_free * - * @param node the previous sibling + * @param node the node of type #PLIST_ARRAY + * @param item the new item at index n + * @param n the index of the item to get. Range is [0, array_size[. Assert if n is not in range. */ - PLIST_API plist_t plist_get_prev_sibling(plist_t node); + PLIST_API void plist_array_set_item(plist_t node, plist_t item, uint32_t n); /** - * Get the parent of a node + * Append a new item at the end of a #PLIST_ARRAY node. * - * @param node the parent (NULL if node is root) + * @param node the node of type #PLIST_ARRAY + * @param item the new item */ - PLIST_API plist_t plist_get_parent(plist_t node); + PLIST_API void plist_array_append_item(plist_t node, plist_t item); /** - * Get the nth child of a #PLIST_ARRAY node. + * Insert a new item at position n in a #PLIST_ARRAY node. * * @param node the node of type #PLIST_ARRAY - * @param n the index of the child to get. Range is [0, array_size[ - * @return the nth children or NULL if node is not of type #PLIST_ARRAY + * @param item the new item to insert + * @param n The position at which the node will be stored. Range is [0, array_size[. Assert if n is not in range. */ - PLIST_API plist_t plist_get_array_nth_el(plist_t node, uint32_t n); + PLIST_API void plist_array_insert_item(plist_t node, plist_t item, uint32_t n); /** - * Get the child of a #PLIST_DICT node from the associated key value. + * Remove an existing position in a #PLIST_ARRAY node. + * Removed position will be freed using #plist_free * - * @param node the node of type #PLIST_DICT - * @param key the key associated to the requested value - * @return the key associated value or NULL if node is not of type #PLIST_DICT + * @param node the node of type #PLIST_ARRAY + * @param n The position to remove. Range is [0, array_size[. Assert if n is not in range. */ - PLIST_API plist_t plist_get_dict_el_from_key(plist_t node, const char *key); - + PLIST_API void plist_array_remove_item(plist_t node, uint32_t n); /******************************************** * * - * Setters * + * Dictionary functions * * * ********************************************/ /** - * Add a subnode to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). This function fails silently - * if subnode already has a father. - * - * @param node the node to add a children to - * @param subnode the children node - */ - PLIST_API void plist_add_sub_node(plist_t node, plist_t subnode); - -/** - * Add a subnode of type #PLIST_KEY to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). - * - * @param node the node to add a children to - * @param val the key value encoded as an ASCII string (must be null terminated) - */ - PLIST_API void plist_add_sub_key_el(plist_t node, const char *val); - -/** - * Add a subnode of type #PLIST_STRING to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). + * Get size of a #PLIST_DICT node. * - * @param node the node to add a children to - * @param val the string value encoded as an ASCII or UTF-8 string (must be null terminated) + * @param node the node of type #PLIST_DICT + * @return size of the #PLIST_DICT node */ - PLIST_API void plist_add_sub_string_el(plist_t node, const char *val); + PLIST_API uint32_t plist_dict_get_size(plist_t node); /** - * Add a subnode of type #PLIST_BOOLEAN to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). + * Get the nth item in a #PLIST_DICT node. * - * @param node the node to add a children to - * @param val the boolean value (TRUE or FALSE) - */ - PLIST_API void plist_add_sub_bool_el(plist_t node, uint8_t val); - -/** - * Add a subnode of type #PLIST_UINT to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). - * - * @param node the node to add a children to - * @param val the unsigned integer value + * @param node the node of type #PLIST_DICT + * @param key the identifier of the item to get. + * @return the item or NULL if node is not of type #PLIST_DICT */ - PLIST_API void plist_add_sub_uint_el(plist_t node, uint64_t val); + PLIST_API plist_t plist_dict_get_item(plist_t node, const char* key); /** - * Add a subnode of type #PLIST_REAL to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). + * Set item identified by key in a #PLIST_DICT node. + * The previous item at index n will be freed using #plist_free * - * @param node the node to add a children to - * @param val the real value + * @param node the node of type #PLIST_DICT + * @param item the new item associated to key + * @param key the identifier of the item to get. Assert if identifier is not present. */ - PLIST_API void plist_add_sub_real_el(plist_t node, double val); + PLIST_API void plist_dict_set_item(plist_t node, plist_t item, const char* key); /** - * Add a subnode of type #PLIST_DATA to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). + * Insert a new item at position n in a #PLIST_DICT node. * - * @param node the node to add a children to - * @param val the binary buffer - * @param length the length of the buffer + * @param node the node of type #PLIST_DICT + * @param item the new item to insert + * @param key The identifier of the item to insert. Assert if identifier already present. */ - PLIST_API void plist_add_sub_data_el(plist_t node, const char *val, uint64_t length); + PLIST_API void plist_dict_insert_item(plist_t node, plist_t item, const char* key); /** - * Add a subnode of type #PLIST_DATE to a node. The node must be of a structured type - * (ie #PLIST_DICT or #PLIST_ARRAY). + * Remove an existing position in a #PLIST_DICT node. + * Removed position will be freed using #plist_free * - * @param node the node to add a children to - * @param sec the number of seconds since 01/01/2001 - * @param usec the number of microseconds + * @param node the node of type #PLIST_DICT + * @param key The identifier of the item to remove. Assert if identifier is not present. */ - PLIST_API void plist_add_sub_date_el(plist_t node, int32_t sec, int32_t usec); + PLIST_API void plist_dict_remove_item(plist_t node, const char* key); /******************************************** @@ -261,6 +289,13 @@ extern "C" { * * ********************************************/ +/** + * Get the parent of a node + * + * @param node the parent (NULL if node is root) + */ + PLIST_API plist_t plist_get_parent(plist_t node); + /** * Get the #plist_type of a node. * @@ -454,7 +489,6 @@ extern "C" { PLIST_API void plist_from_bin(const char *plist_bin, uint32_t length, plist_t * plist); - /******************************************** * * * Utils * @@ -488,6 +522,143 @@ extern "C" { */ PLIST_API char plist_compare_node_value(plist_t node_l, plist_t node_r); + +//DEPRECATED API BELOW + +/*@}*/ +/** + * \defgroup DeprecatedAPI Deprecated libplist API + */ +/*@{*/ + +/******************************************** + * * + * Tree navigation * + * * + ********************************************/ + +/** + * Get the first child of a node + * + * @param node the first child + */ + PLIST_API plist_t plist_get_first_child(plist_t node); + +/** + * Get the next sibling of a node + * + * @param node the next sibling + */ + PLIST_API plist_t plist_get_next_sibling(plist_t node); + +/** + * Get the previous sibling of a node + * + * @param node the previous sibling + */ + PLIST_API plist_t plist_get_prev_sibling(plist_t node); + +/** + * Get the nth child of a #PLIST_ARRAY node. + * + * @param node the node of type #PLIST_ARRAY + * @param n the index of the child to get. Range is [0, array_size[ + * @return the nth children or NULL if node is not of type #PLIST_ARRAY + */ + PLIST_API plist_t plist_get_array_nth_el(plist_t node, uint32_t n); + +/** + * Get the child of a #PLIST_DICT node from the associated key value. + * + * @param node the node of type #PLIST_DICT + * @param key the key associated to the requested value + * @return the key associated value or NULL if node is not of type #PLIST_DICT + */ + PLIST_API plist_t plist_get_dict_el_from_key(plist_t node, const char *key); + + +/******************************************** + * * + * Setters * + * * + ********************************************/ + +/** + * Add a subnode to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). This function fails silently + * if subnode already has a father. + * + * @param node the node to add a children to + * @param subnode the children node + */ + PLIST_API void plist_add_sub_node(plist_t node, plist_t subnode); + +/** + * Add a subnode of type #PLIST_KEY to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the key value encoded as an ASCII string (must be null terminated) + */ + PLIST_API void plist_add_sub_key_el(plist_t node, const char *val); + +/** + * Add a subnode of type #PLIST_STRING to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the string value encoded as an ASCII or UTF-8 string (must be null terminated) + */ + PLIST_API void plist_add_sub_string_el(plist_t node, const char *val); + +/** + * Add a subnode of type #PLIST_BOOLEAN to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the boolean value (TRUE or FALSE) + */ + PLIST_API void plist_add_sub_bool_el(plist_t node, uint8_t val); + +/** + * Add a subnode of type #PLIST_UINT to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the unsigned integer value + */ + PLIST_API void plist_add_sub_uint_el(plist_t node, uint64_t val); + +/** + * Add a subnode of type #PLIST_REAL to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the real value + */ + PLIST_API void plist_add_sub_real_el(plist_t node, double val); + +/** + * Add a subnode of type #PLIST_DATA to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param val the binary buffer + * @param length the length of the buffer + */ + PLIST_API void plist_add_sub_data_el(plist_t node, const char *val, uint64_t length); + +/** + * Add a subnode of type #PLIST_DATE to a node. The node must be of a structured type + * (ie #PLIST_DICT or #PLIST_ARRAY). + * + * @param node the node to add a children to + * @param sec the number of seconds since 01/01/2001 + * @param usec the number of microseconds + */ + PLIST_API void plist_add_sub_date_el(plist_t node, int32_t sec, int32_t usec); + + /*@}*/ -- cgit v1.1-32-gdbae