loci: move per-obj function pointers to global tables

This saves 32 bytes per of_object.
diff --git a/c_gen/c_code_gen.py b/c_gen/c_code_gen.py
index 81f5a1a..e26ef93 100644
--- a/c_gen/c_code_gen.py
+++ b/c_gen/c_code_gen.py
@@ -803,6 +803,7 @@
 #include <loci/of_match.h>
 #include <loci/of_object.h>
 #include <loci/loci_classes.h>
+#include <loci/loci_class_metadata.h>
 
 /****************************************************************
  *
@@ -1752,9 +1753,7 @@
         elif m_type not in ["of_match_t", "of_octets_t"]:
             out.write("""
     /* @fixme Shouldn't this precede copying value's data to buffer? */
-    if (%(m_name)s->wire_length_set != NULL) {
-        %(m_name)s->wire_length_set((of_object_t *)%(m_name)s, %(m_name)s->length);
-    }
+    of_object_wire_length_set((of_object_t *)%(m_name)s, %(m_name)s->length);
 """ % dict(m_name=m_name))
         out.write("""
     /* Not scalar, update lengths if needed */
@@ -2058,7 +2057,6 @@
     obj->length = bytes;
     obj->object_id = %(enum)s;
 """ % dict(cls=cls, enum=enum_name(cls)))
-    gen_coerce_ops(out, cls)
 
     out.write("""
     /* Grow the wire buffer */
@@ -2117,7 +2115,7 @@
 
         if loxi_utils.class_is_u16_len(cls) or cls == "of_packet_queue":
             out.write("""
-    obj->wire_length_set((of_object_t *)obj, obj->length);
+    of_object_wire_length_set((of_object_t *)obj, obj->length);
 """)
 
         if cls == "of_meter_stats":
@@ -2329,99 +2327,6 @@
  ****************************************************************/
 """)
 
-#
-# @fixme Not clear that these should all be set for virtual fns
-#
-# @fixme Clean up.  should have a (language specific) map from class
-# to length and type get/set functions
-#
-
-def gen_coerce_ops(out, cls):
-    out.write("""
-    /* Set up the object's function pointers */
-""")
-
-    uclass = loxi_globals.unified.class_by_name(cls)
-    if uclass and not uclass.virtual and uclass.has_type_members:
-        out.write("""
-    obj->wire_type_set = %(cls)s_push_wire_types;
-""" % dict(cls=cls))
-
-    if loxi_utils.class_is_message(cls):
-        out.write("""
-    obj->wire_length_get = of_object_message_wire_length_get;
-    obj->wire_length_set = of_object_message_wire_length_set;
-""")
-    else:
-        if loxi_utils.class_is_tlv16(cls):
-            if not (cls in type_maps.inheritance_map): # Don't set for super
-                out.write("""
-    obj->wire_length_set = of_tlv16_wire_length_set;
-""")
-            out.write("""
-    obj->wire_length_get = of_tlv16_wire_length_get;
-""")
-            if loxi_utils.class_is_action(cls):
-                out.write("""
-    obj->wire_type_get = of_action_wire_object_id_get;
-""")
-            if loxi_utils.class_is_action_id(cls):
-                out.write("""
-    obj->wire_type_get = of_action_id_wire_object_id_get;
-""")
-            if loxi_utils.class_is_instruction(cls):
-                out.write("""
-    obj->wire_type_get = of_instruction_wire_object_id_get;
-""")
-            if loxi_utils.class_is_instruction_id(cls):
-                out.write("""
-    obj->wire_type_get = of_instruction_id_wire_object_id_get;
-""")
-            if loxi_utils.class_is_queue_prop(cls):
-                    out.write("""
-    obj->wire_type_get = of_queue_prop_wire_object_id_get;
-""")
-            if loxi_utils.class_is_table_feature_prop(cls):
-                    out.write("""
-    obj->wire_type_get = of_table_feature_prop_wire_object_id_get;
-""")
-            if loxi_utils.class_is_meter_band(cls):
-                    out.write("""
-    obj->wire_type_get = of_meter_band_wire_object_id_get;
-""")
-            if loxi_utils.class_is_hello_elem(cls):
-                    out.write("""
-    obj->wire_type_get = of_hello_elem_wire_object_id_get;
-""")
-            if loxi_utils.class_is_bsn_tlv(cls):
-                    out.write("""
-    obj->wire_type_get = of_bsn_tlv_wire_object_id_get;
-""")
-        if loxi_utils.class_is_oxm(cls):
-            out.write("""
-    obj->wire_length_get = of_oxm_wire_length_get;
-    obj->wire_type_get = of_oxm_wire_object_id_get;
-""")
-        if loxi_utils.class_is_u16_len(cls):
-            out.write("""
-    obj->wire_length_get = of_u16_len_wire_length_get;
-    obj->wire_length_set = of_u16_len_wire_length_set;
-""")
-        if cls == "of_packet_queue":
-            out.write("""
-    obj->wire_length_get = of_packet_queue_wire_length_get;
-    obj->wire_length_set = of_packet_queue_wire_length_set;
-""")
-#        if cls == "of_list_meter_band_stats":
-#            out.write("""
-#    obj->wire_length_get = of_list_meter_band_stats_wire_length_get;
-#""")
-        if cls == "of_meter_stats":
-            out.write("""
-    obj->wire_length_get = of_meter_stats_wire_length_get;
-    obj->wire_length_set = of_meter_stats_wire_length_set;
-""")
-
 def gen_new_function_definitions(out, cls):
     """
     Generate the new operator for all classes