diff DEPENDENCIES/generic/include/boost/wave/util/cpp_macromap_predef.hpp @ 16:2665513ce2d3

Add boost headers
author Chris Cannam
date Tue, 05 Aug 2014 11:11:38 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DEPENDENCIES/generic/include/boost/wave/util/cpp_macromap_predef.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,288 @@
+/*=============================================================================
+    Boost.Wave: A Standard compliant C++ preprocessor library
+
+    Definition of the predefined macros
+    
+    http://www.boost.org/
+
+    Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
+    Software License, Version 1.0. (See accompanying file
+    LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#if !defined(CPP_MACROMAP_PREDEF_HPP_HK041119)
+#define CPP_MACROMAP_PREDEF_HPP_HK041119
+
+#include <cstdio>
+#include <boost/assert.hpp>
+
+#include <boost/wave/wave_config.hpp>
+#include <boost/wave/wave_config_constant.hpp>
+#include <boost/wave/token_ids.hpp>
+#include <boost/wave/util/time_conversion_helper.hpp> // time_conversion_helper 
+
+// this must occur after all of the includes and before any code appears
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_PREFIX
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// This file contains the definition of functions needed for the management
+// of static and dynamic predefined macros, such as __DATE__, __TIME__ etc.
+//
+// Note: __FILE__, __LINE__ and __INCLUDE_LEVEL__ are handled in the file
+//       cpp_macromap.hpp.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost {
+namespace wave {
+namespace util {
+
+    ///////////////////////////////////////////////////////////////////////////
+    class predefined_macros 
+    {
+        typedef BOOST_WAVE_STRINGTYPE string_type;
+        
+    public:
+    // list of static predefined macros
+        struct static_macros {
+            char const *name;
+            boost::wave::token_id token_id;
+            char const *value;
+        };
+
+    // list of dynamic predefined macros
+        struct dynamic_macros {
+            char const *name;
+            boost::wave::token_id token_id;
+            string_type (predefined_macros:: *generator)() const;
+        };
+
+    private:
+        boost::wave::util::time_conversion_helper compilation_time_;
+        string_type datestr_;     // __DATE__
+        string_type timestr_;     // __TIME__
+        string_type version_;     // __SPIRIT_PP_VERSION__/__WAVE_VERSION__
+        string_type versionstr_;  // __SPIRIT_PP_VERSION_STR__/__WAVE_VERSION_STR__
+
+    protected:
+        void reset_datestr()
+        {
+        static const char *const monthnames[] = {
+                "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+            };
+
+        // for some systems sprintf, time_t etc. is in namespace std
+            using namespace std;
+
+        time_t tt = time(0);
+        struct tm *tb = 0;
+
+            if (tt != (time_t)-1) {
+            char buffer[sizeof("\"Oct 11 1347\"")+1];
+
+                tb = localtime (&tt);
+                sprintf (buffer, "\"%s %2d %4d\"",
+                    monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900);
+                datestr_ = buffer;
+            }
+            else {
+                datestr_ = "\"??? ?? ????\"";
+            }
+        }
+
+        void reset_timestr()
+        {
+        // for some systems sprintf, time_t etc. is in namespace std
+            using namespace std;
+
+        time_t tt = time(0);
+        struct tm *tb = 0;
+
+            if (tt != (time_t)-1) {
+            char buffer[sizeof("\"12:34:56\"")+1];
+
+                tb = localtime (&tt);
+                sprintf (buffer, "\"%02d:%02d:%02d\"", tb->tm_hour, 
+                    tb->tm_min, tb->tm_sec);
+                timestr_ = buffer;
+            }
+            else {
+                timestr_ = "\"??:??:??\"";
+            }
+        }
+
+        void reset_version()
+        {
+        char buffer[sizeof("0x00000000")+1];
+
+        // for some systems sprintf, time_t etc. is in namespace std
+            using namespace std;
+
+        // calculate the number of days since Dec 13 2001 
+        // (the day the Wave project was started)
+        tm first_day;
+
+            using namespace std;    // for some systems memset is in namespace std
+            memset (&first_day, 0, sizeof(tm));
+            first_day.tm_mon = 11;           // Dec
+            first_day.tm_mday = 13;          // 13
+            first_day.tm_year = 101;         // 2001
+
+        long seconds = long(difftime(compilation_time_.get_time(), mktime(&first_day)));
+
+            sprintf(buffer, "0x%02d%1d%1d%04ld", BOOST_WAVE_VERSION_MAJOR,
+                 BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR, 
+                 seconds/(3600*24));
+            version_ = buffer;
+        }
+
+        void reset_versionstr()
+        {
+        char buffer[sizeof("\"00.00.00.0000 \"")+sizeof(BOOST_PLATFORM)+sizeof(BOOST_COMPILER)+4];
+
+        // for some systems sprintf, time_t etc. is in namespace std
+            using namespace std;
+
+        // calculate the number of days since Dec 13 2001 
+        // (the day the Wave project was started)
+        tm first_day;
+
+            memset (&first_day, 0, sizeof(tm));
+            first_day.tm_mon = 11;           // Dec
+            first_day.tm_mday = 13;          // 13
+            first_day.tm_year = 101;         // 2001
+
+        long seconds = long(difftime(compilation_time_.get_time(), mktime(&first_day)));
+
+            sprintf(buffer, "\"%d.%d.%d.%ld [%s/%s]\"", BOOST_WAVE_VERSION_MAJOR,
+                 BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR, 
+                 seconds/(3600*24), BOOST_PLATFORM, BOOST_COMPILER);
+            versionstr_ = buffer;
+        }
+
+    // dynamic predefined macros
+        string_type get_date() const { return datestr_; }     // __DATE__ 
+        string_type get_time() const { return timestr_; }     // __TIME__
+
+    // __SPIRIT_PP__/__WAVE__
+        string_type get_version() const
+        {
+            char buffer[sizeof("0x0000")+1];
+
+            using namespace std;    // for some systems sprintf is in namespace std
+            sprintf(buffer, "0x%02d%1d%1d", BOOST_WAVE_VERSION_MAJOR, 
+                BOOST_WAVE_VERSION_MINOR, BOOST_WAVE_VERSION_SUBMINOR);
+            return buffer;
+        }
+
+    // __WAVE_CONFIG__
+        string_type get_config() const
+        {
+            char buffer[sizeof("0x00000000")+1];
+
+            using namespace std;     // for some systems sprintf is in namespace std
+            sprintf(buffer, "0x%08x", BOOST_WAVE_CONFIG);
+            return buffer;
+        }
+
+    public:
+        predefined_macros() 
+          : compilation_time_(__DATE__ " " __TIME__)
+        { 
+            reset(); 
+            reset_version();
+            reset_versionstr();
+        }
+
+        void reset()
+        {
+            reset_datestr();
+            reset_timestr();
+        }
+
+    // __SPIRIT_PP_VERSION__/__WAVE_VERSION__
+        string_type get_fullversion() const { return version_; }
+
+    // __SPIRIT_PP_VERSION_STR__/__WAVE_VERSION_STR__
+        string_type get_versionstr() const { return versionstr_; }
+
+    // C++ mode 
+        static_macros const& static_data_cpp(std::size_t i) const
+        {
+        static static_macros data[] = {
+                { "__STDC__", T_INTLIT, "1" },
+                { "__cplusplus", T_INTLIT, "199711L" },
+                { 0, T_EOF, 0 }
+            }; 
+            BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+            return data[i];
+        }
+
+#if BOOST_WAVE_SUPPORT_CPP0X != 0
+    // C++11 mode 
+        static_macros const& static_data_cpp0x(std::size_t i) const
+        {
+        static static_macros data[] = {
+                { "__STDC__", T_INTLIT, "1" },
+                { "__cplusplus", T_INTLIT, "201103L" },
+                { "__STDC_VERSION__", T_INTLIT, "199901L" },
+                { "__STDC_HOSTED__", T_INTLIT, "0" },
+                { "__WAVE_HAS_VARIADICS__", T_INTLIT, "1" },
+                { 0, T_EOF, 0 }
+            }; 
+            BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+            return data[i];
+        }
+#endif
+
+#if BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS != 0
+    // C99 mode
+        static_macros const& static_data_c99(std::size_t i) const
+        {
+        static static_macros data[] = {
+                { "__STDC__", T_INTLIT, "1" },
+                { "__STDC_VERSION__", T_INTLIT, "199901L" },
+                { "__STDC_HOSTED__", T_INTLIT, "0" },
+                { "__WAVE_HAS_VARIADICS__", T_INTLIT, "1" },
+                { 0, T_EOF, 0 }
+            }; 
+            BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+            return data[i];
+        }
+#endif 
+
+        dynamic_macros const& dynamic_data(std::size_t i) const
+        {
+        static dynamic_macros data[] = {
+                { "__DATE__", T_STRINGLIT, &predefined_macros::get_date },
+                { "__TIME__", T_STRINGLIT, &predefined_macros::get_time },
+                { "__SPIRIT_PP__", T_INTLIT, &predefined_macros::get_version },
+                { "__SPIRIT_PP_VERSION__", T_INTLIT, &predefined_macros::get_fullversion },
+                { "__SPIRIT_PP_VERSION_STR__", T_STRINGLIT, &predefined_macros::get_versionstr },
+                { "__WAVE__", T_INTLIT, &predefined_macros::get_version },
+                { "__WAVE_VERSION__", T_INTLIT, &predefined_macros::get_fullversion },
+                { "__WAVE_VERSION_STR__", T_STRINGLIT, &predefined_macros::get_versionstr },
+                { "__WAVE_CONFIG__", T_INTLIT, &predefined_macros::get_config },
+                { 0, T_EOF, 0 }
+            };
+            BOOST_ASSERT(i < sizeof(data)/sizeof(data[0]));
+            return data[i];
+        }
+    };   // predefined_macros
+
+///////////////////////////////////////////////////////////////////////////////
+}   // namespace util
+}   // namespace wave
+}   // namespace boost
+
+// the suffix header occurs after all of the code
+#ifdef BOOST_HAS_ABI_HEADERS
+#include BOOST_ABI_SUFFIX
+#endif
+
+#endif // !defined(CPP_MACROMAP_PREDEF_HPP_HK041119)