#include "le_entry_table_entry.hpp" #include "parse.hpp" #include "output.hpp" #include typedef boost::variant EntryT; BOOST_FUSION_ADAPT_STRUCT( le::EntryPoint, (binparse::Value8, flags) (EntryT, entry) ) BOOST_FUSION_ADAPT_STRUCT( le::EntryTableEntry, (binparse::Value8, nr_entries) (binparse::Value8, flags) (binparse::Value16, object_index) (std::vector, entries) ) namespace le { EntryTableEntry parse_entry_table_entry(std::istream& is) { EntryTableEntry entry; entry.nr_entries = binparse::parse(is, "nr_entries"); entry.flags = binparse::parse(is, "flags"); entry.object_index = binparse::parse(is, "object_index"); for(Value8 i = Value8(0); i < entry.nr_entries; i++) { if(entry.flags & 2) { entry.entries.push_back({ binparse::parse(is, "flags"), binparse::parse(is, "entry") }); } else { entry.entries.push_back({ binparse::parse(is, "flags"), binparse::parse(is, "entry") }); } } return entry; } std::ostream&operator<<(std::ostream& os, const EntryTableEntry& entry) { return binparse::operator<<(os, entry); } }