@@ -93,7 +93,7 @@ negate( std::vector<double> vector )
9393{
9494 std::vector<double > new_vector ( vector.size () );
9595
96- for ( unsigned int i = 0 ; i < vector.size (); i++ )
96+ for ( std::vector< double >::size_type i = 0 ; i < vector.size (); i++ )
9797 new_vector[i] = vector[i] * -1 ;
9898
9999 return ( new_vector );
@@ -104,7 +104,7 @@ invert( std::vector<double> vector )
104104{
105105 std::vector<double > new_vector ( vector.size () );
106106
107- for ( unsigned int i = 0 ; i < vector.size (); i++ )
107+ for ( std::vector< double >::size_type i = 0 ; i < vector.size (); i++ )
108108 new_vector[i] = 1.0 / vector[i];
109109
110110 return ( new_vector );
@@ -210,7 +210,6 @@ VOption::set( const char *name, std::vector<int> value )
210210 Pair *pair = new Pair ( name );
211211
212212 int *array;
213- unsigned int i;
214213
215214 pair->input = true ;
216215
@@ -219,7 +218,7 @@ VOption::set( const char *name, std::vector<int> value )
219218 static_cast < int >( value.size () ) );
220219 array = vips_value_get_array_int ( &pair->value , NULL );
221220
222- for ( i = 0 ; i < value.size (); i++ )
221+ for ( std::vector< double >::size_type i = 0 ; i < value.size (); i++ )
223222 array[i] = value[i];
224223
225224 options.push_back ( pair );
@@ -234,7 +233,6 @@ VOption::set( const char *name, std::vector<double> value )
234233 Pair *pair = new Pair ( name );
235234
236235 double *array;
237- unsigned int i;
238236
239237 pair->input = true ;
240238
@@ -243,7 +241,7 @@ VOption::set( const char *name, std::vector<double> value )
243241 static_cast < int >( value.size () ) );
244242 array = vips_value_get_array_double ( &pair->value , NULL );
245243
246- for ( i = 0 ; i < value.size (); i++ )
244+ for ( std::vector< double >::size_type i = 0 ; i < value.size (); i++ )
247245 array[i] = value[i];
248246
249247 options.push_back ( pair );
@@ -258,7 +256,6 @@ VOption::set( const char *name, std::vector<VImage> value )
258256 Pair *pair = new Pair ( name );
259257
260258 VipsImage **array;
261- unsigned int i;
262259
263260 pair->input = true ;
264261
@@ -267,7 +264,7 @@ VOption::set( const char *name, std::vector<VImage> value )
267264 static_cast < int >( value.size () ) );
268265 array = vips_value_get_array_image ( &pair->value , NULL );
269266
270- for ( i = 0 ; i < value.size (); i++ ) {
267+ for ( std::vector< double >::size_type i = 0 ; i < value.size (); i++ ) {
271268 VipsImage *vips_image = value[i].get_image ();
272269
273270 array[i] = vips_image;
@@ -488,10 +485,9 @@ VOption::get_operation( VipsOperation *operation )
488485 double *array =
489486 vips_value_get_array_double ( value,
490487 &length );
491- int j;
492488
493489 ((*i)->vvector )->resize ( length );
494- for ( j = 0 ; j < length; j++ )
490+ for ( int j = 0 ; j < length; j++ )
495491 (*((*i)->vvector ))[j] = array[j];
496492 }
497493 else if ( type == VIPS_TYPE_BLOB ) {
@@ -718,17 +714,38 @@ VImage::write_to_buffer( const char *suffix, void **buf, size_t *size,
718714 const char *operation_name;
719715 VipsBlob *blob;
720716
717+ /* Save with the new target API if we can. Fall back to the older
718+ * mechanism in case the saver we need has not been converted yet.
719+ *
720+ * We need to hide any errors from this first phase.
721+ */
721722 vips__filename_split8 ( suffix, filename, option_string );
722- if ( !(operation_name = vips_foreign_find_save_buffer ( filename )) ) {
723+
724+ vips_error_freeze ();
725+ operation_name = vips_foreign_find_save_target ( filename );
726+ vips_error_thaw ();
727+
728+ if ( operation_name ) {
729+ VTarget target = VTarget::new_to_memory ();
730+
731+ call_option_string ( operation_name, option_string,
732+ (options ? options : VImage::option ())->
733+ set ( " in" , *this )->
734+ set ( " target" , target ) );
735+
736+ g_object_get ( target.get_target (), " blob" , &blob, NULL );
737+ }
738+ else if ( (operation_name = vips_foreign_find_save_buffer ( filename )) ) {
739+ call_option_string ( operation_name, option_string,
740+ (options ? options : VImage::option ())->
741+ set ( " in" , *this )->
742+ set ( " buffer" , &blob ) );
743+ }
744+ else {
723745 delete options;
724746 throw VError ();
725747 }
726748
727- call_option_string ( operation_name, option_string,
728- (options ? options : VImage::option ())->
729- set ( " in" , *this )->
730- set ( " buffer" , &blob ) );
731-
732749 if ( blob ) {
733750 if ( buf ) {
734751 *buf = VIPS_AREA ( blob )->data ;
@@ -767,6 +784,7 @@ std::vector<VImage>
767784VImage::bandsplit ( VOption *options ) const
768785{
769786 std::vector<VImage> b;
787+ b.reserve (bands ());
770788
771789 for ( int i = 0 ; i < bands (); i++ )
772790 b.push_back ( extract_band ( i ) );
0 commit comments