This commit is contained in:
John Cupitt 2011-10-24 08:57:13 +01:00
parent a5b8a21a54
commit 045c2b37aa
2 changed files with 50 additions and 7 deletions

15
TODO
View File

@ -12,10 +12,25 @@
to spot vector args, since we don't have the idea of generic vector in the to spot vector args, since we don't have the idea of generic vector in the
type system type system
we can't make a generic VIPS_TYPE_ARRAY boxed, since
g_boxed_type_register_static() does not let us specify a parent class, the
code has G_TYPE_BOXED hardwired as the parent class
instead, perhaps derive from G_TYPE_PARAM_BOXED to create instead, perhaps derive from G_TYPE_PARAM_BOXED to create
VIPS_TYPE_PARAM_ARRAY, a boxed param that can only be a VipsArea array ... VIPS_TYPE_PARAM_ARRAY, a boxed param that can only be a VipsArea array ...
would this work? would this work?
nope, g_param_type_register_static() is also hardwired to have G_TYPE_PARAM
as its parent class argh
best we can do is register a char->value transform in each array type, and
have the generic transformer as a utility function
break in transform_g_string_array() and try running with --background
do we have anything in dest_value we can use to decide what type to write?

View File

@ -1575,13 +1575,39 @@ transform_array_g_string( const GValue *src_value, GValue *dest_value )
g_value_set_string( dest_value, vips_buf_all( &buf ) ); g_value_set_string( dest_value, vips_buf_all( &buf ) );
} }
/* We don't have functions to save arrays to save_str and back. We'd need to static void
* save the type as well as the members and number of members, something like: transform_g_string_array( const GValue *src_value, GValue *dest_value )
* {
* double { 12.3, 13.7 } const char *str = g_value_get_string( src_value );
*
* Anyway, no call for this yet. int n;
*/ const char *p;
int i;
GType type;
/* Walk the string to get the number of elements. Empty string is zero
* elements.
*/
for( n = 0, p = str; p && *p; n += 1 ) {
p = strchr( p, ',' );
if( p )
p += 1;
}
for( i = 0; i < n; i++ ) {
GValue value = { 0, };
char *str;
g_value_init( &value, type );
//g_value_set_instance( &value, array );
g_value_unset( &value );
// array += sizeof_type;
}
// g_value_set_string( dest_value, vips_buf_all( &buf ) );
}
GType GType
vips_array_double_get_type( void ) vips_array_double_get_type( void )
@ -1594,6 +1620,8 @@ vips_array_double_get_type( void )
(GBoxedFreeFunc) vips_area_unref ); (GBoxedFreeFunc) vips_area_unref );
g_value_register_transform_func( type, G_TYPE_STRING, g_value_register_transform_func( type, G_TYPE_STRING,
transform_array_g_string ); transform_array_g_string );
g_value_register_transform_func( G_TYPE_STRING, type,
transform_g_string_array );
} }
return( type ); return( type );