[/============================================================================== Copyright (C) 2001-2011 Joel de Guzman 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) ===============================================================================/] [section:binary Binary Parsers] This module includes different parsers for parsing binary data in various __endianness__. It includes parsers for default (native), little, and big endian binary input. [heading Module Header] // forwards to #include Also, see __include_structure__. [/////////////////////////////////////////////////////////////////////////////] [section:binary_native Binary Native Endianness Parsers] [heading Description] Binary native endian parsers are designed to parse binary byte streams that are laid out in the native __endianness__ of the target architecture. [heading Header] // forwards to #include Also, see __include_structure__. [heading Namespace] [table [[Name]] [[`boost::spirit::byte_ // alias: boost::spirit::qi::byte_`]] [[`boost::spirit::word // alias: boost::spirit::qi::word`]] [[`boost::spirit::dword // alias: boost::spirit::qi::dword`]] [[`boost::spirit::qword // alias: boost::spirit::qi::qword`]] [[`boost::spirit::bin_float // alias: boost::spirit::qi::bin_float`]] [[`boost::spirit::bin_double // alias: boost::spirit::qi::bin_double`]] ] [note `qword` is only available on platforms where the preprocessor constant `BOOST_HAS_LONG_LONG` is defined (i.e. on platforms having native support for `unsigned long long` (64 bit) integer types).] [heading Model of] [:__primitive_parser_concept__] [variablelist Notation [[`b`] [A single byte (8 bit binary value) or a __qi_lazy_argument__ that evaluates to a single byte. This value is always in native endian.]] [[`w`] [A 16 bit binary value or a __qi_lazy_argument__ that evaluates to a 16 bit binary value. This value is always in native endian.]] [[`dw`] [A 32 bit binary value or a __qi_lazy_argument__ that evaluates to a 32 bit binary value. This value is always in native endian.]] [[`qw`] [A 64 bit binary value or a __qi_lazy_argument__ that evaluates to a 64 bit binary value. This value is always in native endian.]] [[`f`] [A float binary value or a __qi_lazy_argument__ that evaluates to a float binary value. This value is always in native endian.]] [[`d`] [A double binary value or a __qi_lazy_argument__ that evaluates to a double binary value. This value is always in native endian.]] ] [heading Expression Semantics] Semantics of an expression is defined only where it differs from, or is not defined in __primitive_parser_concept__. [table [[Expression] [Description]] [[`byte_`] [Matches any 8 bit native endian binary.]] [[`word`] [Matches any 16 bit native endian binary.]] [[`dword`] [Matches any 32 bit native endian binary.]] [[`qword`] [Matches any 64 bit native endian binary.]] [[`bin_float`] [Matches any float native endian binary.]] [[`bin_double`] [Matches any double native endian binary.]] [[`byte_(b)`] [Matches an exact 8 bit native endian binary.]] [[`word(w)`] [Matches an exact 16 bit native endian binary.]] [[`dword(dw)`] [Matches an exact 32 bit native endian binary.]] [[`qword(qw)`] [Matches an exact 64 bit native endian binary.]] [[`bin_float(f)`] [Matches an exact float native endian binary.]] [[`bin_double(d)`] [Matches an exact double native endian binary.]] ] [heading Attributes] [table [[Expression] [Attribute]] [[`byte_`] [`boost::uint_least8_t`]] [[`word`] [`boost::uint_least16_t`]] [[`dword`] [`boost::uint_least32_t`]] [[`qword`] [`boost::uint_least64_t`]] [[`bin_float`] [`float`]] [[`bin_double`] [`double`]] [[`byte_(b)`] [__unused__]] [[`word(w)`] [__unused__]] [[`dword(dw)`] [__unused__]] [[`qword(qw)`] [__unused__]] [[`bin_float(f)`] [__unused__]] [[`bin_double(d)`] [__unused__]] ] [heading Complexity] [:O(N), where N is the number of bytes parsed] [heading Example] [note The test harness for the example(s) below is presented in the __qi_basics_examples__ section.] [reference_qi_native_binary] [endsect] [/////////////////////////////////////////////////////////////////////////////] [section:binary_little Binary Little Endianness Parser] [heading Description] Binary little endian parsers are designed to parse binary byte streams that are laid out in little endian. [heading Header] // forwards to #include Also, see __include_structure__. [heading Namespace] [table [[Name]] [[`boost::spirit::little_word // alias: boost::spirit::qi::little_word` ]] [[`boost::spirit::little_dword // alias: boost::spirit::qi::little_dword` ]] [[`boost::spirit::little_qword // alias: boost::spirit::qi::little_qword` ]] [[`boost::spirit::little_bin_float // alias: boost::spirit::qi::little_bin_float` ]] [[`boost::spirit::little_bin_double // alias: boost::spirit::qi::little_bin_double` ]] ] [note `little_qword` is only available on platforms where the preprocessor constant `BOOST_HAS_LONG_LONG` is defined (i.e. on platforms having native support for `unsigned long long` (64 bit) integer types).] [heading Model of] [:__primitive_parser_concept__] [variablelist Notation [[`w`] [A 16 bit binary value or a __qi_lazy_argument__ that evaluates to a 16 bit binary value. This value is always in native endian.]] [[`dw`] [A 32 bit binary value or a __qi_lazy_argument__ that evaluates to a 32 bit binary value. This value is always in native endian.]] [[`qw`] [A 64 bit binary value or a __qi_lazy_argument__ that evaluates to a 64 bit binary value. This value is always in native endian.]] [[`f`] [A float binary value or a __qi_lazy_argument__ that evaluates to a float binary value. This value is always in native endian.]] [[`d`] [A double binary value or a __qi_lazy_argument__ that evaluates to a double binary value. This value is always in native endian.]] ] [heading Expression Semantics] Semantics of an expression is defined only where it differs from, or is not defined in __primitive_parser_concept__. [table [[Expression] [Description]] [[`little_word`] [Matches any 16 bit little endian binary.]] [[`little_dword`] [Matches any 32 bit little endian binary.]] [[`little_qword`] [Matches any 64 bit little endian binary.]] [[`little_bin_float`] [Matches any float little endian binary.]] [[`little_bin_double`] [Matches any double little endian binary.]] [[`little_word(w)`] [Matches an exact 16 bit little endian binary.]] [[`little_dword(dw)`] [Matches an exact 32 bit little endian binary.]] [[`little_qword(qw)`] [Matches an exact 32 bit little endian binary.]] [[`little_bin_float(f)`] [Matches an exact float little endian binary.]] [[`little_bin_double(d)`] [Matches an exact double little endian binary.]] ] [heading Attributes] [table [[Expression] [Attribute]] [[`little_word`] [`boost::uint_least16_t`]] [[`little_dword`] [`boost::uint_least32_t`]] [[`little_qword`] [`boost::uint_least64_t`]] [[`little_bin_float`] [`float`]] [[`little_bin_double`] [`double`]] [[`little_word(w)`] [__unused__]] [[`little_dword(dw)`] [__unused__]] [[`little_qword(qw)`] [__unused__]] [[`little_bin_float(f)`] [__unused__]] [[`little_bin_double(d)`] [__unused__]] ] [heading Complexity] [:O(N), where N is the number of bytes parsed] [heading Example] [note The test harness for the example(s) below is presented in the __qi_basics_examples__ section.] [reference_qi_little_binary] [endsect] [/////////////////////////////////////////////////////////////////////////////] [section:binary_big Binary Big Endianness Parsers] [heading Description] Binary big endian parsers are designed to parse binary byte streams that are laid out in big endian. [heading Header] // forwards to #include Also, see __include_structure__. [heading Namespace] [table [[Name]] [[`boost::spirit::big_word // alias: boost::spirit::qi::big_word` ]] [[`boost::spirit::big_dword // alias: boost::spirit::qi::big_dword` ]] [[`boost::spirit::big_qword // alias: boost::spirit::qi::big_qword` ]] [[`boost::spirit::big_bin_float // alias: boost::spirit::qi::big_bin_float` ]] [[`boost::spirit::big_bin_double // alias: boost::spirit::qi::big_bin_double` ]] ] [note `big_qword` is only available on platforms where the preprocessor constant `BOOST_HAS_LONG_LONG` is defined (i.e. on platforms having native support for `unsigned long long` (64 bit) integer types).] [heading Model of] [:__primitive_parser_concept__] [variablelist Notation [[`w`] [A 16 bit binary value or a __qi_lazy_argument__ that evaluates to a 16 bit binary value. This value is always in native endian.]] [[`dw`] [A 32 bit binary value or a __qi_lazy_argument__ that evaluates to a 32 bit binary value. This value is always in native endian.]] [[`qw`] [A 64 bit binary value or a __qi_lazy_argument__ that evaluates to a 64 bit binary value. This value is always in native endian.]] [[`f`] [A float binary value or a __qi_lazy_argument__ that evaluates to a float binary value. This value is always in native endian.]] [[`d`] [A double binary value or a __qi_lazy_argument__ that evaluates to a double binary value. This value is always in native endian.]] ] [heading Expression Semantics] Semantics of an expression is defined only where it differs from, or is not defined in __primitive_parser_concept__. [table [[Expression] [Description]] [[`big_word`] [Matches any 16 bit big endian binary.]] [[`big_dword`] [Matches any 32 bit big endian binary.]] [[`big_qword`] [Matches any 64 bit big endian binary.]] [[`big_bin_float`] [Matches any float big endian binary.]] [[`big_bin_double`] [Matches any double big endian binary.]] [[`big_word(w)`] [Matches an exact 16 bit big endian binary.]] [[`big_dword(dw)`] [Matches an exact 32 bit big endian binary.]] [[`big_qword(qw)`] [Matches an exact 32 bit big endian binary.]] [[`big_bin_float(f)`] [Matches an exact float big endian binary.]] [[`big_bin_double(d)`] [Matches an exact double big endian binary.]] ] [heading Attributes] [table [[Expression] [Attribute]] [[`big_word`] [`boost::uint_least16_t`]] [[`big_dword`] [`boost::uint_least32_t`]] [[`big_qword`] [`boost::uint_least64_t`]] [[`big_bin_float`] [`float`]] [[`big_bin_double`] [`double`]] [[`big_word(w)`] [__unused__]] [[`big_dword(dw)`] [__unused__]] [[`big_qword(qw)`] [__unused__]] [[`big_bin_float(f)`] [__unused__]] [[`big_bin_double(d)`] [__unused__]] ] [heading Complexity] [:O(N), where N is the number of bytes parsed] [heading Example] [note The test harness for the example(s) below is presented in the __qi_basics_examples__ section.] [reference_qi_big_binary] [endsect] [endsect]