rationalise the dumpers

This commit is contained in:
John Cupitt 2012-01-16 14:54:29 +00:00
parent f98dbceb60
commit 5fd317941d
14 changed files with 148 additions and 102 deletions

11
TODO
View File

@ -1,6 +1,17 @@
- we have VipsArrayObject and also vips_object_local_array()
can we make one use the other?
- why is the cache operation only? it'd be useful to cache things like
interpolate as well, wouldn't it?
- perhaps Xsize and Ysize should become gint64
eg. easy to make an image that's 3gb and has xsize == 1 ... death!

View File

@ -280,13 +280,13 @@ vips_format_map( VSListMap2Fn fn, void *a, void *b )
G_DEFINE_ABSTRACT_TYPE( VipsFormat, vips_format, VIPS_TYPE_OBJECT );
static void
vips_format_print_class( VipsObjectClass *object_class, VipsBuf *buf )
vips_format_summary_class( VipsObjectClass *object_class, VipsBuf *buf )
{
VipsFormatClass *class = VIPS_FORMAT_CLASS( object_class );
const char **p;
VIPS_OBJECT_CLASS( vips_format_parent_class )->
print_class( object_class, buf );
summary_class( object_class, buf );
vips_buf_appends( buf, ", " );
if( class->suffs ) {
@ -318,7 +318,7 @@ vips_format_class_init( VipsFormatClass *class )
object_class->nickname = "format";
object_class->description = _( "VIPS file formats" );
object_class->print_class = vips_format_print_class;
object_class->summary_class = vips_format_summary_class;
}
static void

View File

@ -349,7 +349,7 @@ static im_arg_desc printdesc_args[] = {
static int
printdesc_vec( im_object *argv )
{
vips_object_print( VIPS_OBJECT( argv[0] ) );
vips_object_print_dump( VIPS_OBJECT( argv[0] ) );
return( 0 );
}

View File

@ -620,7 +620,7 @@ vips_wrap7_build( VipsObject *object )
}
static void
vips_wrap7_print_class( VipsObjectClass *oclass, VipsBuf *buf )
vips_wrap7_summary_class( VipsObjectClass *oclass, VipsBuf *buf )
{
VipsWrap7Class *class = VIPS_WRAP7_CLASS( oclass );
im_function *fn = class->fn;
@ -641,13 +641,13 @@ vips_wrap7_print_class( VipsObjectClass *oclass, VipsBuf *buf )
}
static void
vips_wrap7_print( VipsObject *object, VipsBuf *buf )
vips_wrap7_dump( VipsObject *object, VipsBuf *buf )
{
VipsWrap7Class *class = VIPS_WRAP7_GET_CLASS( object );
im_function *fn = class->fn;
im_package *pack = im_package_of_function( fn->name );
VIPS_OBJECT_CLASS( vips_wrap7_parent_class )->print( object, buf );
VIPS_OBJECT_CLASS( vips_wrap7_parent_class )->dump( object, buf );
if( pack )
vips_buf_appendf( buf, "from package \"%s\"", pack->name );
@ -688,8 +688,8 @@ vips_wrap7_class_init( VipsWrap7Class *class )
vobject_class->nickname = "wrap7";
vobject_class->description = _( "vips7 operations as vips8 classes" );
vobject_class->build = vips_wrap7_build;
vobject_class->print_class = vips_wrap7_print_class;
vobject_class->print = vips_wrap7_print;
vobject_class->summary_class = vips_wrap7_summary_class;
vobject_class->dump = vips_wrap7_dump;
}
static void

View File

@ -318,13 +318,13 @@ vips_foreign_save_csv_init( VipsForeignSaveCsv *csv )
G_DEFINE_ABSTRACT_TYPE( VipsForeign, vips_foreign, VIPS_TYPE_OPERATION );
static void
vips_foreign_print_class( VipsObjectClass *object_class, VipsBuf *buf )
vips_foreign_summary_class( VipsObjectClass *object_class, VipsBuf *buf )
{
VipsForeignClass *class = VIPS_FOREIGN_CLASS( object_class );
const char **p;
VIPS_OBJECT_CLASS( vips_foreign_parent_class )->
print_class( object_class, buf );
summary_class( object_class, buf );
vips_buf_appends( buf, " " );
if( class->suffs ) {
@ -352,7 +352,7 @@ vips_foreign_class_init( VipsForeignClass *class )
object_class->nickname = "file";
object_class->description = _( "load and save image files" );
object_class->print_class = vips_foreign_print_class;
object_class->summary_class = vips_foreign_summary_class;
}
static void
@ -431,12 +431,12 @@ vips_foreign_load_dispose( GObject *gobject )
}
static void
vips_foreign_load_print_class( VipsObjectClass *object_class, VipsBuf *buf )
vips_foreign_load_summary_class( VipsObjectClass *object_class, VipsBuf *buf )
{
VipsForeignLoadClass *class = VIPS_FOREIGN_LOAD_CLASS( object_class );
VIPS_OBJECT_CLASS( vips_foreign_load_parent_class )->
print_class( object_class, buf );
summary_class( object_class, buf );
if( !G_TYPE_IS_ABSTRACT( G_TYPE_FROM_CLASS( class ) ) ) {
if( class->is_a )
@ -756,7 +756,7 @@ vips_foreign_load_class_init( VipsForeignLoadClass *class )
gobject_class->get_property = vips_object_get_property;
object_class->build = vips_foreign_load_build;
object_class->print_class = vips_foreign_load_print_class;
object_class->summary_class = vips_foreign_load_summary_class;
object_class->new_from_string = vips_foreign_load_new_from_string;
object_class->nickname = "fileload";
object_class->description = _( "file loaders" );
@ -804,12 +804,12 @@ vips_foreign_save_dispose( GObject *gobject )
}
static void
vips_foreign_save_print_class( VipsObjectClass *object_class, VipsBuf *buf )
vips_foreign_save_summary_class( VipsObjectClass *object_class, VipsBuf *buf )
{
VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_CLASS( object_class );
VIPS_OBJECT_CLASS( vips_foreign_save_parent_class )->
print_class( object_class, buf );
summary_class( object_class, buf );
vips_buf_appendf( buf, ", %s",
VIPS_ENUM_NICK( VIPS_TYPE_SAVEABLE, class->saveable ) );
@ -1158,7 +1158,7 @@ vips_foreign_save_class_init( VipsForeignSaveClass *class )
gobject_class->get_property = vips_object_get_property;
object_class->build = vips_foreign_save_build;
object_class->print_class = vips_foreign_save_print_class;
object_class->summary_class = vips_foreign_save_summary_class;
object_class->new_from_string = vips_foreign_save_new_from_string;
object_class->nickname = "filesave";
object_class->description = _( "file savers" );

View File

@ -55,7 +55,6 @@ typedef void *(*VipsSListMap2Fn)( void *, void *, void * );
typedef void *(*VipsSListMap4Fn)( void *, void *, void *, void *, void * );
typedef void *(*VipsSListFold2Fn)( void *, void *, void *, void * );
#ifdef __cplusplus
}
#endif /*__cplusplus*/

View File

@ -378,15 +378,15 @@ struct _VipsObjectClass {
/* Try to print something about the class, handy for help displays.
* Keep to one line.
*/
void (*print_class)( struct _VipsObjectClass *, VipsBuf * );
/* Try to print everything about the object, handy for debugging.
*/
void (*print)( VipsObject *, VipsBuf * );
void (*summary_class)( struct _VipsObjectClass *, VipsBuf * );
/* Try to print a one-line summary for the object, handy for debugging.
*/
void (*print_summary)( VipsObject *, VipsBuf * );
void (*summary)( VipsObject *, VipsBuf * );
/* Try to print everything about the object, handy for debugging.
*/
void (*dump)( VipsObject *, VipsBuf * );
/* Sanity-check the object. Print messages and stuff.
* Handy for debugging.
@ -464,10 +464,16 @@ void vips_object_get_property( GObject *gobject,
void vips_object_preclose( VipsObject *object );
int vips_object_build( VipsObject *object );
void vips_object_print_class( VipsObjectClass *klass );
void vips_object_print( VipsObject *object );
void vips_object_summary_class( VipsObjectClass *klass, VipsBuf *buf );
void vips_object_summary( VipsObject *object, VipsBuf *buf );
void vips_object_dump( VipsObject *object, VipsBuf *buf );
void vips_object_print_summary_class( VipsObjectClass *klass );
void vips_object_print_summary( VipsObject *object );
void vips_object_print_dump( VipsObject *object );
void vips_object_print_name( VipsObject *object );
gboolean vips_object_sanity( VipsObject *object );
GType vips_object_get_type( void );

View File

@ -73,7 +73,7 @@ typedef struct _VipsOperationClass {
/* Print the usage message.
*/
void (*print_usage)( struct _VipsOperationClass *, VipsBuf * );
void (*usage)( struct _VipsOperationClass *, VipsBuf * );
} VipsOperationClass;
GType vips_operation_get_type( void );

View File

@ -610,7 +610,7 @@ vips_cache_operation_buildp( VipsOperation **operation )
#ifdef VIPS_DEBUG
printf( "vips_cache_operation_build: " );
vips_object_print_summary( VIPS_OBJECT( *operation ) );
vips_object_print_summary_stdout( VIPS_OBJECT( *operation ) );
#endif /*VIPS_DEBUG*/
vips_cache_init();

View File

@ -364,7 +364,7 @@ print_field_fn( VipsImage *image, const char *field, GValue *value, void *a )
}
static void
vips_image_print( VipsObject *object, VipsBuf *buf )
vips_image_dump( VipsObject *object, VipsBuf *buf )
{
VipsImage *image = VIPS_IMAGE( object );
@ -380,7 +380,9 @@ vips_image_print( VipsObject *object, VipsBuf *buf )
vips_image_get_bands( image ),
VIPS_ENUM_NICK( VIPS_TYPE_INTERPRETATION,
vips_image_get_interpretation( image ) ) );
VIPS_OBJECT_CLASS( vips_image_parent_class )->print( object, buf );
VIPS_OBJECT_CLASS( vips_image_parent_class )->dump( object, buf );
vips_buf_appendf( buf, "\n" );
(void) vips_image_map( image, print_field_fn, (void *) buf );
@ -389,7 +391,7 @@ vips_image_print( VipsObject *object, VipsBuf *buf )
}
static void
vips_image_print_summary( VipsObject *object, VipsBuf *buf )
vips_image_summary( VipsObject *object, VipsBuf *buf )
{
VipsImage *image = VIPS_IMAGE( object );
@ -413,8 +415,7 @@ vips_image_print_summary( VipsObject *object, VipsBuf *buf )
vips_image_get_coding( image ) ) );
}
VIPS_OBJECT_CLASS( vips_image_parent_class )->
print_summary( object, buf );
VIPS_OBJECT_CLASS( vips_image_parent_class )->summary( object, buf );
}
static void *
@ -827,8 +828,8 @@ vips_image_class_init( VipsImageClass *class )
vobject_class->nickname = "image";
vobject_class->description = _( "image class" );
vobject_class->print = vips_image_print;
vobject_class->print_summary = vips_image_print_summary;
vobject_class->dump = vips_image_dump;
vobject_class->summary = vips_image_summary;
vobject_class->sanity = vips_image_sanity;
vobject_class->rewind = vips_image_rewind;
vobject_class->build = vips_image_build;

