From 86b6f32ce68fc85c30bd2e9c122fb60178aac427 Mon Sep 17 00:00:00 2001
From: Teon Banek <teon.banek@memgraph.io>
Date: Thu, 21 Dec 2017 11:08:00 +0100
Subject: [PATCH] Move load_construct_data from ast.cpp to ast.hpp

Reviewers: florijan, mislav.bradac, mferencevic

Reviewed By: florijan

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D1078
---
 src/query/frontend/ast/ast.cpp | 70 ---------------------------------
 src/query/frontend/ast/ast.hpp | 71 ++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 70 deletions(-)

diff --git a/src/query/frontend/ast/ast.cpp b/src/query/frontend/ast/ast.cpp
index 11ac537ec..f0bd5fd62 100644
--- a/src/query/frontend/ast/ast.cpp
+++ b/src/query/frontend/ast/ast.cpp
@@ -35,76 +35,6 @@ ReturnBody CloneReturnBody(AstTreeStorage &storage, const ReturnBody &body) {
 
 }  // namespace query
 
-#define LOAD_AND_CONSTRUCT(DerivedClass, ...)               \
-  template <class TArchive>                                 \
-  void load_construct_data(TArchive &ar, DerivedClass *cls, \
-                           const unsigned int) {            \
-    ::new (cls) DerivedClass(__VA_ARGS__);                  \
-  }
-
-// All of the serialization cruft follows
-
-namespace boost::serialization {
-LOAD_AND_CONSTRUCT(query::Where, 0);
-LOAD_AND_CONSTRUCT(query::OrOperator, 0);
-LOAD_AND_CONSTRUCT(query::XorOperator, 0);
-LOAD_AND_CONSTRUCT(query::AndOperator, 0);
-LOAD_AND_CONSTRUCT(query::AdditionOperator, 0);
-LOAD_AND_CONSTRUCT(query::SubtractionOperator, 0);
-LOAD_AND_CONSTRUCT(query::MultiplicationOperator, 0);
-LOAD_AND_CONSTRUCT(query::DivisionOperator, 0);
-LOAD_AND_CONSTRUCT(query::ModOperator, 0);
-LOAD_AND_CONSTRUCT(query::NotEqualOperator, 0);
-LOAD_AND_CONSTRUCT(query::EqualOperator, 0);
-LOAD_AND_CONSTRUCT(query::LessOperator, 0);
-LOAD_AND_CONSTRUCT(query::GreaterOperator, 0);
-LOAD_AND_CONSTRUCT(query::LessEqualOperator, 0);
-LOAD_AND_CONSTRUCT(query::GreaterEqualOperator, 0);
-LOAD_AND_CONSTRUCT(query::InListOperator, 0);
-LOAD_AND_CONSTRUCT(query::ListMapIndexingOperator, 0);
-LOAD_AND_CONSTRUCT(query::ListSlicingOperator, 0, nullptr, nullptr, nullptr);
-LOAD_AND_CONSTRUCT(query::IfOperator, 0, nullptr, nullptr, nullptr);
-LOAD_AND_CONSTRUCT(query::NotOperator, 0);
-LOAD_AND_CONSTRUCT(query::UnaryPlusOperator, 0);
-LOAD_AND_CONSTRUCT(query::UnaryMinusOperator, 0);
-LOAD_AND_CONSTRUCT(query::IsNullOperator, 0);
-LOAD_AND_CONSTRUCT(query::PrimitiveLiteral, 0);
-LOAD_AND_CONSTRUCT(query::ListLiteral, 0);
-LOAD_AND_CONSTRUCT(query::MapLiteral, 0);
-LOAD_AND_CONSTRUCT(query::Identifier, 0, "");
-LOAD_AND_CONSTRUCT(query::PropertyLookup, 0, nullptr, "",
-                   GraphDbTypes::Property());
-LOAD_AND_CONSTRUCT(query::LabelsTest, 0, nullptr,
-                   std::vector<GraphDbTypes::Label>());
-LOAD_AND_CONSTRUCT(query::Function, 0);
-LOAD_AND_CONSTRUCT(query::Aggregation, 0, nullptr, nullptr,
-                   query::Aggregation::Op::COUNT);
-LOAD_AND_CONSTRUCT(query::All, 0, nullptr, nullptr, nullptr);
-LOAD_AND_CONSTRUCT(query::ParameterLookup, 0);
-LOAD_AND_CONSTRUCT(query::NamedExpression, 0);
-LOAD_AND_CONSTRUCT(query::NodeAtom, 0);
-LOAD_AND_CONSTRUCT(query::EdgeAtom, 0);
-LOAD_AND_CONSTRUCT(query::Pattern, 0);
-LOAD_AND_CONSTRUCT(query::SingleQuery, 0);
-LOAD_AND_CONSTRUCT(query::CypherUnion, 0);
-LOAD_AND_CONSTRUCT(query::Query, 0);
-LOAD_AND_CONSTRUCT(query::Create, 0);
-LOAD_AND_CONSTRUCT(query::Match, 0);
-LOAD_AND_CONSTRUCT(query::Return, 0);
-LOAD_AND_CONSTRUCT(query::With, 0);
-LOAD_AND_CONSTRUCT(query::Delete, 0);
-LOAD_AND_CONSTRUCT(query::SetProperty, 0);
-LOAD_AND_CONSTRUCT(query::SetProperties, 0);
-LOAD_AND_CONSTRUCT(query::SetLabels, 0);
-LOAD_AND_CONSTRUCT(query::RemoveProperty, 0);
-LOAD_AND_CONSTRUCT(query::RemoveLabels, 0);
-LOAD_AND_CONSTRUCT(query::Merge, 0);
-LOAD_AND_CONSTRUCT(query::Unwind, 0);
-LOAD_AND_CONSTRUCT(query::CreateIndex, 0);
-}  // namespace boost::serialization
-
-#undef LOAD_AND_CONSTRUCT
-
 // Include archives before registering most derived types.
 #include "boost/archive/binary_iarchive.hpp"
 #include "boost/archive/binary_oarchive.hpp"
