1 /* emacs edit mode for this file is -*- C++ -*- */
2
3 #ifndef INCL_FUNCTIONS_H
4 #define INCL_FUNCTIONS_H
5
6 /**
7 *
8 * @file ftmpl_functions.h
9 * some useful template functions.
10 *
11 * Header file corresponds to: nothing
12 *
13 * Hierarchy: bottom, templates
14 *
15 * Developer note:
16 * ---------------
17 * Sooner or later you need them: functions to calculate the
18 * minimum or maximum of two values or the absolute value. Here
19 * they are. All of them are inlined, hence there is no source
20 * file corresponding to `ftmpl_functions.h'.
21 *
22 * The functions are for internal use only (i.e., to build the
23 * library), hence they should not be included from `factory.h'.
24 * However, we have to install `ftmpl_functions.h' with the other
25 * templates since the functions have to be instantiated.
26 *
27 **/
28
29 /** template <class T> inline T tmax ( const T & a, const T & b )
30 *
31 * tmax() - return the maximum of `a' and `b'.
32 *
33 * Developers note:
34 * ----------------
35 * `T' should have an `operator >()'.
36 *
37 **/
38 template <class T>
tmax(const T & a,const T & b)39 inline T tmax ( const T & a, const T & b )
40 {
41 return (a > b) ? a : b;
42 }
43
44 /** template <class T> inline T tmin ( const T & a, const T & b )
45 *
46 * tmin() - return the minimum of `a' and `b'.
47 *
48 * Developers note:
49 * ----------------
50 * `T' should have an `operator <()'.
51 *
52 **/
53 template <class T>
tmin(const T & a,const T & b)54 inline T tmin ( const T & a, const T & b )
55 {
56 return (a < b) ? a : b;
57 }
58
59 /** template <class T> inline T tabs ( const T & a )
60 *
61 * tabs() - return the absolute value of `a'.
62 *
63 * `a' is negated iff it is less or equal `T( 0 )'.
64 *
65 * Developers note:
66 * ----------------
67 * `T' should have an `operator >()', an `operator -()', and a
68 * `T::T( int )' constructor.
69 *
70 **/
71 template <class T>
tabs(const T & a)72 inline T tabs ( const T & a )
73 {
74 return (a > T( 0 )) ? a : -a;
75 }
76
77 #endif /* ! INCL_FUNCTIONS_H */
78