reenable wrap7 for nicked vips7 ops

so now "vips im_subtract" gets you the old interface, "vips subtract"
the new one
This commit is contained in:
John Cupitt 2011-07-22 16:12:47 +01:00
parent cfb076f726
commit 9627f889b0
3 changed files with 85 additions and 5 deletions

22
TODO
View File

@ -1,3 +1,25 @@
- try
vips add
get
VipsAdd (add), add two images
add (left, right)
where:
left :: VipsImage
right :: VipsImage
optional arguments:
imtest :: VipsImage
booltest :: gboolean
** leak test on exit:
2 objects alive:
0) VipsAdd (0x7c7800)
1) VipsImage (0x7c9000)
also, no mention of output image, argh
- turn wrap back on, with renames

View File

@ -654,6 +654,65 @@ vips_wrap7_init( VipsWrap7 *wrap7 )
/* Build a subclass of vips7 for every vips7 operation.
*/
static gboolean
drop_postfix( char *str, const char *postfix )
{
if( vips_ispostfix( str, postfix ) ) {
str[strlen( str ) - strlen( postfix )] = '\0';
return( TRUE );
}
return( FALSE );
}
/* Turn a vips7 name into a nickname. Eg. im_lintra_vec becomes lin.
*/
static void
vips_wrap7_nickname( const char *in, char *out )
{
static const char *dont_drop[] = {
"_set",
};
static const char *drop[] = {
"_vec",
"const",
"tra",
"set",
"_f"
};
int i;
gboolean changed;
/* Copy, chopping off "im_" prefix.
*/
if( vips_isprefix( "im_", in ) )
strcpy( out, in + 3 );
else
strcpy( out, in );
/* Repeatedly drop postfixes while we can. Stop if we see a dont_drop
* postfix.
*/
do {
gboolean found;
found = FALSE;
for( i = 0; i < IM_NUMBER( dont_drop ); i++ )
if( vips_ispostfix( out, dont_drop[i] ) ) {
found = TRUE;
break;
}
if( found )
break;
changed = FALSE;
for( i = 0; i < IM_NUMBER( drop ); i++ )
changed |= drop_postfix( out, drop[i] );
} while( changed );
}
static void
vips_wrap7_subclass_class_init( VipsWrap7Class *class )
{
@ -666,6 +725,7 @@ vips_wrap7_subclass_class_init( VipsWrap7Class *class )
strlen( VIPS_WRAP7_PREFIX );
im_function *fn = im_find_function( name );
char nickname[4096];
int i;
g_assert( !class->fn );
@ -674,7 +734,8 @@ vips_wrap7_subclass_class_init( VipsWrap7Class *class )
gobject_class->set_property = vips_wrap7_object_set_property;
gobject_class->get_property = vips_wrap7_object_get_property;
vobject_class->nickname = im_strdup( NULL, name );
vips_wrap7_nickname( name, nickname );
vobject_class->nickname = im_strdup( NULL, nickname );
vobject_class->description = fn->desc;
class->fn = fn;

View File

@ -246,11 +246,8 @@ vips_init( const char *argv0 )
}
/* Build classes which wrap old vips7 operations.
handy for testing, but perhaps not much else
vips__init_wrap7_classes();
*/
vips__init_wrap7_classes();
/* Start up the buffer cache.
*/