/* Print a one-line description of an image, with an index. */ static void * print_one_line( IMAGE *im, int *n, int *total ) { printf( "%2d) %p, %s, %s: %dx%d, %d bands, %s\n", *n, im, im_dtype2char( im->dtype ), im->filename, im->Xsize, im->Ysize, im->Bands, im_BandFmt2char( im->BandFmt ) ); *n += 1; if( im->dtype == IM_SETBUF && im->data ) { int size = IM_IMAGE_SIZEOF_LINE( im ) * im->Ysize; printf( "\t*** %d malloced bytes\n", size ); *total += size; } if( im->regions ) { int n2; int total2; printf( "\t%d regions\n", g_slist_length( im->regions ) ); n2 = 0; total2 = 0; (void) im_slist_map2( im->regions, (VSListMap2Fn) print_one_line_region, &n2, &total2 ); if( total2 ) printf( "\t*** using total of %d bytes\n", total2 ); *total += total2; } return( NULL ); }
/* Print the overlaps on a leaf. */ static void * print_overlaps( JoinNode *node ) { if( node->type == JOIN_LEAF && g_slist_length( node->overlaps ) > 0 ) { printf( "overlap of %s with:\n", im_skip_dir( node->name ) ); im_slist_map2( node->overlaps, (VSListMap2Fn) print_overlap, NULL, NULL ); } return( NULL ); }
/* Print and accumulate the overlap errors on a leaf. */ static void * print_overlap_errors( JoinNode *node, double *fac, double *total ) { if( node->type == JOIN_LEAF && g_slist_length( node->overlaps ) > 0 ) { printf( "overlap of %s (index %d) with:\n", im_skip_dir( node->name ), node->index ); im_slist_map2( node->overlaps, (VSListMap2Fn) print_overlap_error, fac, total ); } return( NULL ); }
/* Map a user function over the whole of the symbol table. */ void * im__map_table( SymbolTable *st, void *(*fn)(), void *a, void *b ) { int i; void *r; for( i = 0; i < st->sz; i++ ) if( (r = im_slist_map2( st->table[i], (VSListMap2Fn) fn, a, b )) ) return( r ); return( NULL ); }
/* Print one line for each open descriptor. */ void im__print_all( void ) { int n = 0; int total = 0; if( im__open_images ) { printf( "%d images\n", g_slist_length( im__open_images ) ); (void) im_slist_map2( im__open_images, (VSListMap2Fn) print_one_line, &n, &total ); if( total ) printf( "\n\t*** all-image total = %d bytes\n", total ); } }
/** * vips_format_map: (skip) * @fn: function to apply to each #VipsFormatClass * @a: user data * @b: user data * * Apply a function to every %VipsFormatClass that VIPS knows about. Formats * are presented to the function in priority order. * * Like all VIPS map functions, if @fn returns %NULL, iteration continues. If * it returns non-%NULL, iteration terminates and that value is returned. The * map function returns %NULL if all calls return %NULL. * * See also: im_slist_map(). * * Returns: the result of iteration */ void * vips_format_map( VSListMap2Fn fn, void *a, void *b ) { GSList *formats; void *result; formats = NULL; (void) vips_class_map_all( g_type_from_name( "VipsFormat" ), (VipsClassMapFn) format_add_class, (void *) &formats ); formats = g_slist_sort( formats, (GCompareFunc) format_compare ); result = im_slist_map2( formats, fn, a, b ); g_slist_free( formats ); return( result ); }
/* Perform a list of user callbacks. */ int im__trigger_callbacks( GSList *cblist ) { int result; #ifdef DEBUG_IO printf( "im__trigger_callbacks: calling %d user callbacks ..\n", g_slist_length( cblist ) ); #endif /*DEBUG_IO*/ result = 0; (void) im_slist_map2( cblist, (VSListMap2Fn) call_callback, &result, NULL ); return( result ); }
/* Look up a filename in the symbol_table. */ static JoinNode * find_node( SymbolTable *st, char *name ) { return( im_slist_map2( st->table[hash( name )], (VSListMap2Fn) test_name, name, NULL ) ); }
void im_printdesc( IMAGE *image ) { if( !image ) { printf( "NULL descriptor\n" ); return; } printf( "IMAGE* %p\n", image ); if( im_isMSBfirst( image ) ) printf( "SPARC (MSB first) " ); else printf( "Intel (LSB first) " ); printf( "byte order image, on a " ); if( im_amiMSBfirst() ) printf( "SPARC (MSB first) " ); else printf( "Intel (LSB first) " ); printf( "byte order machine\n" ); (void) im_header_map( image, (im_header_map_fn) print_field_fn, NULL ); printf( "Hist: %s", im_history_get( image ) ); /* Print other (non-header) fields. */ if( image->generate ) printf( "generate function attached\n" ); if( image->closefns ) printf( "close callbacks attached\n" ); if( image->evalfns ) printf( "eval callbacks attached\n" ); if( image->evalendfns ) printf( "evalend callbacks attached\n" ); if( image->evalstartfns ) printf( "evalstart callbacks attached\n" ); if( image->preclosefns ) printf( "preclose callbacks attached\n" ); if( image->invalidatefns ) printf( "invalidate callbacks attached\n" ); if( image->regions ) { printf( "%d regions present\n", g_slist_length( image->regions ) ); im_slist_map2( image->regions, (VSListMap2Fn) print_region, NULL, NULL ); } if( image->kill ) printf( "kill flag set\n" ); if( image->closing ) printf( "closing flag set\n" ); if( image->close_pending ) printf( "close_pending flag set\n" ); #ifdef DEBUG /* Can't get these with im_header_get(), so only show for debugging. */ printf( "dhint: %s\n", im_dhint2char( image->dhint ) ); printf( "dtype: %s\n", im_dtype2char( image->dtype ) ); #endif /*DEBUG*/ }