summaryrefslogtreecommitdiffstats
path: root/bindings/php5/wrapper_source_top.c
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-01-28 15:31:49 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-01-28 15:31:49 +0000
commit1dab7b59e5f36ef0a5cfed124a3a2f5d549d82ce (patch)
tree014771b1f67344ee8ad19807f541f73eb357f7ea /bindings/php5/wrapper_source_top.c
parenta1ae48d2ef48492faafd26464e64e2dccd0d8565 (diff)
downloadlasso-1dab7b59e5f36ef0a5cfed124a3a2f5d549d82ce.tar.gz
lasso-1dab7b59e5f36ef0a5cfed124a3a2f5d549d82ce.tar.xz
lasso-1dab7b59e5f36ef0a5cfed124a3a2f5d549d82ce.zip
Bindings: java, php5, python simplify logic in binding generator
* use utils.h macros to manipulate fields. * use utils.py function to filter variables, argument and return types. * finish support of hashtables of strings for php5 and python.
Diffstat (limited to 'bindings/php5/wrapper_source_top.c')
-rw-r--r--bindings/php5/wrapper_source_top.c64
1 files changed, 55 insertions, 9 deletions
diff --git a/bindings/php5/wrapper_source_top.c b/bindings/php5/wrapper_source_top.c
index 8969408b..5567f499 100644
--- a/bindings/php5/wrapper_source_top.c
+++ b/bindings/php5/wrapper_source_top.c
@@ -192,10 +192,15 @@ get_list_from_array_of_xmlnodes(zval* array)
for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer);
zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS;
zend_hash_move_forward_ex(hashtable, &pointer)) {
+ xmlNode *value;
+
temp = **data;
zval_copy_ctor(&temp);
convert_to_string(&temp);
- result = g_list_append(result, get_xml_node_from_string(Z_STRVAL(temp)));
+ value = get_xml_node_from_string(Z_STRVAL(temp));
+ if (value) {
+ lasso_list_add_new_xml_node(result, value);
+ }
zval_dtor(&temp);
}
return result;
@@ -281,16 +286,37 @@ get_hashtable_from_array_of_objects(zval *array)
zend_hash_move_forward_ex(hashtable, &pointer)) {
cvt_temp = (PhpGObjectPtr*) zend_fetch_resource(data TSRMLS_CC, -1, PHP_LASSO_SERVER_RES_NAME, NULL, 1, le_lasso_server);
if (zend_hash_get_current_key_ex(hashtable, &key, &key_len, &index, 0, &pointer) == HASH_KEY_IS_STRING) {
- if (cvt_temp != NULL) {
- g_hash_table_insert(result, key, g_object_ref(cvt_temp->obj));
- } else {
- g_hash_table_insert(result, key, NULL);
- }
+ g_hash_table_insert(result, key, lasso_ref(cvt_temp->obj));
} else {
- if (cvt_temp != NULL) {
- g_hash_table_insert(result, (gpointer)index, g_object_ref(cvt_temp->obj));
+ /* FIXME: throw an exception */
+ }
+ }
+ return result;
+}
+
+static GHashTable*
+get_hashtable_from_array_of_strings(zval *array)
+{
+ HashTable *hashtable = NULL;
+ HashPosition pointer;
+ int size;
+ char *key = NULL;
+ unsigned int key_len;
+ unsigned long index;
+ zval **data = NULL;
+ GHashTable *result = NULL;
+
+ result = g_hash_table_new(g_str_hash, g_str_equal);
+ hashtable = Z_ARRVAL_P(array);
+ size = zend_hash_num_elements(hashtable);
+ for (zend_hash_internal_pointer_reset_ex(hashtable, &pointer);
+ zend_hash_get_current_data_ex(hashtable, (void**) &data, &pointer) == SUCCESS;
+ zend_hash_move_forward_ex(hashtable, &pointer)) {
+ if (Z_TYPE_PP(data) == IS_STRING) {
+ if (zend_hash_get_current_key_ex(hashtable, &key, &key_len, &index, 0, &pointer) == HASH_KEY_IS_STRING) {
+ g_hash_table_insert(result, g_strdup(key), g_strdup(Z_STRVAL_PP(data)));
} else {
- g_hash_table_insert(result, (gpointer)index, NULL);
+ /* FIXME: throw an exception */
}
}
}
@@ -318,3 +344,23 @@ set_array_from_hashtable_of_objects(GHashTable *hashtable, zval **array)
g_list_free(keys);
}
+static void
+set_array_from_hashtable_of_strings(GHashTable *hashtable, zval **array)
+{
+ GList *keys = NULL;
+ zval *zval_item = NULL;
+
+ array_init(*array);
+ for (keys = g_hash_table_get_keys(hashtable); keys; keys = g_list_next(keys)) {
+ char *item = g_hash_table_lookup(hashtable, keys->data);
+ if (item) {
+ MAKE_STD_ZVAL(zval_item);
+ ZVAL_STRING(zval_item, item, 1);
+ add_assoc_zval(*array, (char*)keys->data, zval_item);
+ } else {
+ add_assoc_null(*array, (char*)keys->data);
+ }
+ }
+ g_list_free(keys);
+}
+