| [/============================================================================== |
| Copyright (C) 2001-2010 Hartmut Kaiser |
| Copyright (C) 2001-2010 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) |
| ===============================================================================/] |
| |
| [section:binary Binary] |
| |
| This module includes different generators allowing to output binary data. |
| It includes generators for default, little, and big endian binary output and |
| a `pad` generator allowing to control padding of the generated output |
| stream. |
| |
| [heading Module Header] |
| |
| // forwards to <boost/spirit/home/karma/binary.hpp> |
| #include <boost/spirit/include/karma_binary.hpp> |
| |
| Also, see __include_structure__. |
| |
| [/////////////////////////////////////////////////////////////////////////////] |
| [section:binary_native Binary Native Endianness Generators] |
| |
| [heading Description] |
| |
| The binary native endianness generators described in this section are used to |
| emit binary byte streams laid out conforming to the native endianness (byte |
| order) of the target architecture. |
| |
| [heading Header] |
| |
| // forwards to <boost/spirit/home/karma/binary.hpp> |
| #include <boost/spirit/include/karma_binary.hpp> |
| |
| Also, see __include_structure__. |
| |
| [heading Namespace] |
| |
| [table |
| [[Name]] |
| [[`boost::spirit::byte_ // alias: boost::spirit::karma::byte_` ]] |
| [[`boost::spirit::word // alias: boost::spirit::karma::word` ]] |
| [[`boost::spirit::dword // alias: boost::spirit::karma::dword` ]] |
| [[`boost::spirit::qword // alias: boost::spirit::karma::qword` ]] |
| ] |
| |
| [note The generators `qword` and `qword(qw)` are 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_generator_concept__] |
| |
| [variablelist Notation |
| [[`b`] [A single byte (8 bit binary value) or a __karma_lazy_argument__ |
| that evaluates to a single byte]] |
| [[`w`] [A 16 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 16 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`dw`] [A 32 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 32 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`qw`] [A 64 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 64 bit binary value. This value is always |
| interpreted using native endianness.]] |
| ] |
| |
| [heading Expression Semantics] |
| |
| Semantics of an expression is defined only where it differs from, or is |
| not defined in __primitive_generator_concept__. |
| |
| [table |
| [[Expression] [Description]] |
| [[`byte_`] [Output the binary representation of the least |
| significant byte of the mandatory attribute. This |
| generator never fails (unless the underlying |
| output stream reports an error).]] |
| [[`word`] [Output the binary representation of the least |
| significant 16 bits of the mandatory attribute |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`dword`] [Output the binary representation of the least |
| significant 32 bits of the mandatory attribute |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`qword`] [Output the binary representation of the least |
| significant 64 bits of the mandatory attribute |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`byte_(b)`] [Output the binary representation of the least |
| significant byte of the immediate parameter. This |
| generator never fails (unless the underlying |
| output stream reports an error).]] |
| [[`word(w)`] [Output the binary representation of the least |
| significant 16 bits of the immediate parameter |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`dword(dw)`] [Output the binary representation of the least |
| significant 32 bits of the immediate parameter |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`qword(qw)`] [Output the binary representation of the least |
| significant 64 bits of the immediate parameter |
| in native endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| ] |
| |
| [heading Attributes] |
| |
| [table |
| [[Expression] [Attribute]] |
| [[`byte_`] [`boost::uint_least8_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`word`] [`boost::uint_least16_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`dword`] [`boost::uint_least32_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`qword`] [`boost::uint_least64_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`byte_(b)`] [__unused__]] |
| [[`word(w)`] [__unused__]] |
| [[`dword(dw)`] [__unused__]] |
| [[`qword(qw)`] [__unused__]] |
| ] |
| |
| [note In addition to their usual attribute of type `Attrib` all listed generators |
| accept an instance of a `boost::optional<Attrib>` as well. If the |
| `boost::optional<>` is initialized (holds a value) the generators behave |
| as if their attribute was an instance of `Attrib` and emit the value stored |
| in the `boost::optional<>`. Otherwise the generators will fail.] |
| |
| [heading Complexity] |
| |
| [:O(N), where N is the number of bytes emitted by the binary generator] |
| |
| [heading Example] |
| |
| [note The test harness for the example(s) below is presented in the |
| __karma_basics_examples__ section.] |
| |
| Some includes: |
| |
| [reference_karma_includes] |
| |
| Some using declarations: |
| |
| [reference_karma_using_declarations_native_binary] |
| |
| Basic usage of the native binary generators with some results for little endian |
| platforms: |
| |
| [reference_karma_native_binary_little] |
| |
| Basic usage of the native binary generators with some results for big endian |
| platforms: |
| |
| [reference_karma_native_binary_big] |
| |
| [endsect] |
| |
| [/////////////////////////////////////////////////////////////////////////////] |
| [section:binary_little Binary Little Endianness Generators] |
| |
| [heading Description] |
| |
| The little native endianness generators described in this section are used to |
| emit binary byte streams laid out conforming to the little endianness byte |
| order. |
| |
| [heading Header] |
| |
| // forwards to <boost/spirit/home/karma/binary.hpp> |
| #include <boost/spirit/include/karma_binary.hpp> |
| |
| Also, see __include_structure__. |
| |
| [heading Namespace] |
| |
| [table |
| [[Name]] |
| [[`boost::spirit::little_word // alias: boost::spirit::karma::little_word` ]] |
| [[`boost::spirit::little_dword // alias: boost::spirit::karma::little_dword` ]] |
| [[`boost::spirit::little_qword // alias: boost::spirit::karma::little_qword` ]] |
| ] |
| |
| [note The generators `little_qword` and `little_qword(qw)` are 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_generator_concept__] |
| |
| [variablelist Notation |
| [[`w`] [A 16 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 16 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`dw`] [A 32 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 32 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`qw`] [A 64 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 64 bit binary value. This value is always |
| interpreted using native endianness.]] |
| ] |
| |
| [heading Expression Semantics] |
| |
| Semantics of an expression is defined only where it differs from, or is |
| not defined in __primitive_generator_concept__. |
| |
| [table |
| [[Expression] [Description]] |
| [[`little_word`] [Output the binary representation of the least |
| significant 16 bits of the mandatory attribute |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`little_dword`] [Output the binary representation of the least |
| significant 32 bits of the mandatory attribute |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`little_qword`] [Output the binary representation of the least |
| significant 64 bits of the mandatory attribute |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`little_word(w)`] [Output the binary representation of the least |
| significant 16 bits of the immediate parameter |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`little_dword(dw)`] [Output the binary representation of the least |
| significant 32 bits of the immediate parameter |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`little_qword(qw)`] [Output the binary representation of the least |
| significant 64 bits of the immediate parameter |
| in little endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| ] |
| |
| [heading Attributes] |
| |
| [table |
| [[Expression] [Attribute]] |
| [[`little_word`] [`boost::uint_least16_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`little_dword`] [`boost::uint_least32_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`little_qword`] [`boost::uint_least64_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`little_word(w)`] [__unused__]] |
| [[`little_dword(dw)`] [__unused__]] |
| [[`little_qword(qw)`] [__unused__]] |
| ] |
| |
| [heading Complexity] |
| |
| [:O(N), where N is the number of bytes emitted by the binary generator] |
| |
| [heading Example] |
| |
| [note The test harness for the example(s) below is presented in the |
| __karma_basics_examples__ section.] |
| |
| Some includes: |
| |
| [reference_karma_includes] |
| |
| Some using declarations: |
| |
| [reference_karma_using_declarations_little_binary] |
| |
| Basic usage of the little binary generators: |
| |
| [reference_karma_little_binary] |
| |
| [endsect] |
| |
| [/////////////////////////////////////////////////////////////////////////////] |
| [section:binary_big Binary Big Endianness Generators] |
| |
| [heading Description] |
| |
| The big native endianness generators described in this section are used to |
| emit binary byte streams laid out conforming to the big endianness byte |
| order. |
| |
| [heading Header] |
| |
| // forwards to <boost/spirit/home/karma/binary.hpp> |
| #include <boost/spirit/include/karma_binary.hpp> |
| |
| Also, see __include_structure__. |
| |
| [heading Namespace] |
| |
| [table |
| [[Name]] |
| [[`boost::spirit::big_word // alias: boost::spirit::karma::big_word` ]] |
| [[`boost::spirit::big_dword // alias: boost::spirit::karma::big_dword` ]] |
| [[`boost::spirit::big_qword // alias: boost::spirit::karma::big_qword` ]] |
| ] |
| |
| [note The generators `big_qword` and `big_qword(qw)` are 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_generator_concept__] |
| |
| [variablelist Notation |
| [[`w`] [A 16 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 16 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`dw`] [A 32 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 32 bit binary value. This value is always |
| interpreted using native endianness.]] |
| [[`qw`] [A 64 bit binary value or a __karma_lazy_argument__ that |
| evaluates to a 64 bit binary value. This value is always |
| interpreted using native endianness.]] |
| ] |
| |
| [heading Expression Semantics] |
| |
| Semantics of an expression is defined only where it differs from, or is |
| not defined in __primitive_generator_concept__. |
| |
| [table |
| [[Expression] [Description]] |
| [[`big_word`] [Output the binary representation of the least |
| significant 16 bits of the mandatory attribute |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`big_dword`] [Output the binary representation of the least |
| significant 32 bits of the mandatory attribute |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`big_qword`] [Output the binary representation of the least |
| significant 64 bits of the mandatory attribute |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`big_word(w)`] [Output the binary representation of the least |
| significant 16 bits of the immediate parameter |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`big_dword(dw)`] [Output the binary representation of the least |
| significant 32 bits of the immediate parameter |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| [[`big_qword(qw)`] [Output the binary representation of the least |
| significant 64 bits of the immediate parameter |
| in big endian representation. This generator |
| never fails (unless the underlying output stream |
| reports an error).]] |
| ] |
| |
| [heading Attributes] |
| |
| [table |
| [[Expression] [Attribute]] |
| [[`big_word`] [`boost::uint_least16_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`big_dword`] [`boost::uint_least32_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`big_qword`] [`boost::uint_least64_t`, attribute is mandatory |
| (otherwise compilation will fail)]] |
| [[`big_word(w)`] [__unused__]] |
| [[`big_dword(dw)`] [__unused__]] |
| [[`big_qword(qw)`] [__unused__]] |
| ] |
| |
| [heading Complexity] |
| |
| [:O(N), where N is the number of bytes emitted by the binary generator] |
| |
| [heading Example] |
| |
| [note The test harness for the example(s) below is presented in the |
| __karma_basics_examples__ section.] |
| |
| Some includes: |
| |
| [reference_karma_includes] |
| |
| Some using declarations: |
| |
| [reference_karma_using_declarations_big_binary] |
| |
| Basic usage of the big binary generators: |
| |
| [reference_karma_big_binary] |
| |
| [endsect] |
| |
| [endsect] |