PlatformSpec.h

00001 /*
00002  * Expression Template Matrix Library
00003  *
00004  * Copyright (C) 2004 - 2006 Ricky Lung <mtlung@users.sourceforge.net>
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  *
00020  */
00021 
00022 
00023 #ifndef _EXMAT_PLATFORMSPEC_H
00024 #define _EXMAT_PLATFORMSPEC_H
00025 
00026 
00027 #   if (__INTEL_COMPILER)
00028 #       define EXMAT_ICL 1
00029 #   elif (__MWERKS__)
00030 #       define EXMAT_MWERKS 1
00031 #   elif (__BORLANDC__ >= 0x560)
00032 #       define EXMAT_BORLANDC 1
00033 #   elif (_MSC_VER >= 1400)
00034 #       define EXMAT_VC2005 1
00035 #   elif (_MSC_VER >= 1301)
00036 #       define EXMAT_VC2003 1
00037 #   elif (_MSC_VER >= 1300)
00038 #       define EXMAT_VC7 1
00039 #   elif (_MSC_VER >= 1200)
00040 #       define EXMAT_VC6 1
00041 #   elif (__GNUC__)
00042 #       define EXMAT_GNUC 1
00043 #   else
00044 #       define EXMAT_UNKNOWN_COMPILER 1
00045 #   endif
00046 
00047 #   ifdef _MSC_VER
00048 #       define EXMAT_VC 1
00049 #   endif
00050 
00051 #   if (EXMAT_ICL)
00052 #       define TTYPENAME typename
00053 #       define HAVE_PARTIAL_SPECIALIZATION  1
00054 #       define HAVE_TT_PARAMETER            1
00055 #       define EXMAT_USING_MEMVAR           1
00056 #       define EXMAT_NO_SFINAE              0   // Substitution failure is not an error
00057 #       define EXMAT_NON_NS_TOTALSPEC       0   // Non namespace scope total specialization
00058 #   elif (EXMAT_MWERKS)
00059 #       define TTYPENAME typename
00060 #       define HAVE_PARTIAL_SPECIALIZATION  1
00061 #       define HAVE_TT_PARAMETER            1
00062 #       define EXMAT_USING_MEMVAR           1
00063 #       define EXMAT_NO_SFINAE              1
00064 #       define EXMAT_NON_NS_TOTALSPEC       0
00065 #   elif (EXMAT_BORLANDC)
00066 #       define TTYPENAME typename
00067 #       define HAVE_PARTIAL_SPECIALIZATION  1
00068 #       define HAVE_TT_PARAMETER            1
00069 #       define EXMAT_USING_MEMVAR           1
00070 #       define EXMAT_NO_SFINAE              0
00071 #       define EXMAT_NON_NS_TOTALSPEC       0
00072 #   elif (EXMAT_VC2005)
00073 #       define TTYPENAME typename
00074 #       define HAVE_PARTIAL_SPECIALIZATION  1
00075 #       define HAVE_TT_PARAMETER            1
00076 #       define EXMAT_USING_MEMVAR           1
00077 #       define EXMAT_NO_SFINAE              0
00078 #       define EXMAT_NON_NS_TOTALSPEC       0
00079 #   elif (EXMAT_VC2003)
00080 #       define TTYPENAME typename
00081 #       define HAVE_PARTIAL_SPECIALIZATION  1
00082 #       define HAVE_TT_PARAMETER            1
00083 #       define EXMAT_USING_MEMVAR           1
00084 #       define EXMAT_NO_SFINAE              0
00085 #       define EXMAT_NON_NS_TOTALSPEC       0
00086 #   elif (EXMAT_VC7)
00087 #       define TTYPENAME
00088 #       define HAVE_PARTIAL_SPECIALIZATION  0
00089 #       define HAVE_TT_PARAMETER            0
00090 #       define EXMAT_USING_MEMVAR           0
00091 #       define EXMAT_NO_SFINAE              1
00092 #       define EXMAT_NON_NS_TOTALSPEC       0
00093 #   elif (EXMAT_VC6)
00094 #       define TTYPENAME
00095 #       define HAVE_PARTIAL_SPECIALIZATION  0
00096 #       define HAVE_TT_PARAMETER            0
00097 #       define EXMAT_USING_MEMVAR           0
00098 #       define EXMAT_NO_SFINAE              1
00099 #       define EXMAT_NON_NS_TOTALSPEC       1
00100 #   elif (EXMAT_GNUC)
00101 #       define TTYPENAME typename
00102 #       define HAVE_PARTIAL_SPECIALIZATION  1
00103 #       define HAVE_TT_PARAMETER            1
00104 #       define EXMAT_USING_MEMVAR           1
00105 #       define EXMAT_NO_SFINAE              0
00106 #       define EXMAT_NON_NS_TOTALSPEC       0
00107 #   else
00108 #       define TTYPENAME typename
00109 #       define HAVE_PARTIAL_SPECIALIZATION  1
00110 #       define HAVE_TT_PARAMETER            1
00111 #       define EXMAT_USING_MEMVAR           1
00112 #       define EXMAT_NO_SFINAE              0
00113 #       define EXMAT_NON_NS_TOTALSPEC       0
00114 #   endif
00115 
00116 
00117 // Detect the version of GNUC
00118 #ifdef EXMAT_GNUC
00119 #   define EXMAT_GNUC_VERSION ( __GNUC__ * 10000    \
00120                                 + __GNUC_MINOR__ * 100  \
00121                                 + __GNUC_PATCHLEVEL__)
00122 #endif  // EXMAT_GNUC
00123 
00124 
00125 #if EXMAT_VC || EXMAT_ICL
00126 #   pragma inline_depth( 255 )
00127 #   pragma inline_recursion( on )
00128 #   pragma auto_inline( on )
00129 
00130 #   define EXMAT_INLINE0
00131 #   define EXMAT_INLINE1 inline
00132 #   define EXMAT_INLINE2 __forceinline
00133 #elif EXMAT_GNUC
00134 #   define EXMAT_INLINE0
00135 #   define EXMAT_INLINE1 __inline__
00136 //  GCC 3.4: __always_inline__ fails on template function for no reason
00137 //  http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14950
00138 #   if (EXMAT_GNUC_VERSION > 30000 && EXMAT_GNUC_VERSION < 30500) && !defined(__NO_INLINE__)
00139 #       define EXMAT_INLINE2 __inline__ __attribute__((always_inline))
00140 #   else
00141 #       define EXMAT_INLINE2 __inline__
00142 #   endif
00143 #else
00144 #   define EXMAT_INLINE0
00145 #   define EXMAT_INLINE1 inline
00146 #   define EXMAT_INLINE2 inline
00147 #endif  // _MSC_VER
00148 
00149 
00150 #if EXMAT_VC6
00151     typedef int intptr_t;
00152 #elif EXMAT_VC
00153 #   include <stddef.h>
00154 #elif EXMAT_GNUC
00155 #   include <inttypes.h>
00156 #else
00157     typedef int intptr_t;
00158 #endif
00159 
00160 
00161 #endif  // _EXMAT_PLATFORMSPEC_H

Generated on Sat May 6 23:11:59 2006 for Exmat by  doxygen 1.4.6-NO