/* swig.i */ %module(package="libplist") PList %feature("autodoc", "1"); %{ /* Includes the header in the wrapper code */ #include typedef struct { plist_t node; } PListNode; %} %include "stdint.i" /* Parse the header file to generate wrappers */ typedef enum { PLIST_BOOLEAN, PLIST_UINT, PLIST_REAL, PLIST_STRING, PLIST_UNICODE, PLIST_ARRAY, PLIST_DICT, PLIST_DATE, PLIST_DATA, PLIST_KEY, PLIST_NONE } plist_type; typedef struct { plist_t node; } PListNode; %extend PListNode { // Attach these functions to struct Vector PListNode(plist_type t) { PListNode* node = NULL; switch (t) { case PLIST_ARRAY : node = (PListNode*) malloc(sizeof(PListNode)); node->node = plist_new_array(); break; case PLIST_DICT : node = (PListNode*) malloc(sizeof(PListNode)); node->node = plist_new_dict(); break; default : node = NULL; break; } return node; } PListNode(char* xml) { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist_from_xml(xml, strlen(xml), &plist->node); return plist; } PListNode(char* bin, uint64_t len) { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist_from_bin(bin, len, &plist->node); return plist; } ~PListNode() { plist_free($self->node); free($self); } void AddSubNode(PListNode* subnode) { plist_add_sub_node($self->node, subnode); } void add_sub_key(char* k) { plist_add_sub_key_el($self->node, k); } void add_sub_string(char* s) { plist_add_sub_string_el($self->node, s); } void add_sub_bool(char b) { plist_add_sub_bool_el($self->node, b); } void add_sub_uint(uint64_t i) { plist_add_sub_uint_el($self->node, i); } void add_sub_real(double d) { plist_add_sub_real_el($self->node, d); } void add_sub_data(char* v, uint64_t l) { plist_add_sub_data_el($self->node, v, l); } PListNode* get_first_child() { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist_get_first_child(&$self->node); return plist; } PListNode* get_next_sibling() { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist_get_next_sibling(&$self->node); return plist; } PListNode* get_prev_sibling() { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist_get_prev_sibling(&$self->node); return plist; } char* as_key() { char* k = NULL; plist_get_key_val($self->node, &k); return k; } char* as_string() { char* s = NULL; plist_get_string_val($self->node, &s); return s; } char as_bool() { char b; plist_get_bool_val($self->node, &b); return b; } uint64_t as_uint() { uint64_t i = 0; plist_get_uint_val($self->node, &i); return i; } double as_real() { double d = 0; plist_get_real_val($self->node, &d); return d; } char* as_data() { char* v; uint64_t l; plist_get_data_val($self->node, &v, &l); return v; } plist_type get_type() { return plist_get_node_type($self->node); } PListNode* find_sub_node_by_string(char* s) { PListNode* plist = (PListNode*) malloc(sizeof(PListNode)); plist = plist_find_node_by_string($self->node, s); return plist; } char* to_xml () { char* s = NULL; uint32_t l; plist_to_xml($self->node, &s, &l); return s; } char* to_bin () { char* s = NULL; uint32_t l; plist_to_bin($self->node, &s, &l); return s; } };