pyloxi: add padding as its own member type
Also remove it from pretty-printing.
diff --git a/py_gen/codegen.py b/py_gen/codegen.py
index 45adc5d..01dd782 100644
--- a/py_gen/codegen.py
+++ b/py_gen/codegen.py
@@ -26,6 +26,7 @@
# under the EPL.
from collections import namedtuple
+import struct
import of_g
import loxi_front_end.type_maps as type_maps
import loxi_utils.loxi_utils as utils
@@ -37,6 +38,7 @@
Member = namedtuple('Member', ['name', 'oftype', 'offset', 'skip'])
LengthMember = namedtuple('LengthMember', ['name', 'oftype', 'offset'])
TypeMember = namedtuple('TypeMember', ['name', 'oftype', 'offset', 'value'])
+PadMember = namedtuple('PadMember', ['offset', 'length'])
def get_type_values(cls, version):
"""
@@ -116,16 +118,14 @@
oftype=oftype.OFType(member['m_type'], version),
value=type_values[member['name']]))
type_members.append(members[-1])
- else: # HACK ensure member names are unique
- if member['name'].startswith("pad"):
- if pad_count == 0:
- m_name = 'pad'
- else:
- m_name = "pad%d" % pad_count
- pad_count += 1
- else:
- m_name = member['name']
- members.append(Member(name=m_name,
+ elif member['name'].startswith("pad"):
+ # HACK this should be moved to the frontend
+ pad_oftype = oftype.OFType(member['m_type'], version)
+ length = struct.calcsize("!" + pad_oftype._pack_fmt())
+ if pad_oftype.is_array: length *= pad_oftype.array_length
+ members.append(PadMember(offset=member['offset'], length=length))
+ else:
+ members.append(Member(name=member['name'],
oftype=oftype.OFType(member['m_type'], version),
offset=member['offset'],
skip=member['name'] in of_g.skip_members))