rvm 1.08

types.h

Go to the documentation of this file.
00001 #ifndef __types_h__
00002 #define __types_h__
00003 
00004 #ifdef HAVE_STDLIB_H
00005 #include <stdlib.h>
00006 #endif
00007 
00008 /** \file types.h Basic types definitions and templates. */
00009 
00010 // ----------------------------------------------------------------------------
00011 
00012 /**
00013         \typedef
00014         Define a 8-bit unsigned integer type.
00015 
00016         The following code, along with tests performed by the GNU Autoconf
00017         scripts, define a system-independent 8-bit unsigned integer.
00018  */
00019 #if SIZEOF_UNSIGNED_CHAR == 1
00020         typedef unsigned char uint8;
00021 #elif SIZEOF_UNSIGNED_SHORT == 1
00022         typedef unsigned short uint8;
00023 #elif SIZEOF_UNSIGNED_INT == 1
00024         typedef unsigned int uint8;
00025 #elif SIZEOF_UNSIGNED_LONG == 1
00026         typedef unsigned long uint8;
00027 #elif SIZEOF_UNSIGNED_LONG_LONG == 1
00028         typedef unsigned long long uint8;
00029 #else
00030 #       error *** ERROR: No 8-bit type found to use as uint8
00031 #endif
00032 
00033 /**
00034         \typedef
00035         Define a 16-bit unsigned integer type.
00036 
00037         The following code, along with tests performed by the GNU Autoconf
00038         scripts, define a system-independent 16-bit unsigned integer.
00039  */
00040 #if SIZEOF_UNSIGNED_CHAR == 2
00041         typedef unsigned char uint16;
00042 #elif SIZEOF_UNSIGNED_SHORT == 2
00043         typedef unsigned short uint16;
00044 #elif SIZEOF_UNSIGNED_INT == 2
00045         typedef unsigned int uint16;
00046 #elif SIZEOF_UNSIGNED_LONG == 2
00047         typedef unsigned long uint16;
00048 #elif SIZEOF_UNSIGNED_LONG_LONG == 2
00049         typedef unsigned long long uint16;
00050 #else
00051 #       error *** ERROR: No 16-bit type found to use as uint16
00052 #endif
00053 
00054 /**
00055         \typedef
00056         Define a 32-bit unsigned integer type.
00057 
00058         The following code, along with tests performed by the GNU Autoconf
00059         scripts, define a system-independent 32-bit unsigned integer.
00060  */
00061 #if SIZEOF_UNSIGNED_CHAR == 4
00062         typedef unsigned char uint32;
00063 #elif SIZEOF_UNSIGNED_SHORT == 4
00064         typedef unsigned short uint32;
00065 #elif SIZEOF_UNSIGNED_INT == 4
00066         typedef unsigned int uint32;
00067 #elif SIZEOF_UNSIGNED_LONG == 4
00068         typedef unsigned long uint32;
00069 #elif SIZEOF_UNSIGNED_LONG_LONG == 4
00070         typedef unsigned long long uint32;
00071 #else
00072 #       error *** ERROR: No 32-bit type found to use as uint32
00073 #endif
00074 
00075 /**
00076         \typedef
00077         Define a 64-bit unsigned integer type.
00078 
00079         The following code, along with tests performed by the GNU Autoconf
00080         scripts, define a system-independent 64-bit unsigned integer.
00081  */
00082 #if SIZEOF_UNSIGNED_CHAR == 8
00083         typedef unsigned char uint64;
00084 #elif SIZEOF_UNSIGNED_SHORT == 8
00085         typedef unsigned short uint64;
00086 #elif SIZEOF_UNSIGNED_INT == 8
00087         typedef unsigned int uint64;
00088 #elif SIZEOF_UNSIGNED_LONG == 8
00089         typedef unsigned long uint64;
00090 #elif SIZEOF_UNSIGNED_LONG_LONG == 8
00091         typedef unsigned long long uint64;
00092 #else
00093 #       error *** ERROR: No 64-bit type found to use as uint64
00094 #endif
00095 
00096 // ---------------------------------------------------------------------------
00097 
00098 /** Return false for any variable that is not a char */
00099 template<typename T>
00100 static bool is_signed_char(const T& a_arg)
00101 { return(false); }
00102 
00103 /** Return true for any variable that is a char */
00104 // template<>
00105 bool is_signed_char(const char& a_arg);
00106 // { return(true); }
00107 
00108 /** Return false for any variable that is not an unsigned char */
00109 template<typename T>
00110 static bool is_unsigned_char(const T& a_arg) 
00111 { return(false); }
00112 
00113 /** Return true for any variable that is an unsigned char */
00114 // template<>
00115 bool is_unsigned_char(const unsigned char& a_arg);
00116 // { return(true); }
00117 
00118 /** Return true for any variable that is either a signed or unsigned char */
00119 template<typename T>
00120 static bool is_char(const T& a_arg) 
00121 { return(is_signed_char(a_arg) || is_unsigned_char(a_arg)); }
00122 
00123 // -----
00124 
00125 /** Return false for any variable that is not a short */
00126 template<typename T>
00127 static bool is_signed_short(const T& a_arg)
00128 { return(false); }
00129 
00130 /** Return true for any variable that is a short */
00131 // template<>
00132 bool is_signed_short(const short& a_arg);
00133 // { return(true); }
00134 
00135 /** Return false for any variable that is not an unsigned short */
00136 template<typename T>
00137 static bool is_unsigned_short(const T& a_arg) 
00138 { return(false); }
00139 
00140 /** Return true for any variable that is an unsigned short */
00141 // template<>
00142 bool is_unsigned_short(const unsigned short& a_arg);
00143 // { return(true); }
00144 
00145 /** Return true for any variable that is either a signed or unsigned short */
00146 template<typename T>
00147 static bool is_short(const T& a_arg) 
00148 { return(is_signed_short(a_arg) || is_unsigned_short(a_arg)); }
00149 
00150 // -----
00151 
00152 /** Return false for any variable that is not a int */
00153 template<typename T>
00154 static bool is_signed_int(const T& a_arg)
00155 { return(false); }
00156 
00157 /** Return true for any variable that is a int */
00158 // template<>
00159 bool is_signed_int(const int& a_arg);
00160 // { return(true); }
00161 
00162 /** Return false for any variable that is not an unsigned int */
00163 template<typename T>
00164 static bool is_unsigned_int(const T& a_arg) 
00165 { return(false); }
00166 
00167 /** Return true for any variable that is an unsigned int */
00168 // template<>
00169 bool is_unsigned_int(const unsigned int& a_arg);
00170 // { return(true); }
00171 
00172 /** Return true for any variable that is either a signed or unsigned int */
00173 template<typename T>
00174 static bool is_int(const T& a_arg) 
00175 { return(is_signed_int(a_arg) || is_unsigned_int(a_arg)); }
00176 
00177 // -----
00178 
00179 /** Return false for any variable that is not a long */
00180 template<typename T>
00181 static bool is_signed_long(const T& a_arg)
00182 { return(false); }
00183 
00184 /** Return true for any variable that is a long */
00185 // template<>
00186 bool is_signed_long(const long& a_arg);
00187 // { return(true); }
00188 
00189 /** Return false for any variable that is not an unsigned long */
00190 template<typename T>
00191 static bool is_unsigned_long(const T& a_arg) 
00192 { return(false); }
00193 
00194 /** Return true for any variable that is an unsigned long */
00195 // template<>
00196 bool is_unsigned_long(const unsigned long& a_arg);
00197 // { return(true); }
00198 
00199 /** Return true for any variable that is either a signed or unsigned long */
00200 template<typename T>
00201 static bool is_long(const T& a_arg) 
00202 { return(is_signed_long(a_arg) || is_unsigned_long(a_arg)); }
00203 
00204 // -----
00205 
00206 /** Return false for any variable that is not a long long */
00207 template<typename T>
00208 static bool is_signed_long_long(const T& a_arg)
00209 { return(false); }
00210 
00211 /** Return true for any variable that is a long long */
00212 // template<>
00213 bool is_signed_long_long(const long long& a_arg);
00214 // { return(true); }
00215 
00216 /** Return false for any variable that is not an unsigned long long */
00217 template<typename T>
00218 static bool is_unsigned_long_long(const T& a_arg) 
00219 { return(false); }
00220 
00221 /** Return true for any variable that is an unsigned long long */
00222 // template<>
00223 bool is_unsigned_long_long(const unsigned long long& a_arg);
00224 // { return(true); }
00225 
00226 /** Return true for any variable that is either a signed or unsigned long long */
00227 template<typename T>
00228 static bool is_long_long(const T& a_arg) 
00229 { return(is_signed_long_long(a_arg) || is_unsigned_long_long(a_arg)); }
00230 
00231 // -----
00232 
00233 /** Return false for any variable that is not a float */
00234 template<typename T>
00235 static bool is_float(const T& a_arg)
00236 { return(false); }
00237 
00238 /** Return true for any variable that is a float */
00239 // template<>
00240 bool is_float(const float& a_arg);
00241 // { return(true); }
00242 
00243 // -----
00244 
00245 /** Return false for any variable that is not a double */
00246 template<typename T>
00247 static bool is_double(const T& a_arg)
00248 { return(false); }
00249 
00250 /** Return true for any variable that is a double */
00251 // template<>
00252 bool is_double(const double& a_arg);
00253 // { return(true); }
00254 
00255 // -----
00256 
00257 /** Return false for any variable that is not a bool */
00258 template<typename T>
00259 static bool is_bool(const T& a_arg)
00260 { return(false); }
00261 
00262 /** Return true for any variable that is a bool */
00263 // template<>
00264 bool is_bool(const bool& a_arg);
00265 // { return(true); }
00266 
00267 // -----
00268 
00269 /** Return true for any variable that is a signed type */
00270 template<typename T>
00271 static bool is_signed(const T& a_arg)
00272 {
00273         return(
00274                 is_signed_char(a_arg)
00275                 || is_signed_short(a_arg)
00276                 || is_signed_int(a_arg)
00277                 || is_signed_long(a_arg)
00278                 || is_signed_long_long(a_arg)
00279                 || is_float(a_arg)
00280                 || is_double(a_arg)
00281                 );
00282 }
00283 
00284 /** Return true for any variable that is an unsigned type */
00285 template<typename T>
00286 static bool is_unsigned(const T& a_arg)
00287 {
00288         return(
00289                 is_unsigned_char(a_arg)
00290                 || is_unsigned_short(a_arg)
00291                 || is_unsigned_int(a_arg)
00292                 || is_unsigned_long(a_arg)
00293                 || is_unsigned_long_long(a_arg)
00294                 );
00295 }
00296 
00297 // ----------------------------------------------------------------------------
00298 
00299 template<typename T>
00300 static const char * type_name(const T & a_arg)
00301 { return("unknown"); }
00302 
00303 // template<>
00304 const char * type_name(const unsigned char & a_arg);
00305 // { return("unsigned char"); }
00306 
00307 // template<>
00308 const char * type_name(const char & a_arg);
00309 // { return("char"); }
00310 
00311 // template<>
00312 const char * type_name(const unsigned short & a_arg);
00313 // { return("unsigned short"); }
00314 
00315 // template<>
00316 const char * type_name(const short & a_arg);
00317 // { return("short"); }
00318 
00319 // template<>
00320 const char * type_name(const unsigned int & a_arg);
00321 // { return("unsigned int"); }
00322 
00323 // template<>
00324 const char * type_name(const int & a_arg);
00325 // { return("int"); }
00326 
00327 // template<>
00328 const char * type_name(const unsigned long & a_arg);
00329 // { return("unsigned long"); }
00330 
00331 // template<>
00332 const char * type_name(const long & a_arg);
00333 // { return("long"); }
00334 
00335 // template<>
00336 const char * type_name(const unsigned long long & a_arg);
00337 // { return("unsigned long long"); }
00338 
00339 // template<>
00340 const char * type_name(const long long & a_arg);
00341 // { return("long long"); }
00342 
00343 // template<>
00344 const char * type_name(const float & a_arg);
00345 // { return("float"); }
00346 
00347 // template<>
00348 const char * type_name(const double & a_arg);
00349 // { return("double"); }
00350 
00351 // template<>
00352 const char * type_name(const bool & a_arg);
00353 // { return("bool"); }
00354 
00355 // ----------------------------------------------------------------------------
00356 
00357 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines