From da43a4041fb1b6a8d74ee615a1383a5e91e4c6d0 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Fri, 25 Mar 2016 06:09:07 +0000 Subject: [PATCH] move cpp overloads outside class so they are true functions and we can take their address see https://github.com/jcupitt/libvips/issues/409 --- cplusplus/VImage.cpp | 495 ++++++++++++++++++++++++++++++ cplusplus/include/vips/VImage8.h | 511 ++++++------------------------- 2 files changed, 590 insertions(+), 416 deletions(-) diff --git a/cplusplus/VImage.cpp b/cplusplus/VImage.cpp index 26c06728..a2d8101f 100644 --- a/cplusplus/VImage.cpp +++ b/cplusplus/VImage.cpp @@ -711,4 +711,499 @@ VImage::maxpos( VOption *options ) return( std::complex( x, y ) ); } +// Operator overloads + +VImage +VImage::operator[]( int index ) +{ + return( this->extract_band( index ) ); +} + +std::vector +VImage::operator()( int x, int y ) +{ + return( this->getpoint( x, y ) ); +} + +VImage +operator+( VImage a, VImage b ) +{ + return( a.add( b ) ); +} + +VImage +operator+( double a, VImage b ) +{ + return( b.linear( 1.0, a ) ); +} + +VImage +operator+( VImage a, double b ) +{ + return( a.linear( 1.0, b ) ); +} + +VImage +operator+( std::vector a, VImage b ) +{ + return( b.linear( 1.0, a ) ); +} + +VImage +operator+( VImage a, std::vector b ) +{ + return( a.linear( 1.0, b ) ); +} + +VImage +operator-( VImage a, VImage b ) +{ + return( a.subtract( b ) ); +} + +VImage operator-( double a, VImage b ) +{ + return( b.linear( -1.0, a ) ); +} + +VImage +operator-( VImage a, double b ) +{ + return( a.linear( 1.0, -b ) ); +} + +VImage +operator-( std::vector a, VImage b ) +{ + return( b.linear( -1.0, a ) ); +} + +VImage +operator-( VImage a, std::vector b ) +{ + return( a.linear( 1.0, vips::negate( b ) ) ); +} + +VImage +operator-( VImage a ) +{ + return( a * -1 ); +} + +VImage +operator*( VImage a, VImage b ) +{ + return( a.multiply( b ) ); +} + +VImage +operator*( double a, VImage b ) +{ + return( b.linear( a, 0.0 ) ); +} + +VImage +operator*( VImage a, double b ) +{ + return( a.linear( b, 0.0 ) ); +} + +VImage +operator*( std::vector a, VImage b ) +{ + return( b.linear( a, 0.0 ) ); +} + +VImage +operator*( VImage a, std::vector b ) +{ + return( a.linear( b, 0.0 ) ); +} + +VImage +operator/( VImage a, VImage b ) +{ + return( a.divide( b ) ); +} + +VImage +operator/( double a, VImage b ) +{ + return( b.pow( -1.0 ).linear( a, 0.0 ) ); +} + +VImage +operator/( VImage a, double b ) +{ + return( a.linear( 1.0 / b, 0.0 ) ); +} + +VImage +operator/( std::vector a, VImage b ) +{ + return( b.pow( -1.0 ).linear( a, 0.0 ) ); +} + +VImage +operator/( VImage a, std::vector b ) +{ + return( a.linear( vips::invert( b ), 0.0 ) ); +} + +VImage +operator%( VImage a, VImage b ) +{ + return( a.remainder( b ) ); +} + +VImage +operator%( VImage a, double b ) +{ + return( a.remainder_const( to_vector( b ) ) ); +} + +VImage +operator%( VImage a, std::vector b ) +{ + return( a.remainder_const( b ) ); +} + +VImage +operator<( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESS ) ); +} + +VImage +operator<( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_MORE ) ); +} + +VImage +operator<( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_LESS ) ); +} + +VImage +operator<( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_MORE ) ); +} + +VImage +operator<( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_LESS ) ); +} + +VImage +operator<=( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESSEQ ) ); +} + +VImage +operator<=( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_MOREEQ ) ); +} + +VImage +operator<=( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_LESSEQ ) ); +} + +VImage +operator<=( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_MOREEQ ) ); +} + +VImage +operator<=( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_LESSEQ ) ); +} + +VImage +operator>( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_MORE ) ); +} + +VImage +operator>( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_LESS ) ); +} + +VImage +operator>( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_MORE ) ); +} + +VImage +operator>( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_LESS ) ); +} + +VImage +operator>( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_MORE ) ); +} + +VImage +operator>=( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_MOREEQ ) ); +} + +VImage +operator>=( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_LESSEQ ) ); +} + +VImage +operator>=( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_MOREEQ ) ); +} + +VImage +operator>=( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_LESSEQ ) ); +} + +VImage +operator>=( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_MOREEQ ) ); +} + +VImage +operator==( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_EQUAL ) ); +} + +VImage +operator==( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_EQUAL ) ); +} + +VImage +operator==( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_EQUAL ) ); +} + +VImage +operator==( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_EQUAL ) ); +} + +VImage +operator==( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_EQUAL ) ); +} + +VImage +operator!=( VImage a, VImage b ) +{ + return( a.relational( b, VIPS_OPERATION_RELATIONAL_NOTEQ ) ); +} + +VImage +operator!=( double a, VImage b ) +{ + return( b.relational_const( to_vector( a ), + VIPS_OPERATION_RELATIONAL_NOTEQ ) ); +} + +VImage +operator!=( VImage a, double b ) +{ + return( a.relational_const( to_vector( b ), + VIPS_OPERATION_RELATIONAL_NOTEQ ) ); +} + +VImage +operator!=( std::vector a, VImage b ) +{ + return( b.relational_const( a, + VIPS_OPERATION_RELATIONAL_NOTEQ ) ); +} + +VImage +operator!=( VImage a, std::vector b ) +{ + return( a.relational_const( b, + VIPS_OPERATION_RELATIONAL_NOTEQ ) ); +} + +VImage +operator&( VImage a, VImage b ) +{ + return( a.boolean( b, VIPS_OPERATION_BOOLEAN_AND ) ); +} + +VImage +operator&( double a, VImage b ) +{ + return( b.boolean_const( to_vector( a ), + VIPS_OPERATION_BOOLEAN_AND ) ); +} + +VImage +operator&( VImage a, double b ) +{ + return( a.boolean_const( to_vector( b ), + VIPS_OPERATION_BOOLEAN_AND ) ); +} + +VImage +operator&( std::vector a, VImage b ) +{ + return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_AND ) ); +} + +VImage +operator&( VImage a, std::vector b ) +{ + return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_AND ) ); +} + +VImage +operator|( VImage a, VImage b ) +{ + return( a.boolean( b, VIPS_OPERATION_BOOLEAN_OR ) ); +} + +VImage +operator|( double a, VImage b ) +{ + return( b.boolean_const( to_vector( a ), + VIPS_OPERATION_BOOLEAN_OR ) ); +} + +VImage +operator|( VImage a, double b ) +{ + return( a.boolean_const( to_vector( b ), + VIPS_OPERATION_BOOLEAN_OR ) ); +} + +VImage +operator|( std::vector a, VImage b ) +{ + return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_OR ) ); +} + +VImage +operator|( VImage a, std::vector b ) +{ + return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_OR ) ); +} + +VImage +operator^( VImage a, VImage b ) +{ + return( a.boolean( b, VIPS_OPERATION_BOOLEAN_EOR ) ); +} + +VImage +operator^( double a, VImage b ) +{ + return( b.boolean_const( to_vector( a ), + VIPS_OPERATION_BOOLEAN_EOR ) ); +} + +VImage +operator^( VImage a, double b ) +{ + return( a.boolean_const( to_vector( b ), + VIPS_OPERATION_BOOLEAN_EOR ) ); +} + +VImage +operator^( std::vector a, VImage b ) +{ + return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_EOR ) ); +} + +VImage +operator^( VImage a, std::vector b ) +{ + return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_EOR ) ); +} + +VImage +operator<<( VImage a, VImage b ) +{ + return( a.boolean( b, VIPS_OPERATION_BOOLEAN_LSHIFT ) ); +} + +VImage +operator<<( VImage a, double b ) +{ + return( a.boolean_const( to_vector( b ), + VIPS_OPERATION_BOOLEAN_LSHIFT ) ); +} + +VImage +operator<<( VImage a, std::vector b ) +{ + return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_LSHIFT ) ); +} + +VImage +operator>>( VImage a, VImage b ) +{ + return( a.boolean( b, VIPS_OPERATION_BOOLEAN_RSHIFT ) ); +} + +VImage +operator>>( VImage a, double b ) +{ + return( a.boolean_const( to_vector( b ), + VIPS_OPERATION_BOOLEAN_RSHIFT ) ); +} + +VImage +operator>>( VImage a, std::vector b ) +{ + return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_RSHIFT ) ); +} + VIPS_NAMESPACE_END diff --git a/cplusplus/include/vips/VImage8.h b/cplusplus/include/vips/VImage8.h index 844d3c8e..0c1c3fe1 100644 --- a/cplusplus/include/vips/VImage8.h +++ b/cplusplus/include/vips/VImage8.h @@ -771,422 +771,101 @@ public: // Operator overloads - VImage operator[]( int index ) - { - return( this->extract_band( index ) ); - } - - std::vector operator()( int x, int y ) - { - return( this->getpoint( x, y ) ); - } - - friend VImage operator+( VImage a, VImage b ) - { - return( a.add( b ) ); - } - - friend VImage operator+( double a, VImage b ) - { - return( b.linear( 1.0, a ) ); - } - - friend VImage operator+( VImage a, double b ) - { - return( a.linear( 1.0, b ) ); - } - - friend VImage operator+( std::vector a, VImage b ) - { - return( b.linear( 1.0, a ) ); - } - - friend VImage operator+( VImage a, std::vector b ) - { - return( a.linear( 1.0, b ) ); - } - - friend VImage operator-( VImage a, VImage b ) - { - return( a.subtract( b ) ); - } - - friend VImage operator-( double a, VImage b ) - { - return( b.linear( -1.0, a ) ); - } - - friend VImage operator-( VImage a, double b ) - { - return( a.linear( 1.0, -b ) ); - } - - friend VImage operator-( std::vector a, VImage b ) - { - return( b.linear( -1.0, a ) ); - } - - friend VImage operator-( VImage a, std::vector b ) - { - return( a.linear( 1.0, vips::negate( b ) ) ); - } - - friend VImage operator*( VImage a, VImage b ) - { - return( a.multiply( b ) ); - } - - friend VImage operator*( double a, VImage b ) - { - return( b.linear( a, 0.0 ) ); - } - - friend VImage operator*( VImage a, double b ) - { - return( a.linear( b, 0.0 ) ); - } - - friend VImage operator*( std::vector a, VImage b ) - { - return( b.linear( a, 0.0 ) ); - } - - friend VImage operator*( VImage a, std::vector b ) - { - return( a.linear( b, 0.0 ) ); - } - - friend VImage operator/( VImage a, VImage b ) - { - return( a.divide( b ) ); - } - - friend VImage operator/( double a, VImage b ) - { - return( b.pow( -1.0 ).linear( a, 0.0 ) ); - } - - friend VImage operator/( VImage a, double b ) - { - return( a.linear( 1.0 / b, 0.0 ) ); - } - - friend VImage operator/( std::vector a, VImage b ) - { - return( b.pow( -1.0 ).linear( a, 0.0 ) ); - } - - friend VImage operator/( VImage a, std::vector b ) - { - return( a.linear( vips::invert( b ), 0.0 ) ); - } - - friend VImage operator%( VImage a, VImage b ) - { - return( a.remainder( b ) ); - } - - friend VImage operator%( VImage a, double b ) - { - return( a.remainder_const( to_vector( b ) ) ); - } - - friend VImage operator%( VImage a, std::vector b ) - { - return( a.remainder_const( b ) ); - } - - friend VImage operator<( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESS ) ); - } - - friend VImage operator<( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_MORE ) ); - } - - friend VImage operator<( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_LESS ) ); - } - - friend VImage operator<( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_MORE ) ); - } - - friend VImage operator<( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_LESS ) ); - } - - friend VImage operator<=( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_LESSEQ ) ); - } - - friend VImage operator<=( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_MOREEQ ) ); - } - - friend VImage operator<=( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_LESSEQ ) ); - } - - friend VImage operator<=( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_MOREEQ ) ); - } - - friend VImage operator<=( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_LESSEQ ) ); - } - - friend VImage operator>( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_MORE ) ); - } - - friend VImage operator>( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_LESS ) ); - } - - friend VImage operator>( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_MORE ) ); - } - - friend VImage operator>( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_LESS ) ); - } - - friend VImage operator>( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_MORE ) ); - } - - friend VImage operator>=( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_MOREEQ ) ); - } - - friend VImage operator>=( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_LESSEQ ) ); - } - - friend VImage operator>=( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_MOREEQ ) ); - } - - friend VImage operator>=( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_LESSEQ ) ); - } - - friend VImage operator>=( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_MOREEQ ) ); - } - - friend VImage operator==( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_EQUAL ) ); - } - - friend VImage operator==( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_EQUAL ) ); - } - - friend VImage operator==( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_EQUAL ) ); - } - - friend VImage operator==( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_EQUAL ) ); - } - - friend VImage operator==( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_EQUAL ) ); - } - - friend VImage operator!=( VImage a, VImage b ) - { - return( a.relational( b, VIPS_OPERATION_RELATIONAL_NOTEQ ) ); - } - - friend VImage operator!=( double a, VImage b ) - { - return( b.relational_const( to_vector( a ), - VIPS_OPERATION_RELATIONAL_NOTEQ ) ); - } - - friend VImage operator!=( VImage a, double b ) - { - return( a.relational_const( to_vector( b ), - VIPS_OPERATION_RELATIONAL_NOTEQ ) ); - } - - friend VImage operator!=( std::vector a, VImage b ) - { - return( b.relational_const( a, - VIPS_OPERATION_RELATIONAL_NOTEQ ) ); - } - - friend VImage operator!=( VImage a, std::vector b ) - { - return( a.relational_const( b, - VIPS_OPERATION_RELATIONAL_NOTEQ ) ); - } - - friend VImage operator&( VImage a, VImage b ) - { - return( a.boolean( b, VIPS_OPERATION_BOOLEAN_AND ) ); - } - - friend VImage operator&( double a, VImage b ) - { - return( b.boolean_const( to_vector( a ), - VIPS_OPERATION_BOOLEAN_AND ) ); - } - - friend VImage operator&( VImage a, double b ) - { - return( a.boolean_const( to_vector( b ), - VIPS_OPERATION_BOOLEAN_AND ) ); - } - - friend VImage operator&( std::vector a, VImage b ) - { - return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_AND ) ); - } - - friend VImage operator&( VImage a, std::vector b ) - { - return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_AND ) ); - } - - friend VImage operator|( VImage a, VImage b ) - { - return( a.boolean( b, VIPS_OPERATION_BOOLEAN_OR ) ); - } - - friend VImage operator|( double a, VImage b ) - { - return( b.boolean_const( to_vector( a ), - VIPS_OPERATION_BOOLEAN_OR ) ); - } - - friend VImage operator|( VImage a, double b ) - { - return( a.boolean_const( to_vector( b ), - VIPS_OPERATION_BOOLEAN_OR ) ); - } - - friend VImage operator|( std::vector a, VImage b ) - { - return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_OR ) ); - } - - friend VImage operator|( VImage a, std::vector b ) - { - return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_OR ) ); - } - - friend VImage operator^( VImage a, VImage b ) - { - return( a.boolean( b, VIPS_OPERATION_BOOLEAN_EOR ) ); - } - - friend VImage operator^( double a, VImage b ) - { - return( b.boolean_const( to_vector( a ), - VIPS_OPERATION_BOOLEAN_EOR ) ); - } - - friend VImage operator^( VImage a, double b ) - { - return( a.boolean_const( to_vector( b ), - VIPS_OPERATION_BOOLEAN_EOR ) ); - } - - friend VImage operator^( std::vector a, VImage b ) - { - return( b.boolean_const( a, VIPS_OPERATION_BOOLEAN_EOR ) ); - } - - friend VImage operator^( VImage a, std::vector b ) - { - return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_EOR ) ); - } - - friend VImage operator<<( VImage a, VImage b ) - { - return( a.boolean( b, VIPS_OPERATION_BOOLEAN_LSHIFT ) ); - } - - friend VImage operator<<( VImage a, double b ) - { - return( a.boolean_const( to_vector( b ), - VIPS_OPERATION_BOOLEAN_LSHIFT ) ); - } - - friend VImage operator<<( VImage a, std::vector b ) - { - return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_LSHIFT ) ); - } - - friend VImage operator>>( VImage a, VImage b ) - { - return( a.boolean( b, VIPS_OPERATION_BOOLEAN_RSHIFT ) ); - } - - friend VImage operator>>( VImage a, double b ) - { - return( a.boolean_const( to_vector( b ), - VIPS_OPERATION_BOOLEAN_RSHIFT ) ); - } - - friend VImage operator>>( VImage a, std::vector b ) - { - return( a.boolean_const( b, VIPS_OPERATION_BOOLEAN_RSHIFT ) ); - } - - friend VImage operator-( VImage a ) - { - return( a * -1 ); - } + VImage operator[]( int index ); + + std::vector operator()( int x, int y ); + + friend VImage operator+( VImage a, VImage b ); + friend VImage operator+( double a, VImage b ); + friend VImage operator+( VImage a, double b ); + friend VImage operator+( std::vector a, VImage b ); + friend VImage operator+( VImage a, std::vector b ); + + friend VImage operator-( VImage a, VImage b ); + friend VImage operator-( double a, VImage b ); + friend VImage operator-( VImage a, double b ); + friend VImage operator-( std::vector a, VImage b ); + friend VImage operator-( VImage a, std::vector b ); + + friend VImage operator-( VImage a ); + + friend VImage operator*( VImage a, VImage b ); + friend VImage operator*( double a, VImage b ); + friend VImage operator*( VImage a, double b ); + friend VImage operator*( std::vector a, VImage b ); + friend VImage operator*( VImage a, std::vector b ); + + friend VImage operator/( VImage a, VImage b ); + friend VImage operator/( double a, VImage b ); + friend VImage operator/( VImage a, double b ); + friend VImage operator/( std::vector a, VImage b ); + friend VImage operator/( VImage a, std::vector b ); + + friend VImage operator%( VImage a, VImage b ); + friend VImage operator%( VImage a, double b ); + friend VImage operator%( VImage a, std::vector b ); + + friend VImage operator<( VImage a, VImage b ); + friend VImage operator<( double a, VImage b ); + friend VImage operator<( VImage a, double b ); + friend VImage operator<( std::vector a, VImage b ); + friend VImage operator<( VImage a, std::vector b ); + + friend VImage operator<=( VImage a, VImage b ); + friend VImage operator<=( double a, VImage b ); + friend VImage operator<=( VImage a, double b ); + friend VImage operator<=( std::vector a, VImage b ); + friend VImage operator<=( VImage a, std::vector b ); + + friend VImage operator>( VImage a, VImage b ); + friend VImage operator>( double a, VImage b ); + friend VImage operator>( VImage a, double b ); + friend VImage operator>( std::vector a, VImage b ); + friend VImage operator>( VImage a, std::vector b ); + + friend VImage operator>=( VImage a, VImage b ); + friend VImage operator>=( double a, VImage b ); + friend VImage operator>=( VImage a, double b ); + friend VImage operator>=( std::vector a, VImage b ); + friend VImage operator>=( VImage a, std::vector b ); + + friend VImage operator==( VImage a, VImage b ); + friend VImage operator==( double a, VImage b ); + friend VImage operator==( VImage a, double b ); + friend VImage operator==( std::vector a, VImage b ); + friend VImage operator==( VImage a, std::vector b ); + + friend VImage operator!=( VImage a, VImage b ); + friend VImage operator!=( double a, VImage b ); + friend VImage operator!=( VImage a, double b ); + friend VImage operator!=( std::vector a, VImage b ); + friend VImage operator!=( VImage a, std::vector b ); + + friend VImage operator&( VImage a, VImage b ); + friend VImage operator&( double a, VImage b ); + friend VImage operator&( VImage a, double b ); + friend VImage operator&( std::vector a, VImage b ); + friend VImage operator&( VImage a, std::vector b ); + + friend VImage operator|( VImage a, VImage b ); + friend VImage operator|( double a, VImage b ); + friend VImage operator|( VImage a, double b ); + friend VImage operator|( std::vector a, VImage b ); + friend VImage operator|( VImage a, std::vector b ); + + friend VImage operator^( VImage a, VImage b ); + friend VImage operator^( double a, VImage b ); + friend VImage operator^( VImage a, double b ); + friend VImage operator^( std::vector a, VImage b ); + friend VImage operator^( VImage a, std::vector b ); + + friend VImage operator<<( VImage a, VImage b ); + friend VImage operator<<( VImage a, double b ); + friend VImage operator<<( VImage a, std::vector b ); + + friend VImage operator>>( VImage a, VImage b ); + friend VImage operator>>( VImage a, double b ); + friend VImage operator>>( VImage a, std::vector b ); };