Ignore:
Timestamp:
Aug 24, 2024, 8:11:41 AM (2 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
38f6e66
Parents:
26ee4b5
Message:

second attempt to simplify ttype min/max functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/common.hfa

    r26ee4b5 r4b75ae9  
    1010// Created On       : Wed Jul 11 17:54:36 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Aug 23 16:42:39 2024
    13 // Update Count     : 39
     12// Last Modified On : Sat Aug 24 08:01:36 2024
     13// Update Count     : 43
    1414//
    1515
     
    6666
    6767static inline __attribute__((always_inline)) {
    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 
    8668        // Specializations
    8769        char min( char v1, char v2 ) { return v1 < v2 ? v1 : v2; }
     
    10082        long long int max( long long int v1, long long int v2 ) { return v1 > v2 ? v1 : v2; }
    10183        unsigned long long int max( unsigned long long int v1, unsigned long long int v2 ) { return v1 > v2 ? v1 : v2; }
     84
     85        // Polymorphic
     86        forall( T | { int ?<?( T, T ); } )
     87        T min( T v1, T v2 ) { return v1 < v2 ? v1 : v2; }
     88
     89        forall( T, Ts ... | { T min( T, T ); T min( Ts ); } )
     90        T min( T arg, Ts args ) { return min( arg, min( args ) ); }
     91
     92        forall( T | { int ?>?( T, T ); } )
     93        T max( T v1, T v2 ) { return v1 > v2 ? v1 : v2; }
     94
     95        forall( T, Ts ... | { T max( T, T ); T max( Ts ); } )
     96        T max( T arg, Ts args ) { return max( arg, max( args ) ); }
     97
     98        forall( T | { T min( T, T ); T max( T, T ); } )
     99        T clamp( T value, T min_val, T max_val ) { return max( min_val, min( value, max_val ) ); }
     100
     101        forall( T )
     102        void swap( T & v1, T & v2 ) { T temp = v1; v1 = v2; v2 = temp; }
    102103} // distribution
    103104
Note: See TracChangeset for help on using the changeset viewer.