summaryrefslogtreecommitdiff
path: root/boost/spirit/home/x3/numeric/int.hpp
diff options
context:
space:
mode:
authorChanho Park <chanho61.park@samsung.com>2014-12-11 18:55:56 +0900
committerChanho Park <chanho61.park@samsung.com>2014-12-11 18:55:56 +0900
commit08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch)
tree7a7053ceb8874b28ec4b868d4c49b500008a102e /boost/spirit/home/x3/numeric/int.hpp
parentbb4dd8289b351fae6b55e303f189127a394a1edd (diff)
downloadboost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz
boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2
boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'boost/spirit/home/x3/numeric/int.hpp')
-rw-r--r--boost/spirit/home/x3/numeric/int.hpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/boost/spirit/home/x3/numeric/int.hpp b/boost/spirit/home/x3/numeric/int.hpp
new file mode 100644
index 0000000000..ba9ceb8243
--- /dev/null
+++ b/boost/spirit/home/x3/numeric/int.hpp
@@ -0,0 +1,66 @@
+/*=============================================================================
+ Copyright (c) 2001-2014 Joel de Guzman
+
+ 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_X3_INT_APR_17_2006_0830AM)
+#define BOOST_SPIRIT_X3_INT_APR_17_2006_0830AM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/spirit/home/x3/core/parser.hpp>
+#include <boost/spirit/home/x3/core/skip_over.hpp>
+#include <boost/spirit/home/x3/support/numeric_utils/extract_int.hpp>
+#include <cstdint>
+
+namespace boost { namespace spirit { namespace x3
+{
+ ///////////////////////////////////////////////////////////////////////////
+ template <
+ typename T
+ , unsigned Radix = 10
+ , unsigned MinDigits = 1
+ , int MaxDigits = -1>
+ struct int_parser : parser<int_parser<T, Radix, MinDigits, MaxDigits>>
+ {
+ // check template parameter 'Radix' for validity
+ static_assert(
+ (Radix == 2 || Radix == 8 || Radix == 10 || Radix == 16),
+ "Error Unsupported Radix");
+
+ typedef T attribute_type;
+ static bool const has_attribute = true;
+
+ template <typename Iterator, typename Context, typename Attribute>
+ bool parse(Iterator& first, Iterator const& last
+ , Context const& context, unused_type, Attribute& attr) const
+ {
+ typedef extract_int<T, Radix, MinDigits, MaxDigits> extract;
+ x3::skip_over(first, last, context);
+ return extract::call(first, last, attr);
+ }
+ };
+
+#define BOOST_SPIRIT_X3_INT_PARSER(int_type, name) \
+ typedef int_parser<int_type> name##type; \
+ name##type const name = {}; \
+ /***/
+
+ BOOST_SPIRIT_X3_INT_PARSER(long, long_)
+ BOOST_SPIRIT_X3_INT_PARSER(short, short_)
+ BOOST_SPIRIT_X3_INT_PARSER(int, int_)
+ BOOST_SPIRIT_X3_INT_PARSER(long long, long_long)
+
+ BOOST_SPIRIT_X3_INT_PARSER(int8_t, int8)
+ BOOST_SPIRIT_X3_INT_PARSER(int16_t, int16)
+ BOOST_SPIRIT_X3_INT_PARSER(int32_t, int32)
+ BOOST_SPIRIT_X3_INT_PARSER(int64_t, int64)
+
+#undef BOOST_SPIRIT_X3_INT_PARSER
+
+}}}
+
+#endif