Add gjs_value_forall and gjs_get_nth_attribute
This commit is contained in:
parent
6ebb81bf90
commit
a1213c80d9
2 changed files with 76 additions and 1 deletions
68
midori/gjs.c
68
midori/gjs.c
|
@ -230,13 +230,45 @@ gjs_value_get_attribute_string (GjsValue* value,
|
||||||
return gjs_value_get_string (attribute);
|
return gjs_value_get_string (attribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gjs_value_get_nth_attribute:
|
||||||
|
* @value: a #GjsValue
|
||||||
|
* @n: an index
|
||||||
|
*
|
||||||
|
* Retrieves the indiced attribute at the specified
|
||||||
|
* position. This is particularly faster than looking
|
||||||
|
* up attributes by name.
|
||||||
|
*
|
||||||
|
* This can only be used on object values.
|
||||||
|
*
|
||||||
|
* Return value: a new #GjsValue, or %NULL
|
||||||
|
**/
|
||||||
|
GjsValue*
|
||||||
|
gjs_value_get_nth_attribute (GjsValue* value,
|
||||||
|
guint n)
|
||||||
|
{
|
||||||
|
JSObjectRef js_object;
|
||||||
|
JSValueRef js_value;
|
||||||
|
|
||||||
|
g_return_val_if_fail (gjs_value_is_object (value), NULL);
|
||||||
|
|
||||||
|
js_object = JSValueToObject (value->js_context, value->js_value, NULL);
|
||||||
|
js_value = JSObjectGetPropertyAtIndex (value->js_context, js_object, n, NULL);
|
||||||
|
if (JSValueIsUndefined (value->js_context, js_value))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return gjs_value_new (value->js_context, js_value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gjs_value_foreach:
|
* gjs_value_foreach:
|
||||||
* @value: a #GjsValue
|
* @value: a #GjsValue
|
||||||
* @callback: a callback
|
* @callback: a callback
|
||||||
* @user_data: user data
|
* @user_data: user data
|
||||||
*
|
*
|
||||||
* Runs the specified callback for each attribute of the value.
|
* Calls the specified callback for each indiced attribute.
|
||||||
|
* This is a particularly fast way of looping through the
|
||||||
|
* elements of an array.
|
||||||
*
|
*
|
||||||
* This can only be used on object values.
|
* This can only be used on object values.
|
||||||
**/
|
**/
|
||||||
|
@ -244,6 +276,40 @@ void
|
||||||
gjs_value_foreach (GjsValue* value,
|
gjs_value_foreach (GjsValue* value,
|
||||||
GjsCallback callback,
|
GjsCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
GjsValue* attribute;
|
||||||
|
|
||||||
|
g_return_if_fail (gjs_value_is_object (value));
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
attribute = gjs_value_get_nth_attribute (value, i);
|
||||||
|
if (attribute)
|
||||||
|
{
|
||||||
|
callback (attribute, user_data);
|
||||||
|
g_object_unref (attribute);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while (attribute);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gjs_value_forall:
|
||||||
|
* @value: a #GjsValue
|
||||||
|
* @callback: a callback
|
||||||
|
* @user_data: user data
|
||||||
|
*
|
||||||
|
* Calls the specified callback for each attribute.
|
||||||
|
*
|
||||||
|
* This can only be used on object values.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gjs_value_forall (GjsValue* value,
|
||||||
|
GjsCallback callback,
|
||||||
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
JSObjectRef js_object;
|
JSObjectRef js_object;
|
||||||
JSPropertyNameArrayRef js_properties;
|
JSPropertyNameArrayRef js_properties;
|
||||||
|
|
|
@ -66,6 +66,10 @@ const gchar*
|
||||||
gjs_value_get_attribute_string (GjsValue* value,
|
gjs_value_get_attribute_string (GjsValue* value,
|
||||||
const gchar* name);
|
const gchar* name);
|
||||||
|
|
||||||
|
GjsValue*
|
||||||
|
gjs_value_get_nth_attribute (GjsValue* value,
|
||||||
|
guint n);
|
||||||
|
|
||||||
typedef void
|
typedef void
|
||||||
(*GjsCallback) (GjsValue* value,
|
(*GjsCallback) (GjsValue* value,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
@ -75,6 +79,11 @@ gjs_value_foreach (GjsValue* value,
|
||||||
GjsCallback callback,
|
GjsCallback callback,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
void
|
||||||
|
gjs_value_forall (GjsValue* value,
|
||||||
|
GjsCallback callback,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
GjsValue*
|
GjsValue*
|
||||||
gjs_value_get_by_name (GjsValue* value,
|
gjs_value_get_by_name (GjsValue* value,
|
||||||
const gchar* name);
|
const gchar* name);
|
||||||
|
|
Loading…
Reference in a new issue