summaryrefslogtreecommitdiff
path: root/le/le_header.cpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-06-22 00:15:08 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2016-06-22 00:16:28 +0200
commit22231518b9c2c0b7f73c72a6ca834df659c63c7f (patch)
tree12b1d20efd3303583649966ddfe135a81ae8109b /le/le_header.cpp
parent46145fe7d5b1d9f0921121a088a3d61f968cc473 (diff)
downloadopenwar-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.cpp35
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