move "generate union code" to aidl_to_cpp_common

This is a preparation to add NDK backend for union.

Bug: 170784707
Bug: 150948558
Test: aidl_unittests / aidl_integration_test
Change-Id: I347fc7e114b84eb03baf826c86388176d90bc81e
diff --git a/aidl_to_cpp_common.h b/aidl_to_cpp_common.h
index 2892f88..f49edb0 100644
--- a/aidl_to_cpp_common.h
+++ b/aidl_to_cpp_common.h
@@ -16,6 +16,7 @@
 
 #pragma once
 
+#include <functional>
 #include <string>
 #include <type_traits>
 
@@ -74,6 +75,31 @@
                                const std::vector<std::string>& enclosing_namespaces_of_enum_decl);
 std::string TemplateDecl(const AidlStructuredParcelable& defined_type);
 
+void GenerateParcelableComparisonOperators(CodeWriter& out, const AidlParcelable& parcelable);
+
+struct ParcelWriterContext {
+  string status_type;
+  string status_ok;
+  string status_bad;
+  std::function<void(CodeWriter& out, const std::string& var, const AidlTypeSpecifier& type)>
+      read_func;
+  std::function<void(CodeWriter& out, const std::string& value, const AidlTypeSpecifier& type)>
+      write_func;
+};
+
+struct UnionWriter {
+  const AidlUnionDecl& decl;
+  const AidlTypenames& typenames;
+  const std::function<std::string(const AidlTypeSpecifier&, const AidlTypenames&)> name_of;
+  const ::ConstantValueDecorator& decorator;
+  static const std::vector<std::string> headers;
+
+  void PrivateFields(CodeWriter& out) const;
+  void PublicFields(CodeWriter& out) const;
+  void ReadFromParcel(CodeWriter& out, const ParcelWriterContext&) const;
+  void WriteToParcel(CodeWriter& out, const ParcelWriterContext&) const;
+};
+
 }  // namespace cpp
 }  // namespace aidl
 }  // namespace android