Teuchos_ConfigDefs.hpp

Go to the documentation of this file.
00001 /*
00002 // @HEADER
00003 // ***********************************************************************
00004 // 
00005 //                    Teuchos: Common Tools Package
00006 //                 Copyright (2004) Sandia Corporation
00007 // 
00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00009 // license for use of this work by or on behalf of the U.S. Government.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //  
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA
00025 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00026 // 
00027 // ***********************************************************************
00028 // @HEADER
00029 */
00030 
00031 /*
00032   Kris
00033   07.08.03 -- Move into Teuchos package/namespace
00034 */
00035 
00036 #ifndef _TEUCHOS_CONFIGDEFS_HPP_
00037 #define _TEUCHOS_CONFIGDEFS_HPP_
00038 
00043 #ifdef HAVE_CONFIG_H
00044 
00045 /*
00046  * The macros PACKAGE, PACKAGE_NAME, etc, get defined for each package and need to
00047  * be undef'd here to avoid warnings when this file is included from another package.
00048  * KL 11/25/02
00049  */
00050 
00051 #ifdef PACKAGE
00052 #undef PACKAGE
00053 #endif
00054 
00055 #ifdef PACKAGE_NAME
00056 #undef PACKAGE_NAME
00057 #endif
00058 
00059 #ifdef PACKAGE_BUGREPORT
00060 #undef PACKAGE_BUGREPORT
00061 #endif
00062 
00063 #ifdef PACKAGE_STRING
00064 #undef PACKAGE_STRING
00065 #endif
00066 
00067 #ifdef PACKAGE_TARNAME
00068 #undef PACKAGE_TARNAME
00069 #endif
00070 
00071 #ifdef PACKAGE_VERSION
00072 #undef PACKAGE_VERSION
00073 #endif
00074 
00075 #ifdef VERSION
00076 #undef VERSION
00077 #endif
00078 
00079 #include "Teuchos_config.h"
00080 
00081 #ifdef __cplusplus
00082 
00083 /******************************************************************************
00084  *   Choose header file flavor: either ANSI-style (no .h, e.g. <iostream>) or
00085  * old-style (with .h, e.g., <iostream.h>). 
00086  * KL 9/26/03
00087  *****************************************************************************/
00088 
00089 #if HAVE_CSTDIO
00090 #include <cstdio>
00091 #elif HAVE_STDIO_H
00092 #include <stdio.h>
00093 #else
00094 #error "Found neither cstdio nor stdio.h"
00095 #endif
00096 
00097 #if HAVE_CSTDARG
00098 #include <cstdarg>
00099 #elif HAVE_STDARG_H
00100 #include <stdarg.h>
00101 #else
00102 #error "Found neither cstdarg nor stdarg.h"
00103 #endif
00104 
00105 #if HAVE_CSTDLIB
00106 #include <cstdlib>
00107 #elif HAVE_STDLIB_H
00108 #include <stdlib.h>
00109 #else
00110 #error "Found neither cstdlib nor stdlib.h"
00111 #endif
00112 
00113 #if HAVE_STRING
00114 #include <string>
00115 #elif HAVE_STRING_H
00116 #include <string.h>
00117 #else
00118 #error "Found neither string nor string.h"
00119 #endif
00120 
00121 #if HAVE_IOSTREAM
00122 #include <iostream>
00123 #elif HAVE_IOSTREAM_H
00124 #include <iostream.h>
00125 #else
00126 #error "Found neither iostream nor iostream.h"
00127 #endif
00128 
00129 #if HAVE_IOSTREAM
00130 #include <fstream>
00131 #elif HAVE_IOSTREAM_H
00132 #include <fstream.h>
00133 #else
00134 #error "Found neither fstream nor fstream.h"
00135 #endif
00136 
00137 #if HAVE_STDEXCEPT
00138 #include <stdexcept>
00139 #elif HAVE_STDEXCEPT_H
00140 #include <stdexcept.h>
00141 #else
00142 #error "Found neither stdexcept nor stdexcept.h"
00143 #endif
00144 
00145 #ifdef HAVE_CASSERT
00146 #include <cassert>
00147 #else
00148 #include <assert.h>   
00149 #endif
00150 
00151 #ifdef HAVE_COMPLEX
00152 #include <complex>
00153 #elif defined(HAVE_COMPLEX_H)
00154 #include <complex.h>
00155 #endif
00156 
00157 #ifdef HAVE_VECTOR
00158 #include <vector>
00159 #include <deque> // RAB: 2003/11/10: If you have <vector> you should have <deque>
00160 #elif defined(HAVE_VECTOR_H)
00161 #include <vector.h>
00162 #endif
00163 
00164 #ifdef HAVE_ALGORITHM
00165 #include <algorithm>
00166 #elif defined(HAVE_ALGO_H)
00167 #include <algo.h>
00168 #elif defined(HAVE_ALGORITHM_H)
00169 #include <algorithm.h>
00170 #endif
00171 
00172 #ifdef HAVE_MAP
00173 #include <map>
00174 #elif defined(HAVE_MAP_H)
00175 #include <map.h>
00176 #endif
00177 
00178 #ifdef HAVE_LIST
00179 #include <list>
00180 #elif defined(HAVE_LIST_H)
00181 #include <list.h>
00182 #endif
00183 
00184 #ifdef HAVE_STRING
00185 #include <string>
00186 #elif defined(HAVE_STRING_H) 
00187 #include <string.h>
00188 #elif defined(HAVE_STRINGS_H)
00189 #include <strings.h>
00190 #endif
00191 
00192 #ifdef HAVE_TYPEINFO
00193 #include <typeinfo>
00194 #endif
00195 
00196 #ifdef HAVE_NUMERIC_LIMITS
00197 #include <limits>
00198 #endif
00199 
00200 /******************************************************************************
00201  * Choose string stream type: preferably std::ostringstream, otherwise
00202  * ostringstream or (gasp!) ostrstream. 
00203  *
00204  * Ross is going to write ANSI-compatible stringstreams to replace ostrstream
00205  * on our non-compliant platforms.
00206  *
00207  * KL 09/26/03
00208  ******************************************************************************/
00209 
00210 #if HAVE_SSTREAM
00211 #include <sstream>
00212 typedef std::ostringstream TeuchosOStringStream;
00213 #define TEUCHOS_OSTRINGSTREAM_GET_C_STR(OSS) (OSS).str().c_str()
00214 #elif HAVE_SSTREAM_H
00215 #include <sstream.h>
00216 typedef ostringstream TeuchosOStringStream;
00217 #define TEUCHOS_OSTRINGSTREAM_GET_C_STR(OSS) (OSS).str().c_str()
00218 #elif HAVE_STRSTREAM
00219 #include <strstream>
00220 typedef std::ostrstream TeuchosOStringStream;
00221 /* STLPort is not configured on Janus to inject strstream into "std" namespace */ 
00222 #if JANUS_STLPORT
00223  namespace std { class ostrstream; }
00224 #endif
00225 #define TEUCHOS_OSTRINGSTREAM_GET_C_STR(OSS) (OSS).str()
00226 #elif HAVE_STRSTREAM_H
00227 #include <strstream.h>
00228 typedef ostrstream TeuchosOStringStream;
00229 #define TEUCHOS_OSTRINGSTREAM_GET_C_STR(OSS) (OSS).str()
00230 #else
00231 #error "Found neither sstream, sstream.h, strstream.h, nor strstream"
00232 #endif
00233 
00234 #if defined(TFLOP)
00235 #ifdef HAVE_STRING
00236 using std::string;
00237 #endif
00238 #ifdef HAVE_IOSTREAM
00239 using std::istream;
00240 using std::ostream;
00241 using std::cerr;
00242 using std::cout;
00243 using std::endl;
00244 #endif
00245 #ifdef HAVE_COMPLEX
00246 using std::complex;
00247 #endif
00248 #else /* NOT TFLOP */ 
00249 #ifndef JANUS_STLPORT
00250 #if HAVE_CMATH
00251 #include <cmath>
00252 #elif HAVE_MATH_H
00253 #include <math.h>
00254 #else
00255 #error "Found neither cmath nor math.h"
00256 #endif
00257 #else /* JANUS_STLPORT */
00258 #include <math.h>
00259 #endif /* JANUS_STLPORT */
00260 using namespace std;
00261 #endif /* defined(TFLOP) */
00262 
00263 // RAB: 20031002: Added this for all platforms in addition to TFLOPS?
00264 #ifdef HAVE_IOMANIP
00265 #include <iomanip>
00266 #else
00267 #include <iomanip.h>  
00268 #endif
00269 
00270 #else /* __cplusplus not defined */
00271 
00272 #include <assert.h>   
00273 #include <limits.h>
00274 #ifdef HAVE_MALLOC_H
00275 #include <malloc.h>
00276 #endif
00277 #include <math.h>
00278 #include <stdarg.h>
00279 #include <stdio.h>
00280 #include <stdlib.h>
00281 #include <string.h>
00282 #include <time.h>
00283 
00284 #endif /* __cplusplus */
00285 
00286 #else /* fallback for the amazingly unlikely event we have no HAVE_CONFIG_H! */
00287 
00288 #include <iostream>
00289 #include <iomanip>
00290 #include <fstream>
00291 #include <string>
00292 #include <vector>
00293 #include <map>
00294 #include <algorithm>
00295 #include <sstream>
00296 #include <stdexcept>
00297 #include <typeinfo>
00298 
00299 #include <sstream>
00300 typedef std::ostringstream TeuchosOStringStream;
00301 #define TEUCHOS_OSTRINGSTREAM_GET_C_STR(OSS) (OSS).str().c_str()
00302 
00303 #if defined(SGI) || defined(SGI64) || defined(SGI32) || defined(CPLANT)
00304 
00305 #include <stdlib.h>
00306 #include <stdio.h>
00307 #include <assert.h>
00308 #include <math.h>
00309 using namespace std;
00310 
00311 #elif defined(TFLOP)
00312 
00313 #include <stdlib.h>
00314 #include <stdio.h>
00315 #include <assert.h>
00316 using std::string;
00317 #include <iomanip>
00318 using std::istream;
00319 using std::ostream;
00320 using std::cerr;
00321 using std::cout;
00322 using std::endl;
00323 #include <list>
00324 
00325 #else
00326 
00327 #include <cstdlib>
00328 #include <cstdio>
00329 #include <cassert>
00330 #include <cmath>
00331 using namespace std;
00332 
00333 #endif
00334 
00335 #endif /* end HAVE_CONFIG_H */
00336 
00337 /* Define bool in case we are running on an ancient, quirky, or merely
00338  * stupid compiler having no built-in bool.  WARNING: THIS IS EXTREMELY
00339  * DANGEROUS, BECAUSE OTHER CODES TO WHICH WE LINK MAY HACK THEIR BOOL
00340  * DEFINITIONS IN DIFFERENT WAYS, E.G. VIA A TYPEDEF. If that happens, 
00341  * a whole bunch of link errors will result. Avoid this hack if at all 
00342  * possible.
00343  */ 
00344 
00345 #ifdef TEUCHOS_SIMULATE_BOOL
00346 
00347 #ifdef bool
00348 #undef bool
00349 #endif
00350 #ifdef true
00351 #undef true
00352 #endif
00353 #ifdef false
00354 #undef false
00355 #endif
00356 
00357 #define bool int
00358 #define true 1
00359 #define false 0
00360 
00361 #endif
00362 
00363 #ifdef __cplusplus
00364 
00365 const double Teuchos_MinDouble = 1.0E-100;
00366 const double Teuchos_MaxDouble = 1.0E+100;
00367 const double Teuchos_Overflow = 1.79E308; // Used to test if equilibration should be done.
00368 const double Teuchos_Underflow = 2.23E-308;
00369 
00370 #endif /* __cplusplus */
00371 
00372 /* Delete any previous definition of TEUCHOS_NO_ERROR_REPORTS */
00373 
00374 #ifdef TEUCHOS_CHK_ERR
00375 #undef TEUCHOS_CHK_ERR
00376 #endif
00377 #ifdef TEUCHOS_CHK_PTR
00378 #undef TEUCHOS_CHK_PTR
00379 #endif
00380 #ifdef TEUCHOS_CHK_REF
00381 #undef TEUCHOS_CHK_REF
00382 #endif
00383 
00384 /* Make error report silent by defining TEUCHOS_NO_ERROR_REPORTS */
00385 
00386 #define TEUCHOS_CHK_ERR(a) { if (a != 0)  return(a);}
00387 #define TEUCHOS_CHK_PTR(a) { return(a);}
00388 #define TEUCHOS_CHK_REF(a) { return(a);}
00389 #ifdef __cplusplus
00390 const int Teuchos_DefaultTracebackMode = 1; /* Default value for traceback behavior */
00391 #endif
00392 
00393 /* Define some macros */
00394 #define TEUCHOS_MAX(x,y) (( (x) > (y) ) ? (x)  : (y) )     /* max function  */
00395 #define TEUCHOS_MIN(x,y) (( (x) < (y) ) ? (x)  : (y) )     /* min function  */
00396 #define TEUCHOS_SGN(x)   (( (x) < 0.0 ) ? -1.0 : 1.0 )     /* sign function */
00397 
00398 #endif /* _TEUCHOS_CONFIGDEFS_HPP_ */

Generated on Thu Sep 18 12:39:09 2008 for Teuchos - Trilinos Tools Package by doxygen 1.3.9.1