diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-06-22 00:15:08 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-06-22 00:16:28 +0200 |
| commit | 22231518b9c2c0b7f73c72a6ca834df659c63c7f (patch) | |
| tree | 12b1d20efd3303583649966ddfe135a81ae8109b /le/le_header.cpp | |
| parent | 46145fe7d5b1d9f0921121a088a3d61f968cc473 (diff) | |
| download | openwar-22231518b9c2c0b7f73c72a6ca834df659c63c7f.tar.gz openwar-22231518b9c2c0b7f73c72a6ca834df659c63c7f.tar.bz2 openwar-22231518b9c2c0b7f73c72a6ca834df659c63c7f.zip | |
Reduces the amount of boilerplate neccesary to parse the binary format.
Diffstat (limited to 'le/le_header.cpp')
| -rw-r--r-- | le/le_header.cpp | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/le/le_header.cpp b/le/le_header.cpp index f28cc4d..b2bd7bd 100644 --- a/le/le_header.cpp +++ b/le/le_header.cpp @@ -1,13 +1,13 @@ #include "le_header.hpp" -#include "index_list.hpp" -#include "binparse.hpp" +#include "parse.hpp" +#include "output.hpp" #include <boost/fusion/adapted/struct.hpp> BOOST_FUSION_ADAPT_STRUCT( - le::LEHeader, + le::Header, (binparse::Magic16, magic) (binparse::Value8, B_ord) (binparse::Value8, W_ord) @@ -58,35 +58,16 @@ BOOST_FUSION_ADAPT_STRUCT( namespace le { -template <int... Indices> -LEHeader parse_header_impl(std::istream& is, indices<Indices...>) { - - return {parse<typename std::decay<typename boost::fusion::result_of::at_c<LEHeader, Indices>::type>::type>(is, boost::fusion::extension::struct_member_name<LEHeader, Indices>::call())...}; +Header parse_header(std::istream& is) { + using binparse::parse; + return parse<Header>(is); } -LEHeader parse_header(std::istream& is) { - - typedef build_indices<boost::fusion::result_of::size<LEHeader>::value>::type indices; - - return parse_header_impl(is, indices{}); -} -std::ostream& output_impl(std::ostream& os, LEHeader const&, indices<>) { - return os; -} - -template <int I, int... Indices> -std::ostream& output_impl(std::ostream& os, const LEHeader& header, indices<I, Indices...>) { - os << boost::fusion::extension::struct_member_name<LEHeader, I>::call() << ": " << boost::fusion::at_c<I>(header) << std::endl; - return output_impl(os, header, indices<Indices...>{}); -} - -std::ostream& operator<<(std::ostream& os, LEHeader const& header) +std::ostream& operator<<(std::ostream& os, Header const& header) { - typedef build_indices<boost::fusion::result_of::size<LEHeader>::value>::type indices; - - return output_impl(os, header, indices{}); + return binparse::operator<<(os, header); } }
\ No newline at end of file |