View File

@ -189,37 +189,67 @@ vips_object_build( VipsObject *object )
return( result );
}
/**
* vips_object_summary_class: (skip)
*
*/
void
vips_object_print_class( VipsObjectClass *class )
vips_object_summary_class( VipsObjectClass *class, VipsBuf *buf )
{
char str[2048];
VipsBuf buf = VIPS_BUF_STATIC( str );
class->print_class( class, &buf );
printf( "%s\n", vips_buf_all( &buf ) );
class->summary_class( class, buf );
}
/**
* vips_object_summary: (skip)
*
*/
void
vips_object_print( VipsObject *object )
vips_object_summary( VipsObject *object, VipsBuf *buf )
{
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
class->summary( object, buf );
}
/**
* vips_object_dump: (skip)
*
*/
void
vips_object_dump( VipsObject *object, VipsBuf *buf )
{
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
class->dump( object, buf );
}
void
vips_object_print_summary_class( VipsObjectClass *class )
{
char str[2048];
VipsBuf buf = VIPS_BUF_STATIC( str );
class->print( object, &buf );
vips_object_summary_class( class, &buf );
printf( "%s\n", vips_buf_all( &buf ) );
}
void
vips_object_print_summary( VipsObject *object )
{
VipsObjectClass *class = VIPS_OBJECT_GET_CLASS( object );
char str[2048];
VipsBuf buf = VIPS_BUF_STATIC( str );
vips_object_summary( object, &buf );
printf( "%s\n", vips_buf_all( &buf ) );
}
void
vips_object_print_dump( VipsObject *object )
{
char str[32768];
VipsBuf buf = VIPS_BUF_STATIC( str );
class->print_summary( object, &buf );
vips_object_dump( object, &buf );
printf( "%s\n", vips_buf_all( &buf ) );
}
@ -1146,7 +1176,7 @@ vips_object_real_build( VipsObject *object )
}
static void
vips_object_real_print_class( VipsObjectClass *class, VipsBuf *buf )
vips_object_real_summary_class( VipsObjectClass *class, VipsBuf *buf )
{
vips_buf_appendf( buf, "%s", G_OBJECT_CLASS_NAME( class ) );
if( class->nickname )
@ -1156,13 +1186,14 @@ vips_object_real_print_class( VipsObjectClass *class, VipsBuf *buf )
}
static void
vips_object_real_print( VipsObject *object, VipsBuf *buf )
vips_object_real_summary( VipsObject *object, VipsBuf *buf )
{
vips_buf_appendf( buf, " (%p)", object );
vips_buf_appendf( buf, " %s (%p)",
G_OBJECT_TYPE_NAME( object ), object );
}
static void
vips_object_real_print_summary( VipsObject *object, VipsBuf *buf )
vips_object_real_dump( VipsObject *object, VipsBuf *buf )
{
vips_buf_appendf( buf, " (%p)", object );
}
@ -1241,9 +1272,9 @@ vips_object_class_init( VipsObjectClass *class )
gobject_class->get_property = vips_object_get_property;
class->build = vips_object_real_build;
class->print_class = vips_object_real_print_class;
class->print = vips_object_real_print;
class->print_summary = vips_object_real_print_summary;
class->summary_class = vips_object_real_summary_class;
class->summary = vips_object_real_summary;
class->dump = vips_object_real_dump;
class->sanity = vips_object_real_sanity;
class->rewind = vips_object_real_rewind;
class->new_from_string = vips_object_real_new_from_string;
@ -2158,9 +2189,9 @@ vips_object_print_all_cb( VipsObject *object, int *n )
fprintf( stderr, "%d) %s (%p)\n",
*n, G_OBJECT_TYPE_NAME( object ), object );
class->print_class( class, &buf );
vips_object_summary_class( class, &buf );
vips_buf_appends( &buf, " " );
class->print_summary( object, &buf );
vips_object_summary( object, &buf );
fprintf( stderr, "%s\n", vips_buf_all( &buf ) );
*n += 1;

