// // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo // // The contents of this file are covered under the licence agreement in the // file "LICENCE" distributed with Cforall. // // math.trait.hfa -- // // Author : Peter A. Buhr // Created On : Fri Jul 16 15:40:52 2021 // Last Modified By : Peter A. Buhr // Last Modified On : Tue Jul 20 17:47:19 2021 // Update Count : 19 // #pragma once trait Not( U ) { void ?{}( U &, zero_t ); int !?( U ); }; // Not trait Equality( T | Not( T ) ) { int ?==?( T, T ); int ?!=?( T, T ); }; // Equality trait Relational( U | Equality( U ) ) { int ??( U, U ); int ?>=?( U, U ); }; // Relational trait Signed( T ) { T +?( T ); T -?( T ); T abs( T ); }; // Signed trait Additive( U | Signed( U ) ) { U ?+?( U, U ); U ?-?( U, U ); U ?+=?( U &, U ); U ?-=?( U &, U ); }; // Additive trait Incdec( T | Additive( T ) ) { void ?{}( T &, one_t ); // T ?++( T & ); // T ++?( T & ); // T ?--( T & ); // T --?( T & ); }; // Incdec trait Multiplicative( U | Incdec( U ) ) { U ?*?( U, U ); U ?/?( U, U ); U ?%?( U, U ); U ?/=?( U &, U ); }; // Multiplicative trait Arithmetic( T | Relational( T ) | Multiplicative( T ) ) { }; // Arithmetic // Local Variables: // // mode: c // // tab-width: 4 // // End: //