Я нахожусь в процессе написания XSL для генерации кода, и у меня возникла проблема, с которой мне нужна помощь специалиста.
XML определяет объект обмена сообщениями и его членов. Ниже приведен небольшой пример одного из объектов сообщения, который необходимо преобразовать в объект Java, подходящий для сериализации:
<message name="MyObject">
<comment>Some comment</comment>
<field name="a" type="byte"/>
<field name="b" type="Int32"/>
<field name="c" type="string"/>
<field name="foo1" type="byte" numberOfBits="3"/>
<field name="foo2" type="bool" numberOfBits="1" />
<field name="foo3" type="bool" numberOfBits="1" />
<field name="foo4" type="bool" numberOfBits="1" />
<field name="foo5" type="bool" numberOfBits="1" />
<field name="foo6" type="bool" numberOfBits="1"/>
<field name="d" type="Int32"/>
<field name="e" type="Int32"/>
<field name="f" type="Int16"/>
<field name="bar1" type="byte" numberOfBits="4"/>
<field name="bar2" type="empty" numberOfBits="3"/>
<field name="bar3" type="bool" numberOfBits="1"/>
</message>
Я борюсь с тем, как сгенерировать необходимые битовые операции для элементов foo и bar выше. Каждый набор этих членов «numberOfBits» всегда будет группами по 8 битов и всегда будет помещаться в байте. В частности, у меня возникают проблемы с отслеживанием количества бит в текущем байте и времени начала следующего байта.
Например, члены foo выше выглядели бы примерно так, как показано ниже, если бы я писал с нуля:
byte bitset1;
byte getFoo1() { return (biteset1 & 0x07); }
boolean getFoo2() { return (biteset1 & 0x08) == 0x08; }
boolean getFoo3() { return (biteset1 & 0x10) == 0x10; }
boolean getFoo4() { return (biteset1 & 0x20) == 0x20; }
boolean getFoo5() { return (biteset1 & 0x40) == 0x40; }
boolean getFoo6() { return (biteset1 & 0x80) == 0x80; }
Будем весьма благодарны за любые указатели, которые помогут мне двигаться в правильном направлении.
Mike