diff --git a/src/query/frontend/ast/ast.hpp b/src/query/frontend/ast/ast.hpp
index 850e19bae..e26d1a9c5 100644
--- a/src/query/frontend/ast/ast.hpp
+++ b/src/query/frontend/ast/ast.hpp
@@ -2906,6 +2906,8 @@ class CreateIndex : public Clause {
 #undef SERIALIZE_USING_BASE
 }  // namespace query
 
+// All of the serialization cruft follows
+
 BOOST_CLASS_EXPORT_KEY(query::Query);
 BOOST_CLASS_EXPORT_KEY(query::SingleQuery);
 BOOST_CLASS_EXPORT_KEY(query::CypherUnion);
@@ -2959,3 +2961,72 @@ BOOST_CLASS_EXPORT_KEY(query::Unwind);
 BOOST_CLASS_EXPORT_KEY(query::Identifier);
 BOOST_CLASS_EXPORT_KEY(query::PrimitiveLiteral);
 BOOST_CLASS_EXPORT_KEY(query::CreateIndex);
+
+#define LOAD_AND_CONSTRUCT(DerivedClass, ...)               \
+  template <class TArchive>                                 \
+  void load_construct_data(TArchive &ar, DerivedClass *cls, \
+                           const unsigned int) {            \
+    ::new (cls) DerivedClass(__VA_ARGS__);                  \
+  }
+
+namespace boost::serialization {
+LOAD_AND_CONSTRUCT(query::Where, 0);
+LOAD_AND_CONSTRUCT(query::OrOperator, 0);
+LOAD_AND_CONSTRUCT(query::XorOperator, 0);
+LOAD_AND_CONSTRUCT(query::AndOperator, 0);
+LOAD_AND_CONSTRUCT(query::AdditionOperator, 0);
+LOAD_AND_CONSTRUCT(query::SubtractionOperator, 0);
+LOAD_AND_CONSTRUCT(query::MultiplicationOperator, 0);
+LOAD_AND_CONSTRUCT(query::DivisionOperator, 0);
+LOAD_AND_CONSTRUCT(query::ModOperator, 0);
+LOAD_AND_CONSTRUCT(query::NotEqualOperator, 0);
+LOAD_AND_CONSTRUCT(query::EqualOperator, 0);
+LOAD_AND_CONSTRUCT(query::LessOperator, 0);
+LOAD_AND_CONSTRUCT(query::GreaterOperator, 0);
+LOAD_AND_CONSTRUCT(query::LessEqualOperator, 0);
+LOAD_AND_CONSTRUCT(query::GreaterEqualOperator, 0);
+LOAD_AND_CONSTRUCT(query::InListOperator, 0);
+LOAD_AND_CONSTRUCT(query::ListMapIndexingOperator, 0);
+LOAD_AND_CONSTRUCT(query::ListSlicingOperator, 0, nullptr, nullptr, nullptr);
+LOAD_AND_CONSTRUCT(query::IfOperator, 0, nullptr, nullptr, nullptr);
+LOAD_AND_CONSTRUCT(query::NotOperator, 0);
+LOAD_AND_CONSTRUCT(query::UnaryPlusOperator, 0);
+LOAD_AND_CONSTRUCT(query::UnaryMinusOperator, 0);
+LOAD_AND_CONSTRUCT(query::IsNullOperator, 0);
+LOAD_AND_CONSTRUCT(query::PrimitiveLiteral, 0);
+LOAD_AND_CONSTRUCT(query::ListLiteral, 0);
+LOAD_AND_CONSTRUCT(query::MapLiteral, 0);
+LOAD_AND_CONSTRUCT(query::Identifier, 0, "");
+LOAD_AND_CONSTRUCT(query::PropertyLookup, 0, nullptr, "",
+                   GraphDbTypes::Property());
+LOAD_AND_CONSTRUCT(query::LabelsTest, 0, nullptr,
+                   std::vector<GraphDbTypes::Label>());
+LOAD_AND_CONSTRUCT(query::Function, 0);
+LOAD_AND_CONSTRUCT(query::Aggregation, 0, nullptr, nullptr,
+                   query::Aggregation::Op::COUNT);
+LOAD_AND_CONSTRUCT(query::All, 0, nullptr, nullptr, nullptr);
+LOAD_AND_CONSTRUCT(query::ParameterLookup, 0);
+LOAD_AND_CONSTRUCT(query::NamedExpression, 0);
+LOAD_AND_CONSTRUCT(query::NodeAtom, 0);
+LOAD_AND_CONSTRUCT(query::EdgeAtom, 0);
+LOAD_AND_CONSTRUCT(query::Pattern, 0);
+LOAD_AND_CONSTRUCT(query::SingleQuery, 0);
+LOAD_AND_CONSTRUCT(query::CypherUnion, 0);
+LOAD_AND_CONSTRUCT(query::Query, 0);
+LOAD_AND_CONSTRUCT(query::Create, 0);
+LOAD_AND_CONSTRUCT(query::Match, 0);
+LOAD_AND_CONSTRUCT(query::Return, 0);
+LOAD_AND_CONSTRUCT(query::With, 0);
+LOAD_AND_CONSTRUCT(query::Delete, 0);
+LOAD_AND_CONSTRUCT(query::SetProperty, 0);
+LOAD_AND_CONSTRUCT(query::SetProperties, 0);
+LOAD_AND_CONSTRUCT(query::SetLabels, 0);
+LOAD_AND_CONSTRUCT(query::RemoveProperty, 0);
+LOAD_AND_CONSTRUCT(query::RemoveLabels, 0);
+LOAD_AND_CONSTRUCT(query::Merge, 0);
+LOAD_AND_CONSTRUCT(query::Unwind, 0);
+LOAD_AND_CONSTRUCT(query::CreateIndex, 0);
+}  // namespace boost::serialization
+
+#undef LOAD_AND_CONSTRUCT
+