Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/common.hfa

    r95bda0a r3543e99  
    1010// Created On       : Wed Jul 11 17:54:36 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Oct  8 08:32:57 2022
    13 // Update Count     : 23
     12// Last Modified On : Mon Aug 14 17:01:47 2023
     13// Update Count     : 38
    1414//
    1515
     
    3232} // extern "C"
    3333static inline __attribute__((always_inline)) {
    34         unsigned char abs( signed char v ) { return abs( (int)v ); }
     34        unsigned char abs( signed char v ) { return (int)abs( (int)v ); }
    3535        // use default C routine for int
    3636        unsigned long int abs( long int v ) { return labs( v ); }
     
    6666
    6767static inline __attribute__((always_inline)) {
    68         char min( char v1, char v2 ) { return v1 < v2 ? v1 : v2; } // optimization
     68        forall( T | { int ?<?( T, T ); } )
     69        T min( T v1, T v2 ) { return v1 < v2 ? v1 : v2; }
     70
     71        forall( T, Ts... | { T min( T, T ); T min( T, Ts ); } )
     72        T min( T v1, T v2, Ts vs ) { return min( min( v1, v2 ), vs ); }
     73
     74        forall( T | { int ?>?( T, T ); } )
     75        T max( T v1, T v2 ) { return v1 > v2 ? v1 : v2; }
     76
     77        forall( T, Ts... | { T max( T, T ); T max( T, Ts ); } )
     78        T max( T v1, T v2, Ts vs ) { return max( max( v1, v2 ), vs ); }
     79
     80        forall( T | { T min( T, T ); T max( T, T ); } )
     81        T clamp( T value, T min_val, T max_val ) { return max( min_val, min( value, max_val ) ); }
     82
     83        forall( T )
     84        void swap( T & v1, T & v2 ) { T temp = v1; v1 = v2; v2 = temp; }
     85
     86        // Specializations
     87        char min( char v1, char v2 ) { return v1 < v2 ? v1 : v2; }
    6988        int min( int v1, int v2 ) { return v1 < v2 ? v1 : v2; }
    7089        unsigned int min( unsigned int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; }
    7190        long int min( long int v1, long int v2 ) { return v1 < v2 ? v1 : v2; }
    72         unsigned long int min( unsigned long int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; }
     91        unsigned long int min( unsigned long int v1, unsigned long int v2 ) { return v1 < v2 ? v1 : v2; }
    7392        long long int min( long long int v1, long long int v2 ) { return v1 < v2 ? v1 : v2; }
    74         unsigned long long int min( unsigned long long int v1, unsigned int v2 ) { return v1 < v2 ? v1 : v2; }
    75         forall( T | { int ?<?( T, T ); } )                                      // generic
    76         T min( T v1, T v2 ) { return v1 < v2 ? v1 : v2; }
     93        unsigned long long int min( unsigned long long int v1, unsigned long long int v2 ) { return v1 < v2 ? v1 : v2; }
    7794
    78         char max( char v1, char v2 ) { return v1 > v2 ? v1 : v2; } // optimization
     95        char max( char v1, char v2 ) { return v1 > v2 ? v1 : v2; }
    7996        int max( int v1, int v2 ) { return v1 > v2 ? v1 : v2; }
    8097        unsigned int max( unsigned int v1, unsigned int v2 ) { return v1 > v2 ? v1 : v2; }
     
    83100        long long int max( long long int v1, long long int v2 ) { return v1 > v2 ? v1 : v2; }
    84101        unsigned long long int max( unsigned long long int v1, unsigned long long int v2 ) { return v1 > v2 ? v1 : v2; }
    85         forall( T | { int ?>?( T, T ); } )                                      // generic
    86         T max( T v1, T v2 ) { return v1 > v2 ? v1 : v2; }
    87 
    88         forall( T | { T min( T, T ); T max( T, T ); } )
    89         T clamp( T value, T min_val, T max_val ) { return max( min_val, min( value, max_val ) ); }
    90 
    91         forall( T )
    92         void swap( T & v1, T & v2 ) { T temp = v1; v1 = v2; v2 = temp; }
    93102} // distribution
    94103
Note: See TracChangeset for help on using the changeset viewer.