Commit 21e389bc authored by Jonathan Beck's avatar Jonathan Beck

Add special accessor for structured types in API.

parent 2abf518f
......@@ -140,6 +140,25 @@ extern "C" {
*/
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 *
......
......@@ -165,6 +165,34 @@ plist_t plist_get_prev_sibling(plist_t node)
return (plist_t) g_node_prev_sibling((GNode *) node);
}
plist_t plist_get_array_nth_el(plist_t node, uint32_t n)
{
plist_t ret = NULL;
if (node && PLIST_ARRAY == plist_get_node_type(node)) {
uint32_t i = 0;
plist_t temp = plist_get_first_child(node);
while ( i <= n && temp) {
if (i == n)
ret = temp;
temp = plist_get_next_sibling(temp);
i++;
}
}
return ret;
}
plist_t plist_get_dict_el_from_key(plist_t node, const char *key)
{
plist_t ret = NULL;
if (node && PLIST_DICT == plist_get_node_type(node)) {
plist_t key_node = plist_find_node_by_key(node, key);
ret = plist_get_next_sibling(key_node);
}
return ret;
}
static char compare_node_value(plist_type type, plist_data_t data, const void *value, uint64_t length)
{
char res = FALSE;
......
......@@ -180,22 +180,56 @@ typedef struct {
}
PListNode* find_node_by_key(char *s) {
plist_t node = plist_find_node_by_key($self->node, s);
if (node) {
PListNode* plist = allocate_wrapper();
if (plist) {
plist->node = plist_find_node_by_key($self->node, s);
plist->node = node;
plist->should_keep_plist = 1;
}
return plist;
}
return NULL;
}
PListNode* find_node_by_string(char* s) {
plist_t node = plist_find_node_by_string($self->node, s);
if (node) {
PListNode* plist = allocate_wrapper();
if (plist) {
plist->node = node;
plist->should_keep_plist = 1;
}
return plist;
}
return NULL;
}
PListNode* get_array_nth_el(unsigned int n) {
plist_t node = plist_get_array_nth_el($self->node, n);
if (node) {
PListNode* plist = allocate_wrapper();
if (plist) {
plist->node = plist_find_node_by_string($self->node, s);
plist->node = node;
plist->should_keep_plist = 1;
}
return plist;
}
return NULL;
}
PListNode* get_dict_el_from_key(char *key) {
plist_t node = plist_get_dict_el_from_key($self->node, key);
if (node) {
PListNode* plist = allocate_wrapper();
if (plist) {
plist->node = node;
plist->should_keep_plist = 1;
}
return plist;
}
return NULL;
}
char* to_xml () {
char* s = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment