loci: move push_wire_types functions to their class's C file
diff --git a/c_gen/templates/loci_push_wire_types.c b/c_gen/templates/_push_wire_types.c
similarity index 71%
rename from c_gen/templates/loci_push_wire_types.c
rename to c_gen/templates/_push_wire_types.c
index 2103aad..b7b6288 100644
--- a/c_gen/templates/loci_push_wire_types.c
+++ b/c_gen/templates/_push_wire_types.c
@@ -25,41 +25,12 @@
 :: # EPL for the specific language governing permissions and limitations
 :: # under the EPL.
 ::
-:: include('_copyright.c')
-
-/****************************************************************
- *
- * Functions for each concrete class that set the type fields
- *
- ****************************************************************/
-
-#include <loci/loci.h>
-#include <loci/of_message.h>
-#include <endian.h>
-
-#ifdef __GNUC__
-#define UNREACHABLE() __builtin_unreachable()
-#else
-#define UNREACHABLE()
-#endif
-
-/*
- * In a separate function to give the compiler the choice of whether to inline.
- */
-static unsigned char *
-loci_object_to_buffer(of_object_t *obj)
+static void
+${data.class_name}_push_wire_types(of_object_t *obj)
 {
-    return OF_OBJECT_BUFFER_INDEX(obj, 0);
-}
-
-:: for fn in fns:
-
-void
-${fn.class_name}_push_wire_types(of_object_t *obj)
-{
-    unsigned char *buf = loci_object_to_buffer(obj);
+    unsigned char *buf = OF_OBJECT_BUFFER_INDEX(obj, 0);
     switch (obj->version) {
-:: for ms, versions in fn.versioned_type_members:
+:: for ms, versions in data.versioned_type_members:
 :: for version in versions:
     case ${version.constant_version(prefix='OF_VERSION_')}:
 :: #endfor
@@ -80,4 +51,3 @@
         UNREACHABLE();
     }
 }
-:: #endfor
diff --git a/c_gen/templates/class.c b/c_gen/templates/class.c
index 170cf54..044e03e 100644
--- a/c_gen/templates/class.c
+++ b/c_gen/templates/class.c
@@ -29,5 +29,9 @@
 :: include('_pragmas.c')
 
 #include "loci_log.h"
-#include "loci_push_wire_types.h"
 #include "loci_int.h"
+
+:: if push_wire_types_data:
+:: include("_push_wire_types.c", data=push_wire_types_data)
+
+:: #endif
diff --git a/c_gen/templates/loci_int.h b/c_gen/templates/loci_int.h
index b4df78c..241cf7b 100644
--- a/c_gen/templates/loci_int.h
+++ b/c_gen/templates/loci_int.h
@@ -46,6 +46,12 @@
 
 #include <loci/loci.h>
 
+#ifdef __GNUC__
+#define UNREACHABLE() __builtin_unreachable()
+#else
+#define UNREACHABLE()
+#endif
+
 /****************************************************************
  * Special case macros for calculating variable lengths and offsets
  ****************************************************************/
diff --git a/c_gen/templates/loci_push_wire_types.h b/c_gen/templates/loci_push_wire_types.h
deleted file mode 100644
index 5b2c1e8..0000000
--- a/c_gen/templates/loci_push_wire_types.h
+++ /dev/null
@@ -1,40 +0,0 @@
-:: # Copyright 2013, Big Switch Networks, Inc.
-:: #
-:: # LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
-:: # the following special exception:
-:: #
-:: # LOXI Exception
-:: #
-:: # As a special exception to the terms of the EPL, you may distribute libraries
-:: # generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
-:: # that copyright and licensing notices generated by LoxiGen are not altered or removed
-:: # from the LoxiGen Libraries and the notice provided below is (i) included in
-:: # the LoxiGen Libraries, if distributed in source code form and (ii) included in any
-:: # documentation for the LoxiGen Libraries, if distributed in binary form.
-:: #
-:: # Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
-:: #
-:: # You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
-:: # a copy of the EPL at:
-:: #
-:: # http://www.eclipse.org/legal/epl-v10.html
-:: #
-:: # Unless required by applicable law or agreed to in writing, software
-:: # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-:: # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-:: # EPL for the specific language governing permissions and limitations
-:: # under the EPL.
-::
-:: include('_copyright.c')
-#ifndef LOCI_PUSH_WIRE_TYPES_H
-#define LOCI_PUSH_WIRE_TYPES_H
-
-#include <loci/loci.h>
-
-/* Declarations of public functions from loci_push_wire_types.c */
-
-:: for fn in fns:
-void ${fn.class_name}_push_wire_types(of_object_t *obj);
-:: #endfor
-
-#endif