diff options
Diffstat (limited to 'mz/mz_header.cpp')
| -rw-r--r-- | mz/mz_header.cpp | 38 |
1 files changed, 8 insertions, 30 deletions
diff --git a/mz/mz_header.cpp b/mz/mz_header.cpp index 02241cf..c33270f 100644 --- a/mz/mz_header.cpp +++ b/mz/mz_header.cpp @@ -1,18 +1,16 @@ #include "mz_header.hpp" -#include "index_list.hpp" - -#include "binparse.hpp" +#include "parse.hpp" +#include "output.hpp" #include <boost/fusion/adapted/struct.hpp> -#include <boost/fusion/adapted/struct/detail/extension.hpp> #include <vector> #include <iomanip> BOOST_FUSION_ADAPT_STRUCT( - mz::MZHeader, + mz::Header, (binparse::Magic16, magic) (binparse::Value16, bytes_in_last_block) (binparse::Value16, blocks_in_file) @@ -35,35 +33,15 @@ NotAMZFileException::NotAMZFileException() : std::runtime_error("This stream does not contain a valid MZ executable") {} -template <int... Indices> -MZHeader parse_header_impl(std::istream& is, indices<Indices...>) { - - return {parse<typename std::decay<typename boost::fusion::result_of::at_c<MZHeader, Indices>::type>::type>(is, boost::fusion::extension::struct_member_name<MZHeader, Indices>::call())...}; - -} - -MZHeader parse_header(std::istream& is) { - - typedef build_indices<boost::fusion::result_of::size<MZHeader>::value>::type indices; +Header parse_header(std::istream& is) { + using binparse::parse; - return parse_header_impl(is, indices{}); + return parse<Header>(is); } -std::ostream& output_impl(std::ostream& os, MZHeader const&, indices<>) { - return os; -} - -template <int I, int... Indices> -std::ostream& output_impl(std::ostream& os, const MZHeader& header, indices<I, Indices...>) { - os << boost::fusion::extension::struct_member_name<MZHeader, I>::call() << ": " << boost::fusion::at_c<I>(header) << std::endl; - return output_impl(os, header, indices<Indices...>{}); -} - -std::ostream& operator<<(std::ostream& os, MZHeader const& header) +std::ostream& operator<<(std::ostream& os, Header const& header) { - typedef build_indices<boost::fusion::result_of::size<MZHeader>::value>::type indices; - - return output_impl(os, header, indices{}); + return binparse::operator<<(os, header); } } |
