From 0e3cac1a72596828f169e6fa0bf0d76739bf9d0b Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Mon, 11 Jun 2018 15:24:11 +0100 Subject: [PATCH] make cpp overloads const all overloads are declared const now, where possible also revised cpp examples and ran them to check see https://github.com/jcupitt/libvips/issues/983 --- ChangeLog | 2 +- cplusplus/VImage.cpp | 174 +++++++------- cplusplus/examples/avg.cpp | 24 +- cplusplus/examples/buffer.cpp | 19 -- cplusplus/examples/embed.cpp | 26 +- cplusplus/examples/invert.cpp | 24 +- cplusplus/examples/profile.cpp | 22 -- cplusplus/examples/resize.cpp | 21 -- cplusplus/examples/test.cpp | 21 -- cplusplus/examples/test_overloads.cpp | 23 -- cplusplus/include/vips/VImage8.h | 319 ++++++++++++++++--------- cplusplus/include/vips/VInterpolate8.h | 2 +- 12 files changed, 305 insertions(+), 372 deletions(-) diff --git a/ChangeLog b/ChangeLog index bad18650..8dd061f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,7 +26,7 @@ - fix compile with MSVC 2017 [angelmixu] - pdfload has a option for background - vips7 C++ interface defaults off -- make members and getters "const" in cpp API +- make members, getters and operators "const" in cpp API 12/3/18 started 8.6.4 - better fitting of fonts with overhanging edges [AdriĆ ] diff --git a/cplusplus/VImage.cpp b/cplusplus/VImage.cpp index e73a2eab..3c1acd98 100644 --- a/cplusplus/VImage.cpp +++ b/cplusplus/VImage.cpp @@ -734,43 +734,43 @@ VImage::maxpos( VOption *options ) const // Operator overloads VImage -VImage::operator[]( int index ) +VImage::operator[]( int index ) const { return( this->extract_band( index ) ); } std::vector -VImage::operator()( int x, int y ) +VImage::operator()( int x, int y ) const { return( this->getpoint( x, y ) ); } VImage -operator+( VImage a, VImage b ) +operator+( const VImage a, const VImage b ) { return( a.add( b ) ); } VImage -operator+( double a, VImage b ) +operator+( double a, const VImage b ) { return( b.linear( 1.0, a ) ); } VImage -operator+( VImage a, double b ) +operator+( const VImage a, double b ) { return( a.linear( 1.0, b ) ); } VImage -operator+( std::vector a, VImage b ) +operator+( const std::vector a, const VImage b ) { return( b.linear( 1.0, a ) ); } VImage -operator+( VImage a, std::vector b ) +operator+( const VImage a, const std::vector b ) { return( a.linear( 1.0, b ) ); } @@ -788,37 +788,37 @@ operator+=( VImage &a, const double b ) } VImage & -operator+=( VImage &a, std::vector b ) +operator+=( VImage &a, const std::vector b ) { return( a = a + b ); } VImage -operator-( VImage a, VImage b ) +operator-( const VImage a, const VImage b ) { return( a.subtract( b ) ); } VImage -operator-( double a, VImage b ) +operator-( double a, const VImage b ) { return( b.linear( -1.0, a ) ); } VImage -operator-( VImage a, double b ) +operator-( const VImage a, double b ) { return( a.linear( 1.0, -b ) ); } VImage -operator-( std::vector a, VImage b ) +operator-( const std::vector a, const VImage b ) { return( b.linear( -1.0, a ) ); } VImage -operator-( VImage a, std::vector b ) +operator-( const VImage a, const std::vector b ) { return( a.linear( 1.0, vips::negate( b ) ) ); } @@ -836,43 +836,43 @@ operator-=( VImage &a, const double b ) } VImage & -operator-=( VImage &a, std::vector b ) +operator-=( VImage &a, const std::vector b ) { return( a = a - b ); } VImage -operator-( VImage a ) +operator-( const VImage a ) { return( a * -1 ); } VImage -operator*( VImage a, VImage b ) +operator*( const VImage a, const VImage b ) { return( a.multiply( b ) ); } VImage -operator*( double a, VImage b ) +operator*( double a, const VImage b ) { return( b.linear( a, 0.0 ) ); } VImage -operator*( VImage a, double b ) +operator*( const VImage a, double b ) { return( a.linear( b, 0.0 ) ); } VImage -operator*( std::vector a, VImage b ) +operator*( const std::vector a, const VImage b ) { return( b.linear( a, 0.0 ) ); } VImage -operator*( VImage a, std::vector b ) +operator*( const VImage a, const std::vector b ) { return( a.linear( b, 0.0 ) ); } @@ -890,37 +890,37 @@ operator*=( VImage &a, const double b ) } VImage & -operator*=( VImage &a, std::vector b ) +operator*=( VImage &a, const std::vector b ) { return( a = a * b ); } VImage -operator/( VImage a, VImage b ) +operator/( const VImage a, const VImage b ) { return( a.divide( b ) ); } VImage -operator/( double a, VImage b ) +operator/( double a, const VImage b ) { return( b.pow( -1.0 ).linear( a, 0.0 ) ); } VImage -operator/( VImage a, double b ) +operator/( const VImage a, double b ) { return( a.linear( 1.0 / b, 0.0 ) ); } VImage -operator/( std::vector a, VImage b ) +operator/( const std::vector a, const VImage b ) { return( b.pow( -1.0 ).linear( a, 0.0 ) ); } VImage -operator/( VImage a, std::vector b ) +operator/( const VImage a, const std::vector b ) { return( a.linear( vips::invert( b ), 0.0 ) ); } @@ -938,25 +938,25 @@ operator/=( VImage &a, const double b ) } VImage & -operator/=( VImage &a, std::vector b ) +operator/=( VImage &a, const std::vector b ) { return( a = a / b ); } VImage -operator%( VImage a, VImage b ) +operator%( const VImage a, const VImage b ) { return( a.remainder( b ) ); } VImage -operator%( VImage a, double b ) +operator%( const VImage a, const double b ) { return( a.remainder_const( to_vector( b ) ) ); } VImage -operator%( VImage a, std::vector b ) +operator%( const VImage a, const std::vector b ) { return( a.remainder_const( b ) ); } @@ -974,243 +974,243 @@ operator%=( VImage &a, const double b ) } VImage & -operator%=( VImage &a, std::vector b ) +operator%=( VImage &a, const std::vector b ) { return( a = a % b ); } VImage -operator<( VImage a, VImage b ) +operator<( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESS ) ); } VImage -operator<( double a, VImage b ) +operator<( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_MORE, to_vector( a ) ) ); } VImage -operator<( VImage a, double b ) +operator<( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_LESS, to_vector( b ) ) ); } VImage -operator<( std::vector a, VImage b ) +operator<( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_MORE, a ) ); } VImage -operator<( VImage a, std::vector b ) +operator<( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_LESS, b ) ); } VImage -operator<=( VImage a, VImage b ) +operator<=( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESSEQ ) ); } VImage -operator<=( double a, VImage b ) +operator<=( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_MOREEQ, to_vector( a ) ) ); } VImage -operator<=( VImage a, double b ) +operator<=( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_LESSEQ, to_vector( b ) ) ); } VImage -operator<=( std::vector a, VImage b ) +operator<=( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_MOREEQ, a ) ); } VImage -operator<=( VImage a, std::vector b ) +operator<=( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_LESSEQ, b ) ); } VImage -operator>( VImage a, VImage b ) +operator>( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_MORE ) ); } VImage -operator>( double a, VImage b ) +operator>( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_LESS, to_vector( a ) ) ); } VImage -operator>( VImage a, double b ) +operator>( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_MORE, to_vector( b ) ) ); } VImage -operator>( std::vector a, VImage b ) +operator>( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_LESS, a ) ); } VImage -operator>( VImage a, std::vector b ) +operator>( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_MORE, b ) ); } VImage -operator>=( VImage a, VImage b ) +operator>=( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_MOREEQ ) ); } VImage -operator>=( double a, VImage b ) +operator>=( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_LESSEQ, to_vector( a ) ) ); } VImage -operator>=( VImage a, double b ) +operator>=( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_MOREEQ, to_vector( b ) ) ); } VImage -operator>=( std::vector a, VImage b ) +operator>=( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_LESSEQ, a ) ); } VImage -operator>=( VImage a, std::vector b ) +operator>=( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_MOREEQ, b ) ); } VImage -operator==( VImage a, VImage b ) +operator==( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_EQUAL ) ); } VImage -operator==( double a, VImage b ) +operator==( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_EQUAL, to_vector( a ) ) ); } VImage -operator==( VImage a, double b ) +operator==( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_EQUAL, to_vector( b ) ) ); } VImage -operator==( std::vector a, VImage b ) +operator==( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_EQUAL, a ) ); } VImage -operator==( VImage a, std::vector b ) +operator==( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_EQUAL, b ) ); } VImage -operator!=( VImage a, VImage b ) +operator!=( const VImage a, const VImage b ) { return( a.relational( b, VIPS_OPERATION_RELATIONAL_NOTEQ ) ); } VImage -operator!=( double a, VImage b ) +operator!=( const double a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_NOTEQ, to_vector( a ) ) ); } VImage -operator!=( VImage a, double b ) +operator!=( const VImage a, const double b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_NOTEQ, to_vector( b ) ) ); } VImage -operator!=( std::vector a, VImage b ) +operator!=( const std::vector a, const VImage b ) { return( b.relational_const( VIPS_OPERATION_RELATIONAL_NOTEQ, a ) ); } VImage -operator!=( VImage a, std::vector b ) +operator!=( const VImage a, const std::vector b ) { return( a.relational_const( VIPS_OPERATION_RELATIONAL_NOTEQ, b ) ); } VImage -operator&( VImage a, VImage b ) +operator&( const VImage a, const VImage b ) { return( a.boolean( b, VIPS_OPERATION_BOOLEAN_AND ) ); } VImage -operator&( double a, VImage b ) +operator&( const double a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_AND, to_vector( a ) ) ); } VImage -operator&( VImage a, double b ) +operator&( const VImage a, const double b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_AND, to_vector( b ) ) ); } VImage -operator&( std::vector a, VImage b ) +operator&( const std::vector a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_AND, a ) ); } VImage -operator&( VImage a, std::vector b ) +operator&( const VImage a, const std::vector b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_AND, b ) ); } @@ -1228,40 +1228,40 @@ operator&=( VImage &a, const double b ) } VImage & -operator&=( VImage &a, std::vector b ) +operator&=( VImage &a, const std::vector b ) { return( a = a & b ); } VImage -operator|( VImage a, VImage b ) +operator|( const VImage a, const VImage b ) { return( a.boolean( b, VIPS_OPERATION_BOOLEAN_OR ) ); } VImage -operator|( double a, VImage b ) +operator|( const double a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_OR, to_vector( a ) ) ); } VImage -operator|( VImage a, double b ) +operator|( const VImage a, const double b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_OR, to_vector( b ) ) ); } VImage -operator|( std::vector a, VImage b ) +operator|( const std::vector a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_OR, a ) ); } VImage -operator|( VImage a, std::vector b ) +operator|( const VImage a, const std::vector b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_OR, b ) ); @@ -1280,40 +1280,40 @@ operator|=( VImage &a, const double b ) } VImage & -operator|=( VImage &a, std::vector b ) +operator|=( VImage &a, const std::vector b ) { return( a = a | b ); } VImage -operator^( VImage a, VImage b ) +operator^( const VImage a, const VImage b ) { return( a.boolean( b, VIPS_OPERATION_BOOLEAN_EOR ) ); } VImage -operator^( double a, VImage b ) +operator^( const double a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_EOR, to_vector( a ) ) ); } VImage -operator^( VImage a, double b ) +operator^( const VImage a, const double b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_EOR, to_vector( b ) ) ); } VImage -operator^( std::vector a, VImage b ) +operator^( const std::vector a, const VImage b ) { return( b.boolean_const( VIPS_OPERATION_BOOLEAN_EOR, a ) ); } VImage -operator^( VImage a, std::vector b ) +operator^( const VImage a, const std::vector b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_EOR, b ) ); @@ -1332,26 +1332,26 @@ operator^=( VImage &a, const double b ) } VImage & -operator^=( VImage &a, std::vector b ) +operator^=( VImage &a, const std::vector b ) { return( a = a ^ b ); } VImage -operator<<( VImage a, VImage b ) +operator<<( const VImage a, const VImage b ) { return( a.boolean( b, VIPS_OPERATION_BOOLEAN_LSHIFT ) ); } VImage -operator<<( VImage a, double b ) +operator<<( const VImage a, const double b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_LSHIFT, to_vector( b ) ) ); } VImage -operator<<( VImage a, std::vector b ) +operator<<( const VImage a, const std::vector b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_LSHIFT, b ) ); @@ -1370,26 +1370,26 @@ operator<<=( VImage &a, const double b ) } VImage & -operator<<=( VImage &a, std::vector b ) +operator<<=( VImage &a, const std::vector b ) { return( a = a << b ); } VImage -operator>>( VImage a, VImage b ) +operator>>( const VImage a, const VImage b ) { return( a.boolean( b, VIPS_OPERATION_BOOLEAN_RSHIFT ) ); } VImage -operator>>( VImage a, double b ) +operator>>( const VImage a, const double b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_RSHIFT, to_vector( b ) ) ); } VImage -operator>>( VImage a, std::vector b ) +operator>>( const VImage a, const std::vector b ) { return( a.boolean_const( VIPS_OPERATION_BOOLEAN_RSHIFT, b ) ); @@ -1408,7 +1408,7 @@ operator>>=( VImage &a, const double b ) } VImage & -operator>>=( VImage &a, std::vector b ) +operator>>=( VImage &a, const std::vector b ) { return( a = a << b ); } diff --git a/cplusplus/examples/avg.cpp b/cplusplus/examples/avg.cpp index c88fa141..100d5f9d 100644 --- a/cplusplus/examples/avg.cpp +++ b/cplusplus/examples/avg.cpp @@ -14,38 +14,16 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( vips_init( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - -{ VImage in = VImage::new_from_file( argv[1], - VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL_UNBUFFERED ) ); + VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL ) ); double avg; avg = in.avg(); printf( "avg = %g\n", avg ); -} vips_shutdown(); diff --git a/cplusplus/examples/buffer.cpp b/cplusplus/examples/buffer.cpp index 27cb7cfd..c4a73e1d 100644 --- a/cplusplus/examples/buffer.cpp +++ b/cplusplus/examples/buffer.cpp @@ -14,28 +14,9 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( VIPS_INIT( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - // load an image from a file VImage im = VImage::new_from_file( argv[1], VImage::option()->set( "access", "sequential" ) ); diff --git a/cplusplus/examples/embed.cpp b/cplusplus/examples/embed.cpp index 088f188a..b9a7db29 100644 --- a/cplusplus/examples/embed.cpp +++ b/cplusplus/examples/embed.cpp @@ -14,38 +14,16 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( vips_init( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - -{ VImage in = VImage::new_from_file( argv[1], - VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL_UNBUFFERED ) ); + VImage::option()->set( "access", "sequential" ) ); VImage out = in.embed( 10, 10, 1000, 1000, - VImage::option()->set( "extend", VIPS_EXTEND_COPY ) ); + VImage::option()->set( "extend", "copy" ) ); out.write_to_file( argv[2] ); -} vips_shutdown(); diff --git a/cplusplus/examples/invert.cpp b/cplusplus/examples/invert.cpp index f8751618..08b01829 100644 --- a/cplusplus/examples/invert.cpp +++ b/cplusplus/examples/invert.cpp @@ -14,43 +14,21 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( vips_init( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - printf( "these should match if VImage is compile-time-only\n" ); printf( "sizeof( VipsImage *) = %zd\n", sizeof( VipsImage *) ); printf( "sizeof( VImage ) = %zd\n", sizeof( VImage ) ); -{ VImage in = VImage::new_from_file( argv[1], - VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL_UNBUFFERED ) ); + VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL ) ); VImage out; out = in.invert(); out.write_to_file( argv[2] ); -} vips_shutdown(); diff --git a/cplusplus/examples/profile.cpp b/cplusplus/examples/profile.cpp index 3c9383ef..cb469a08 100644 --- a/cplusplus/examples/profile.cpp +++ b/cplusplus/examples/profile.cpp @@ -14,30 +14,9 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( vips_init( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - -{ VImage in = VImage::new_from_file( argv[1] ); VImage rows; @@ -45,7 +24,6 @@ main( int argc, char **argv ) rows.write_to_file( argv[2] ); cols.write_to_file( argv[3] ); -} vips_shutdown(); diff --git a/cplusplus/examples/resize.cpp b/cplusplus/examples/resize.cpp index 010b34df..85d86a0b 100644 --- a/cplusplus/examples/resize.cpp +++ b/cplusplus/examples/resize.cpp @@ -14,29 +14,9 @@ using namespace vips; int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( vips_init( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - -{ VImage in = VImage::new_from_file( argv[1], VImage::option()->set( "access", VIPS_ACCESS_SEQUENTIAL ) ); VInterpolate interp = VInterpolate::new_from_name( "nohalo" ); @@ -46,7 +26,6 @@ main( int argc, char **argv ) out = in.resize( 0.2, VImage::option()->set( "interpolate", interp ) ); out.write_to_file( argv[2] ); -} vips_shutdown(); diff --git a/cplusplus/examples/test.cpp b/cplusplus/examples/test.cpp index 1e0db301..764485b8 100644 --- a/cplusplus/examples/test.cpp +++ b/cplusplus/examples/test.cpp @@ -242,30 +242,9 @@ TEST_BINARY( test_divide ); int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( VIPS_INIT( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - g_option_context_free( context ); - VImage left = VImage::new_from_file( argv[1] ); VImage right = VImage::new_from_file( argv[2] ); diff --git a/cplusplus/examples/test_overloads.cpp b/cplusplus/examples/test_overloads.cpp index 2fb27543..8a183ca6 100644 --- a/cplusplus/examples/test_overloads.cpp +++ b/cplusplus/examples/test_overloads.cpp @@ -366,31 +366,9 @@ TEST_ASSIGNMENT( test_divideequals ); int main( int argc, char **argv ) { - GOptionContext *context; - GOptionGroup *main_group; - GError *error = NULL; - if( VIPS_INIT( argv[0] ) ) vips_error_exit( NULL ); - context = g_option_context_new( "" ); - - main_group = g_option_group_new( NULL, NULL, NULL, NULL, NULL ); - g_option_context_set_main_group( context, main_group ); - g_option_context_add_group( context, vips_get_option_group() ); - - if( !g_option_context_parse( context, &argc, &argv, &error ) ) { - if( error ) { - fprintf( stderr, "%s\n", error->message ); - g_error_free( error ); - } - - vips_error_exit( NULL ); - } - - g_option_context_free( context ); - -{ VImage left = VImage::new_from_file( argv[1] ); VImage right = VImage::new_from_file( argv[2] ); @@ -406,7 +384,6 @@ main( int argc, char **argv ) test_assignment_test_minusequals( left, right ); test_assignment_test_timesequals( left, right ); test_assignment_test_divideequals( left, right ); -} vips_shutdown(); diff --git a/cplusplus/include/vips/VImage8.h b/cplusplus/include/vips/VImage8.h index 91d8020e..11dcabbb 100644 --- a/cplusplus/include/vips/VImage8.h +++ b/cplusplus/include/vips/VImage8.h @@ -794,141 +794,246 @@ public: // Operator overloads - VImage operator[]( int index ); + VImage operator[]( int index ) const; - std::vector operator()( int x, int y ); + std::vector operator()( int x, int y ) const; - friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator+( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator+( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator+( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator+( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator+( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator+( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator+( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator+=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator+=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator+=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator-( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator-( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator-=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator-=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator-=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator-( VImage a ); + friend VIPS_CPLUSPLUS_API VImage + operator-( const VImage a ); - friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator*( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator*( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator*( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator*( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator*( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator*( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator*( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator*=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator*=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator*=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator/( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator/( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator/( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator/( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator/( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator/( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator/( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator/=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator/=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator/=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator%( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator%( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator%( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator%=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator%=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator%=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator<( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator<( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator<( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<=( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator<=( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator<=( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<=( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<=( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator<=( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<=( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator>( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator>( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator>( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>=( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator>=( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator>=( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>=( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>=( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator>=( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>=( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator==( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator==( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator==( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator==( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator==( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator==( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator==( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator!=( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator!=( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator!=( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator!=( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator!=( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator!=( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator!=( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator&( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator&( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator&( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator&( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator&( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator&( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator&( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator&=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator&=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator&=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator|( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator|( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator|( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator|( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator|( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator|( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator|( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator|=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator|=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator|=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator^( double a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator^( std::vector a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator^( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator^( const double a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator^( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator^( const std::vector a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator^( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator^=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator^=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator^=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator<<( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator<<( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator<<( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator<<=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator<<=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator<<=( VImage &a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, VImage b ); - friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, double b ); - friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage + operator>>( const VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage + operator>>( const VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage + operator>>( const VImage a, const std::vector b ); - friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage &a, const VImage b ); - friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage &a, const double b ); - friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage &a, const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & + operator>>=( VImage &a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & + operator>>=( VImage &a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & + operator>>=( VImage &a, const std::vector b ); }; diff --git a/cplusplus/include/vips/VInterpolate8.h b/cplusplus/include/vips/VInterpolate8.h index a73458e8..606a696a 100644 --- a/cplusplus/include/vips/VInterpolate8.h +++ b/cplusplus/include/vips/VInterpolate8.h @@ -52,7 +52,7 @@ public: VInterpolate new_from_name( const char *name, VOption *options = 0 ); VipsInterpolate * - get_interpolate() + get_interpolate() const { return( (VipsInterpolate *) VObject::get_object() ); }