diff DEPENDENCIES/generic/include/boost/spirit/home/karma/detail/as.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/spirit/home/karma/detail/as.hpp	Tue Aug 05 11:11:38 2014 +0100
@@ -0,0 +1,74 @@
+//  Copyright (c) 2001-2011 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(BOOST_SPIRIT_KARMA_AS_STRING_DEC_18_0644PM)
+#define BOOST_SPIRIT_KARMA_AS_STRING_DEC_18_0644PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/attributes_fwd.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace traits
+{
+    ///////////////////////////////////////////////////////////////////////////
+    //  This file contains the attribute to string conversion utility. The 
+    //  utility provided also accept spirit's unused_type; all no-ops. Compiler 
+    //  optimization will easily strip these away.
+    ///////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    inline typename spirit::result_of::attribute_as<T, Attribute>::type
+    as(Attribute const& attr)
+    {
+        return attribute_as<T, Attribute>::call(attr);
+    }
+
+    template <typename T>
+    inline unused_type as(unused_type)
+    {
+        return unused;
+    }
+    
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Attribute>
+    inline bool valid_as(Attribute const& attr)
+    {
+        return attribute_as<T, Attribute>::is_valid(attr);
+    }
+
+    template <typename T>
+    inline bool valid_as(unused_type)
+    {
+        return true;
+    }
+}}}
+
+///////////////////////////////////////////////////////////////////////////////
+namespace boost { namespace spirit { namespace result_of
+{
+    template <typename T, typename Attribute>
+    struct attribute_as
+      : traits::attribute_as<T, Attribute>
+    {};
+
+    template <typename T>
+    struct attribute_as<T, unused_type>
+    {
+        typedef unused_type type;
+    };
+
+    template <typename T>
+    struct attribute_as<T, unused_type const>
+    {
+        typedef unused_type type;
+    };
+}}}
+
+#endif