I am trying to work through a bug surrounding changing the bitOrder mid schema
and am having trouble figuring out how Daffodil handles bitOrder in general.
I see that in InputSourceData, we have code to mask for the correct bits and
shift out the gaps, but I do not see where we actually invert the bit-order
internal to a byte.
In an attempt to test this, I made the following schema:
<tdml:defineSchema name="s6">
<xs:include
schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
<dfdl:format ref="ex:GeneralFormat" representation="binary"
lengthUnits="bits" lengthKind='explicit'
alignmentUnits='bits' alignment='1' binaryNumberRep='binary'
bitOrder="leastSignificantBitFirst" byteOrder="littleEndian"
/>
<xs:element name="changeOnSequence" dfdl:lengthKind='implicit'>
<xs:complexType>
<xs:sequence>
<xs:sequence>
<xs:element name="A" type="xs:unsignedInt" dfdl:length="8"/>
<xs:element name="B" type="xs:unsignedInt" dfdl:length="8"/>
<xs:element name="C" type="xs:unsignedInt" dfdl:length="8"/>
<xs:element name="D" type="xs:unsignedInt" dfdl:length="8"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</tdml:defineSchema>
Combined with the following testcase:
<tdml:parserTestCase name="bitOrderChangeOnSequence"
root="changeOnSequence" model="s6" description="Tests changing bitOrder
when on a byte boundary.">
<document xmlns="http://www.ibm.com/xmlns/dfdl/testData">
<documentPart type="bits">
0000 0001
0000 0001
1000 0000
1000 0000
</documentPart>
</document>
<tdml:infoset>
<tdml:dfdlInfoset xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://example.com">
<changeOnSequence>
<A>128</A>
<B>128</B>
<C>1</C>
<D>1</D>
</changeOnSequence>
</tdml:dfdlInfoset>
</tdml:infoset>
</tdml:parserTestCase>
However, the actual output was:
<changeOnSequence>
<A>1</A>
<B>1</B>
<C>128</C>
<D>128</D>
</changeOnSequence>
As if I had never set the bitOrder at all.
Given that we have made extensive use of bitOrder in the past, I find it hard
to believe that it is a fundomentally non-implemented as my current
understanding of the code would suggest. Any ideas on what I am missing?
Brandon T. Sloane
Associate, Services
[email protected] | tresys.com