View File

@ -74,22 +74,22 @@ typedef struct {
gboolean required; /* show required args or optional */
gboolean oftype; /* "is of type" message */
int n; /* Arg number */
} VipsOperationClassPrint;
} VipsOperationClassUsage;
static void *
vips_operation_class_print_arg( VipsObjectClass *object_class,
vips_operation_class_usage_arg( VipsObjectClass *object_class,
GParamSpec *pspec, VipsArgumentClass *argument_class,
VipsBuf *buf, VipsOperationClassPrint *print )
VipsBuf *buf, VipsOperationClassUsage *usage )
{
/* Only show construct args ... others are internal.
*/
if( print->required ==
if( usage->required ==
((argument_class->flags & VIPS_ARGUMENT_REQUIRED) != 0) &&
(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) ) {
if( print->message && print->n == 0 )
vips_buf_appendf( buf, "%s\n", print->message );
if( usage->message && usage->n == 0 )
vips_buf_appendf( buf, "%s\n", usage->message );
if( print->oftype ) {
if( usage->oftype ) {
vips_buf_appendf( buf, " %-12s - %s, %s %s\n",
g_param_spec_get_name( pspec ),
g_param_spec_get_blurb( pspec ),
@ -99,55 +99,55 @@ vips_operation_class_print_arg( VipsObjectClass *object_class,
G_PARAM_SPEC_VALUE_TYPE( pspec ) ) );
}
else {
if( print->n > 0 )
if( usage->n > 0 )
vips_buf_appends( buf, " " );
vips_buf_appends( buf, g_param_spec_get_name( pspec ) );
}
print->n += 1;
usage->n += 1;
}
return( NULL );
}
static void
vips_operation_print_usage( VipsOperationClass *class, VipsBuf *buf )
vips_operation_usage( VipsOperationClass *class, VipsBuf *buf )
{
VipsObjectClass *object_class = VIPS_OBJECT_CLASS( class );
VipsOperationClassPrint print;
VipsOperationClassUsage usage;
/* First pass through args: show the required names.
*/
vips_buf_appendf( buf, " %s ", object_class->nickname );
print.message = NULL;
print.required = TRUE;
print.oftype = FALSE;
print.n = 0;
usage.message = NULL;
usage.required = TRUE;
usage.oftype = FALSE;
usage.n = 0;
vips_argument_class_map( object_class,
(VipsArgumentClassMapFn) vips_operation_class_print_arg,
buf, &print );
(VipsArgumentClassMapFn) vips_operation_class_usage_arg,
buf, &usage );
vips_buf_appends( buf, "\n" );
/* Show required types.
*/
print.message = "where:";
print.required = TRUE;
print.oftype = TRUE;
print.n = 0;
usage.message = "where:";
usage.required = TRUE;
usage.oftype = TRUE;
usage.n = 0;
vips_argument_class_map( object_class,
(VipsArgumentClassMapFn) vips_operation_class_print_arg,
buf, &print );
(VipsArgumentClassMapFn) vips_operation_class_usage_arg,
buf, &usage );
/* Show optional args.
*/
print.message = "optional arguments:";
print.required = FALSE;
print.oftype = TRUE;
print.n = 0;
usage.message = "optional arguments:";
usage.required = FALSE;
usage.oftype = TRUE;
usage.n = 0;
vips_argument_class_map( object_class,
(VipsArgumentClassMapFn) vips_operation_class_print_arg,
buf, &print );
(VipsArgumentClassMapFn) vips_operation_class_usage_arg,
buf, &usage );
}
static void *
@ -175,7 +175,7 @@ vips_operation_call_argument( VipsObject *object, GParamSpec *pspec,
}
static void
vips_operation_print( VipsObject *object, VipsBuf *buf )
vips_operation_dump( VipsObject *object, VipsBuf *buf )
{
VipsOperation *operation = VIPS_OPERATION( object );
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS( object );
@ -184,7 +184,7 @@ vips_operation_print( VipsObject *object, VipsBuf *buf )
vips_argument_map( VIPS_OBJECT( operation ),
vips_operation_call_argument, NULL, NULL );
VIPS_OBJECT_CLASS( vips_operation_parent_class )->print( object, buf );
VIPS_OBJECT_CLASS( vips_operation_parent_class )->dump( object, buf );
}
static void *
@ -220,7 +220,7 @@ vips_operation_vips_operation_print_summary_arg( VipsObject *object,
}
static void
vips_operation_print_summary( VipsObject *object, VipsBuf *buf )
vips_operation_summary( VipsObject *object, VipsBuf *buf )
{
VipsOperation *operation = VIPS_OPERATION( object );
VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS( object );
@ -230,7 +230,7 @@ vips_operation_print_summary( VipsObject *object, VipsBuf *buf )
vips_operation_vips_operation_print_summary_arg, buf, NULL );
VIPS_OBJECT_CLASS( vips_operation_parent_class )->
print_summary( object, buf );
summary( object, buf );
}
static void
@ -244,10 +244,10 @@ vips_operation_class_init( VipsOperationClass *class )
vobject_class->nickname = "operation";
vobject_class->description = _( "operations" );
vobject_class->print = vips_operation_print;
vobject_class->print_summary = vips_operation_print_summary;
vobject_class->summary = vips_operation_summary;
vobject_class->dump = vips_operation_dump;
class->print_usage = vips_operation_print_usage;
class->usage = vips_operation_usage;
}
static void
@ -269,7 +269,7 @@ vips_operation_class_print_usage( VipsOperationClass *operation_class )
char str[2048];
VipsBuf buf = VIPS_BUF_STATIC( str );
operation_class->print_usage( operation_class, &buf );
operation_class->usage( operation_class, &buf );
printf( "%s", _( "usage:" ) );
printf( "\n%s", vips_buf_all( &buf ) );
}
@ -533,7 +533,7 @@ vips_call_required_optional( VipsOperation **operation,
/* We need to be able to walk required and optional twice. On x64 gcc,
* vips_operation_set_valist_required() etc. will destructively alter
* the pass-in va_list. We make a copy and walk that instead.
* the passed-in va_list. We make a copy and walk that instead.
*/
va_copy( a, required );
va_copy( b, optional );

View File

@ -288,7 +288,7 @@ vips_region_dispose( GObject *gobject )
}
static void
vips_region_print( VipsObject *object, VipsBuf *buf )
vips_region_dump( VipsObject *object, VipsBuf *buf )
{
VipsRegion *region = VIPS_REGION( object );
@ -307,11 +307,11 @@ vips_region_print( VipsObject *object, VipsBuf *buf )
vips_buf_appendf( buf, "buffer = %p, ", region->buffer );
vips_buf_appendf( buf, "invalid = %d", region->invalid );
VIPS_OBJECT_CLASS( vips_region_parent_class )->print( object, buf );
VIPS_OBJECT_CLASS( vips_region_parent_class )->dump( object, buf );
}
static void
vips_region_print_summary( VipsObject *object, VipsBuf *buf )
vips_region_summary( VipsObject *object, VipsBuf *buf )
{
VipsRegion *region = VIPS_REGION( object );
@ -322,8 +322,7 @@ vips_region_print_summary( VipsObject *object, VipsBuf *buf )
vips_buf_appendf( buf, "width = %d, ", region->valid.width );
vips_buf_appendf( buf, "height = %d", region->valid.height );
VIPS_OBJECT_CLASS( vips_region_parent_class )->
print_summary( object, buf );
VIPS_OBJECT_CLASS( vips_region_parent_class )->summary( object, buf );
}
static void
@ -436,9 +435,9 @@ vips_region_class_init( VipsRegionClass *class )
gobject_class->finalize = vips_region_finalize;
gobject_class->dispose = vips_region_dispose;
vobject_class->print = vips_region_print;
vobject_class->print_summary = vips_region_print_summary;
vobject_class->print = vips_region_sanity;
vobject_class->summary = vips_region_summary;
vobject_class->dump = vips_region_dump;
vobject_class->sanity = vips_region_sanity;
vobject_class->build = vips_region_build;
}

View File

@ -376,7 +376,6 @@ vips_interpolate_nearest_init( VipsInterpolateNearest *nearest )
VipsInterpolate *
vips_interpolate_nearest_new( void )
{
return( VIPS_INTERPOLATE( vips_object_new(
VIPS_TYPE_INTERPOLATE_NEAREST, NULL, NULL, NULL ) ) );
}