36 dst->
item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE);
37 dst->
item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE);
38 for (
uint32_t mask = 1 << 31; mask; mask >>= 1) {
39 if (data.wand_id & mask) {
40 dst->
item(MAGIQUEST_ONE_MARK, MAGIQUEST_ONE_SPACE);
42 dst->
item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE);
46 for (uint16_t mask = 1 << 15; mask; mask >>= 1) {
47 if (data.magnitude & mask) {
48 dst->
item(MAGIQUEST_ONE_MARK, MAGIQUEST_ONE_SPACE);
50 dst->
item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE);
54 dst->
mark(MAGIQUEST_UNIT);
62 for (uint8_t i = 0; i < 8; i++) {
63 if (!
src.expect_item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE)) {
69 for (
uint32_t mask = 1 << 30; mask; mask >>= 1) {
70 if (
src.expect_item(MAGIQUEST_ONE_MARK, MAGIQUEST_ONE_SPACE)) {
72 }
else if (!
src.expect_item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE)) {
79 for (
uint32_t mask = 1 << 16; mask > 1; mask >>= 1) {
80 if (
src.expect_item(MAGIQUEST_ONE_MARK, MAGIQUEST_ONE_SPACE)) {
81 magnitude_and_checksum |= mask;
82 }
else if (!
src.expect_item(MAGIQUEST_ZERO_MARK, MAGIQUEST_ZERO_SPACE)) {
87 if (
src.expect_mark(MAGIQUEST_ONE_MARK)) {
88 magnitude_and_checksum |= 1;
91 if (!checksum_is_valid(data.wand_id, magnitude_and_checksum)) {
94 data.magnitude = magnitude_and_checksum >> 8;