NGSolve  4.9
ngstd/templates.hpp
00001 #ifndef FILE_NGSTD_TEMPLATES
00002 #define FILE_NGSTD_TEMPLATES
00003 
00004 /*********************************************************************/
00005 /* File:   templates.hpp                                             */
00006 /* Author: Joachim Schoeberl                                         */
00007 /* Date:   25. Mar. 2000                                             */
00008 /*********************************************************************/
00009 
00010 namespace ngstd 
00011 {
00012 
00014 template <class T>
00015 inline T min2 (T a, T b)
00016 {
00017   return (a < b) ? a : b;
00018 }
00019 
00021 template <class T>
00022 inline T max2 (T a, T b)
00023 {
00024   return (a > b) ? a : b;
00025 }
00026 
00028 template <class T>
00029 inline T min3 (T a, T b, T c)
00030 {
00031   return (a < b) ? (a < c) ? a : c
00032     : (b < c) ? b : c;
00033 }
00034 
00036 template <class T>
00037 inline T max3 (T a, T b, T c)
00038 {
00040   return (a > b) ? ((a > c) ? a : c)
00041     : ((b > c) ? b : c);
00042 }
00043 
00044 
00046 template <class T>
00047 inline void Swap (T & a, T & b)
00048 {
00049   T temp = a;
00050   a = b;
00051   b = temp;
00052 }
00053 
00054 
00056 template <class T>
00057 inline int sgn (T a)
00058 {
00059   return (a > 0) ? 1 : ( ( a < 0) ? -1 : 0 );
00060 }
00061 
00063 template <class T>
00064 inline T sqr (const T a)
00065 {
00066   return a * a; 
00067 }
00068 
00070 template <class T>
00071 inline T pow3 (const T a)
00072 {
00073   return a * a * a; 
00074 }
00075 
00076 
00077 
00078 template <class T>
00079 inline string ToString (const T& t)
00080 {
00081   stringstream ss;
00082   ss << t;
00083   return ss.str();
00084 }
00085 
00086 
00087 
00088 template <class T>
00089 void SaveBin (ostream & ost, const T & val)
00090 {
00091   const char * cp = reinterpret_cast<const char*> (&val);
00092   for (unsigned j = 0; j < sizeof(T); j++)
00093     ost.put(cp[j]);
00094 }
00095 
00096 
00097 template <class T>
00098 void LoadBin (istream & ist, T & val)
00099 {
00100   char * cp = reinterpret_cast<char*> (&val);
00101   for (unsigned j = 0; j < sizeof(T); j++)
00102     ist.get(cp[j]);
00103 }
00104 
00105 
00106 }
00107 
00108 #endif