diff options
Diffstat (limited to 'le/le_file.cpp')
| -rw-r--r-- | le/le_file.cpp | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/le/le_file.cpp b/le/le_file.cpp index 3cec50c..b01f13e 100644 --- a/le/le_file.cpp +++ b/le/le_file.cpp @@ -1,6 +1,7 @@ #include "le_file.hpp" -#include "index_list.hpp" +#include "parse.hpp" +#include "output.hpp" #include <boost/fusion/adapted/struct.hpp> @@ -8,20 +9,22 @@ typedef std::array<uint8_t, 8> A1; typedef std::array<uint8_t, 22> A2; BOOST_FUSION_ADAPT_STRUCT( - le::LEFile, - (mz::MZHeader, mz_header) + le::File, + (mz::Header, mz_header) (A1, unused_1) (binparse::Value16, OEM_id) (A2, OEM_info) (binparse::Offset32, le_offset) (std::vector<uint8_t>, dos_exe) - (le::LEHeader, le_header) - (std::vector<uint8_t>, le_exe) + (le::Header, le_header) + (le::ObjectTable, object_table) ) namespace le { -LEFile parse_file(std::istream& is) { +File parse_file(std::istream& is) { + using binparse::parse; + auto mz_h = mz::parse_header(is); auto unused = parse<std::array<uint8_t, 8>>(is, "unused_1"); auto OEM_id = parse<binparse::Value16>(is, "OEM_id"); @@ -33,8 +36,6 @@ LEFile parse_file(std::istream& is) { binparse::dump_bytes(is, dos_exe, "dos_exe"); auto le_h = le::parse_header(is); - std::string str(std::istreambuf_iterator<char>(is), {}); - std::vector<uint8_t> le_exe(str.begin(), str.end()); return { mz_h, @@ -44,37 +45,12 @@ LEFile parse_file(std::istream& is) { le_offset, dos_exe, le_h, - le_exe }; } -std::ostream& operator<<(std::ostream& os, std::array<uint8_t, 8> const& array) { - return os; -} - -std::ostream& operator<<(std::ostream& os, std::array<uint8_t, 22> const& array) { - return os; -} - -std::ostream& operator<<(std::ostream& os, std::vector<uint8_t> vec) { - return os; -} - -std::ostream& output_impl(std::ostream& os, LEFile const&, indices<>) { - return os; -} - -template <int I, int... Indices> -std::ostream& output_impl(std::ostream& os, const LEFile& file, indices<I, Indices...>) { - os << boost::fusion::extension::struct_member_name<LEFile, I>::call() << ": " << boost::fusion::at_c<I>(file) << std::endl; - return output_impl(os, file, indices<Indices...>{}); -} - -std::ostream&operator<<(std::ostream& os, LEFile const& file) +std::ostream&operator<<(std::ostream& os, File const& file) { - typedef build_indices<boost::fusion::result_of::size<LEFile>::value>::type indices; - - return output_impl(os, file, indices{}); + return binparse::operator<<(os, file); } }
\ No newline at end of file |
