/* * Copyright (C) 2007-2012 Siemens AG * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com * @version 2012-01-31 * @contact Joerg.Heuer@siemens.com * *

Code generated by EXIdizer

********************************************************************/ #ifndef EXI_appHand_DECODER_C #define EXI_appHand_DECODER_C #include "EXITypes.h" #include "BitInputStream.h" #include "DecoderChannel.h" #include "CoderChannel.h" #include "StringTable.h" #include "appHand_NameTableEntries.h" #include "MethodsBag.h" #include "EXICoder.h" #include "EXIHeaderDecoder.h" /* local variables */ static uint32_t xsi; static uint32_t bits; static int errn; /* temporary over-read list values */ static int _decodeListValues(bitstream_t* stream, exi_datatype_t dt, uint16_t len) { unsigned int i, k; uint8_t uint8; uint16_t uint16; uint32_t uint32; integer_t iv; int64_t int64; for(i = 0; istackIndex = 0; state->grammarStack[0] = DOCUMENT; /* string table */ state->nameTablePrepopulated = exiappHandNameTablePrepopulated; state->nameTableRuntime = runtimeTable; /* decode header */ return readEXIHeader(stream); } static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state, exi_event_t* nextEvent) { uint32_t eventCode2 = 0; switch (state->grammarStack[state->stackIndex]) { case 70: /* Element[CHARACTERS[STRING]] */ case 124: /* Element[CHARACTERS[STRING]] */ case 139: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 46: /* Element[CHARACTERS[ENUMERATION]] */ case 22: /* Element[START_ELEMENT(ProtocolNamespace)] */ case 86: /* Element[CHARACTERS[DATETIME]] */ case 92: /* Element[CHARACTERS[FLOAT]] */ case 134: /* Element[CHARACTERS[STRING]] */ case 120: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 100: /* Element[CHARACTERS[DATETIME]] */ case 54: /* Element[CHARACTERS[STRING]] */ case 68: /* Element[CHARACTERS[STRING]] */ case 72: /* Element[CHARACTERS[STRING]] */ case 21: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 78: /* Element[CHARACTERS[STRING]] */ case 141: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 52: /* Element[CHARACTERS[LIST]] */ case 102: /* Element[CHARACTERS[DATETIME]] */ case 96: /* Element[CHARACTERS[FLOAT]] */ case 60: /* Element[CHARACTERS[LIST]] */ case 82: /* Element[CHARACTERS[BOOLEAN]] */ case 88: /* Element[CHARACTERS[DATETIME]] */ case 116: /* Element[CHARACTERS[INTEGER]] */ case 98: /* Element[CHARACTERS[DATETIME]] */ case 128: /* Element[CHARACTERS[INTEGER]] */ case 13: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 90: /* Element[CHARACTERS[DECIMAL]] */ case 42: /* Element[START_ELEMENT(AppProtocol)] */ case 143: /* Element[CHARACTERS[STRING]] */ case 110: /* Element[CHARACTERS[INTEGER]] */ case 66: /* Element[CHARACTERS[LIST]] */ case 94: /* Element[CHARACTERS[STRING]] */ case 112: /* Element[CHARACTERS[INTEGER]] */ case 58: /* Element[CHARACTERS[STRING]] */ case 14: /* Element[START_ELEMENT(SchemaID)] */ case 122: /* Element[CHARACTERS[INTEGER]] */ case 16: /* Element[START_ELEMENT(Priority)] */ case 104: /* Element[CHARACTERS[DATETIME]] */ case 114: /* Element[CHARACTERS[STRING]] */ case 108: /* Element[CHARACTERS[BINARY_HEX]] */ case 84: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 106: /* Element[CHARACTERS[DATETIME]] */ case 11: /* Element[START_ELEMENT(VersionNumberMinor)] */ case 74: /* Element[CHARACTERS[STRING]] */ case 6: /* Element[START_ELEMENT(VersionNumberMajor)] */ case 64: /* Element[CHARACTERS[STRING]] */ case 62: /* Element[CHARACTERS[STRING]] */ case 130: /* Element[CHARACTERS[STRING]] */ case 126: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 118: /* Element[CHARACTERS[INTEGER]] */ case 48: /* Element[START_ELEMENT(ResponseCode)] */ case 10: /* Element[CHARACTERS[STRING]] */ case 136: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 80: /* Element[CHARACTERS[BINARY_BASE64]] */ case 56: /* Element[CHARACTERS[STRING]] */ case 132: /* Element[CHARACTERS[DATETIME]] */ case 18: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); switch (eventCode2) { case 0: *nextEvent = END_ELEMENT_UNDECLARED; return errn; case 1: *nextEvent = START_ELEMENT_GENERIC_UNDECLARED; return errn; case 2: *nextEvent = CHARACTERS_GENERIC_UNDECLARED; return errn; } break; case 8: /* Element[END_ELEMENT] */ case 34: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 40: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 44: /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ case 25: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 31: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 39: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 33: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 50: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ case 26: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 47: /* Element[END_ELEMENT] */ case 38: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 35: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 24: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 30: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 4: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 19: /* Element[END_ELEMENT] */ case 37: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 29: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 23: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 27: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 76: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ case 41: /* Element[END_ELEMENT] */ case 36: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 32: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 28: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); switch (eventCode2) { case 0: *nextEvent = START_ELEMENT_GENERIC_UNDECLARED; return errn; case 1: *nextEvent = CHARACTERS_GENERIC_UNDECLARED; return errn; } break; case 49: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ case 75: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); switch (eventCode2) { case 0: *nextEvent = ATTRIBUTE_XSI_TYPE; return errn; case 1: *nextEvent = ATTRIBUTE_XSI_NIL; return errn; case 2: *nextEvent = ATTRIBUTE_GENERIC_UNDECLARED; return errn; case 3: *nextEvent = ATTRIBUTE_INVALID_VALUE; return errn; case 4: *nextEvent = START_ELEMENT_GENERIC_UNDECLARED; return errn; case 5: *nextEvent = CHARACTERS_GENERIC_UNDECLARED; return errn; } break; case 109: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 113: /* FirstStartTag[CHARACTERS[STRING]] */ case 12: /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 140: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 57: /* FirstStartTag[CHARACTERS[STRING]] */ case 97: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 135: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 5: /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ case 91: /* FirstStartTag[CHARACTERS[FLOAT]] */ case 111: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 7: /* FirstStartTag[CHARACTERS[STRING]] */ case 123: /* FirstStartTag[CHARACTERS[STRING]] */ case 61: /* FirstStartTag[CHARACTERS[STRING]] */ case 99: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 73: /* FirstStartTag[CHARACTERS[STRING]] */ case 53: /* FirstStartTag[CHARACTERS[STRING]] */ case 93: /* FirstStartTag[CHARACTERS[STRING]] */ case 59: /* FirstStartTag[CHARACTERS[LIST]] */ case 63: /* FirstStartTag[CHARACTERS[STRING]] */ case 115: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 101: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 71: /* FirstStartTag[CHARACTERS[STRING]] */ case 77: /* FirstStartTag[CHARACTERS[STRING]] */ case 142: /* FirstStartTag[CHARACTERS[STRING]] */ case 121: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 17: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 83: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 117: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 3: /* FirstStartTag[START_ELEMENT(AppProtocol)] */ case 87: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 79: /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ case 67: /* FirstStartTag[CHARACTERS[STRING]] */ case 137: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 81: /* FirstStartTag[CHARACTERS[BOOLEAN]] */ case 119: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 51: /* FirstStartTag[CHARACTERS[LIST]] */ case 105: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 69: /* FirstStartTag[CHARACTERS[STRING]] */ case 45: /* FirstStartTag[CHARACTERS[ENUMERATION]] */ case 65: /* FirstStartTag[CHARACTERS[LIST]] */ case 129: /* FirstStartTag[CHARACTERS[STRING]] */ case 55: /* FirstStartTag[CHARACTERS[STRING]] */ case 43: /* FirstStartTag[START_ELEMENT(ResponseCode)] */ case 20: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 85: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 125: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 103: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 138: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 15: /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 133: /* FirstStartTag[CHARACTERS[STRING]] */ case 131: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 89: /* FirstStartTag[CHARACTERS[DECIMAL]] */ case 107: /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ case 127: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 95: /* FirstStartTag[CHARACTERS[FLOAT]] */ errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); switch (eventCode2) { case 0: *nextEvent = END_ELEMENT_UNDECLARED; return errn; case 1: *nextEvent = ATTRIBUTE_XSI_TYPE; return errn; case 2: *nextEvent = ATTRIBUTE_XSI_NIL; return errn; case 3: *nextEvent = ATTRIBUTE_GENERIC_UNDECLARED; return errn; case 4: *nextEvent = ATTRIBUTE_INVALID_VALUE; return errn; case 5: *nextEvent = START_ELEMENT_GENERIC_UNDECLARED; return errn; case 6: *nextEvent = CHARACTERS_GENERIC_UNDECLARED; return errn; } break; default: *nextEvent = ERROR; return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; } return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; } int exiappHandDecodeNextEvent(bitstream_t* stream, exi_state_t* state, exi_event_t* nextEvent) { state->eventCode = 0; switch (state->grammarStack[state->stackIndex]) { case 109: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 113: /* FirstStartTag[CHARACTERS[STRING]] */ case 12: /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 140: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 70: /* Element[CHARACTERS[STRING]] */ case 124: /* Element[CHARACTERS[STRING]] */ case 57: /* FirstStartTag[CHARACTERS[STRING]] */ case 97: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 135: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 91: /* FirstStartTag[CHARACTERS[FLOAT]] */ case 111: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 139: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 46: /* Element[CHARACTERS[ENUMERATION]] */ case 86: /* Element[CHARACTERS[DATETIME]] */ case 7: /* FirstStartTag[CHARACTERS[STRING]] */ case 92: /* Element[CHARACTERS[FLOAT]] */ case 134: /* Element[CHARACTERS[STRING]] */ case 123: /* FirstStartTag[CHARACTERS[STRING]] */ case 61: /* FirstStartTag[CHARACTERS[STRING]] */ case 99: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 120: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 73: /* FirstStartTag[CHARACTERS[STRING]] */ case 53: /* FirstStartTag[CHARACTERS[STRING]] */ case 93: /* FirstStartTag[CHARACTERS[STRING]] */ case 100: /* Element[CHARACTERS[DATETIME]] */ case 54: /* Element[CHARACTERS[STRING]] */ case 59: /* FirstStartTag[CHARACTERS[LIST]] */ case 68: /* Element[CHARACTERS[STRING]] */ case 72: /* Element[CHARACTERS[STRING]] */ case 63: /* FirstStartTag[CHARACTERS[STRING]] */ case 115: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 101: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 21: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 71: /* FirstStartTag[CHARACTERS[STRING]] */ case 77: /* FirstStartTag[CHARACTERS[STRING]] */ case 142: /* FirstStartTag[CHARACTERS[STRING]] */ case 78: /* Element[CHARACTERS[STRING]] */ case 121: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 141: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 52: /* Element[CHARACTERS[LIST]] */ case 102: /* Element[CHARACTERS[DATETIME]] */ case 96: /* Element[CHARACTERS[FLOAT]] */ case 17: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 83: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 117: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 87: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 60: /* Element[CHARACTERS[LIST]] */ case 79: /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ case 82: /* Element[CHARACTERS[BOOLEAN]] */ case 88: /* Element[CHARACTERS[DATETIME]] */ case 116: /* Element[CHARACTERS[INTEGER]] */ case 98: /* Element[CHARACTERS[DATETIME]] */ case 128: /* Element[CHARACTERS[INTEGER]] */ case 67: /* FirstStartTag[CHARACTERS[STRING]] */ case 13: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 90: /* Element[CHARACTERS[DECIMAL]] */ case 137: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 81: /* FirstStartTag[CHARACTERS[BOOLEAN]] */ case 119: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 143: /* Element[CHARACTERS[STRING]] */ case 110: /* Element[CHARACTERS[INTEGER]] */ case 66: /* Element[CHARACTERS[LIST]] */ case 51: /* FirstStartTag[CHARACTERS[LIST]] */ case 94: /* Element[CHARACTERS[STRING]] */ case 112: /* Element[CHARACTERS[INTEGER]] */ case 58: /* Element[CHARACTERS[STRING]] */ case 105: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 122: /* Element[CHARACTERS[INTEGER]] */ case 69: /* FirstStartTag[CHARACTERS[STRING]] */ case 104: /* Element[CHARACTERS[DATETIME]] */ case 114: /* Element[CHARACTERS[STRING]] */ case 45: /* FirstStartTag[CHARACTERS[ENUMERATION]] */ case 65: /* FirstStartTag[CHARACTERS[LIST]] */ case 108: /* Element[CHARACTERS[BINARY_HEX]] */ case 84: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 129: /* FirstStartTag[CHARACTERS[STRING]] */ case 106: /* Element[CHARACTERS[DATETIME]] */ case 55: /* FirstStartTag[CHARACTERS[STRING]] */ case 74: /* Element[CHARACTERS[STRING]] */ case 20: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 85: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 125: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 64: /* Element[CHARACTERS[STRING]] */ case 62: /* Element[CHARACTERS[STRING]] */ case 103: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 138: /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 130: /* Element[CHARACTERS[STRING]] */ case 126: /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ case 15: /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ case 133: /* FirstStartTag[CHARACTERS[STRING]] */ case 118: /* Element[CHARACTERS[INTEGER]] */ case 131: /* FirstStartTag[CHARACTERS[DATETIME]] */ case 10: /* Element[CHARACTERS[STRING]] */ case 136: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ case 80: /* Element[CHARACTERS[BINARY_BASE64]] */ case 89: /* FirstStartTag[CHARACTERS[DECIMAL]] */ case 56: /* Element[CHARACTERS[STRING]] */ case 107: /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ case 127: /* FirstStartTag[CHARACTERS[INTEGER]] */ case 132: /* Element[CHARACTERS[DATETIME]] */ case 95: /* FirstStartTag[CHARACTERS[FLOAT]] */ case 18: /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = CHARACTERS; return errn; case 1: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; case 0: /* Document[START_DOCUMENT] */ *nextEvent = START_DOCUMENT; return errn; case 5: /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ case 22: /* Element[START_ELEMENT(ProtocolNamespace)] */ case 3: /* FirstStartTag[START_ELEMENT(AppProtocol)] */ case 42: /* Element[START_ELEMENT(AppProtocol)] */ case 14: /* Element[START_ELEMENT(SchemaID)] */ case 16: /* Element[START_ELEMENT(Priority)] */ case 11: /* Element[START_ELEMENT(VersionNumberMinor)] */ case 43: /* FirstStartTag[START_ELEMENT(ResponseCode)] */ case 6: /* Element[START_ELEMENT(VersionNumberMajor)] */ case 48: /* Element[START_ELEMENT(ResponseCode)] */ errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = START_ELEMENT; return errn; case 1: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; case 49: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ case 75: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = ATTRIBUTE_GENERIC; return errn; case 1: *nextEvent = START_ELEMENT_GENERIC; return errn; case 2: *nextEvent = END_ELEMENT; return errn; case 3: *nextEvent = CHARACTERS_GENERIC; return errn; case 4: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; case 2: /* DocEnd[END_DOCUMENT] */ *nextEvent = END_DOCUMENT; return errn; case 34: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 40: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 44: /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ case 25: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 31: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 39: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 33: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 26: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 38: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 35: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 24: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 30: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 4: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 37: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 29: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 23: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 27: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 36: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 32: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ case 28: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = START_ELEMENT; return errn; case 1: *nextEvent = END_ELEMENT; return errn; case 2: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; case 50: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ case 76: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = START_ELEMENT_GENERIC; return errn; case 1: *nextEvent = END_ELEMENT; return errn; case 2: *nextEvent = CHARACTERS_GENERIC; return errn; case 3: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; case 1: /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); switch (state->eventCode) { case 0: case 1: *nextEvent = START_ELEMENT; return errn; case 2: *nextEvent = START_ELEMENT_GENERIC; return errn; } break; case 8: /* Element[END_ELEMENT] */ case 47: /* Element[END_ELEMENT] */ case 19: /* Element[END_ELEMENT] */ case 41: /* Element[END_ELEMENT] */ errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); switch (state->eventCode) { case 0: *nextEvent = END_ELEMENT; return errn; case 1: /* 2nd level events */ errn = exiDecodeNext2Event(stream, state, nextEvent); return errn; } break; default: *nextEvent = ERROR; return EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; } return EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; } int exiappHandDecodeStartDocument(bitstream_t* stream, exi_state_t* state) { if ( state->grammarStack[state->stackIndex] == 0 ) { /* move on */ state->grammarStack[state->stackIndex] = 1; return 0; } return EXI_ERROR_UNEXPECTED_START_DOCUMENT; } int exiappHandDecodeEndDocument(bitstream_t* stream, exi_state_t* state) { if ( state->grammarStack[state->stackIndex] == 2) { return 0; } return EXI_ERROR_UNEXPECTED_END_DOCUMENT; } static int _exiDecodeStartElement(exi_state_t* state, eqname_t* se, uint16_t ns, uint16_t ln, uint16_t stackId, uint16_t newState) { se->namespaceURI = ns; se->localPart = ln; /* move on */ state->grammarStack[state->stackIndex] = stackId; /* push element on stack */ return exiPushStack(state, newState, se); } int exiappHandDecodeStartElement(bitstream_t* stream, exi_state_t* state, eqname_t* se) { switch (state->grammarStack[state->stackIndex]) { case 1: /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 4, 6, 2, 3); case 1: return _exiDecodeStartElement(state, se, 4, 7, 2, 43); case 2: return _exiDecodeStartElement(state, se, -1, -1, 2, 49); } break; case 3: /* FirstStartTag[START_ELEMENT(AppProtocol)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 4, 5); } break; case 4: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 23, 5); } break; case 5: /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 2, 6, 7); } break; case 6: /* Element[START_ELEMENT(VersionNumberMajor)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 5, 11, 12); } break; case 11: /* Element[START_ELEMENT(VersionNumberMinor)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 6, 14, 15); } break; case 14: /* Element[START_ELEMENT(SchemaID)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 4, 16, 17); } break; case 16: /* Element[START_ELEMENT(Priority)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 1, 19, 20); } break; case 22: /* Element[START_ELEMENT(ProtocolNamespace)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 2, 6, 7); } break; case 23: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 24, 5); } break; case 24: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 25, 5); } break; case 25: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 26, 5); } break; case 26: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 27, 5); } break; case 27: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 28, 5); } break; case 28: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 29, 5); } break; case 29: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 30, 5); } break; case 30: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 31, 5); } break; case 31: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 32, 5); } break; case 32: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 33, 5); } break; case 33: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 34, 5); } break; case 34: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 35, 5); } break; case 35: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 36, 5); } break; case 36: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 37, 5); } break; case 37: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 38, 5); } break; case 38: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 39, 5); } break; case 39: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 40, 5); } break; case 40: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 41, 5); } break; case 42: /* Element[START_ELEMENT(AppProtocol)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 0, 4, 5); } break; case 43: /* FirstStartTag[START_ELEMENT(ResponseCode)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 3, 44, 45); } break; case 44: /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 4, 47, 17); } break; case 48: /* Element[START_ELEMENT(ResponseCode)] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, 0, 3, 44, 45); } break; case 49: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ switch(state->eventCode) { case 1: return _exiDecodeStartElement(state, se, -1, -1, 50, 49); } break; case 50: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, -1, -1, 50, 49); } break; case 75: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ switch(state->eventCode) { case 1: return _exiDecodeStartElement(state, se, -1, -1, 76, 49); } break; case 76: /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ switch(state->eventCode) { case 0: return _exiDecodeStartElement(state, se, -1, -1, 76, 49); } break; default: return EXI_ERROR_UNEXPECTED_START_ELEMENT; } return EXI_ERROR_UNEXPECTED_START_ELEMENT; } static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, string_ascii_t* namespaceURI, uint32_t* uriID) { uint16_t uriSize, uriCodingLength; int errn; errn = exiGetUriSize(nameTable, runtimeTable, &uriSize); if (errn) { return errn; } /* URI Entries + 1 */ errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); if (errn) { return errn; } errn = decodeNBitUnsignedInteger(stream, uriCodingLength, uriID); if (errn) { return errn; } if (*uriID == 0) { /* uri string value was not found */ /* ==> zero (0) as an n-nit unsigned integer */ /* followed by uri encoded as string */ decodeStringASCII(stream, namespaceURI); /* after encoding string value is added to table */ errn = exiAddUri(nameTable, runtimeTable, namespaceURI->chars); if (errn) { return errn; } *uriID = uriSize; } else { /* uri string value found */ /* ==> value(i+1) is encoded as n-bit unsigned integer */ *uriID = *uriID - 1; } return 0; } static int _exiDecodeLocalName(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, string_ascii_t* localName, uint32_t* localNameID, uint32_t uriID) { uint16_t slen; uint16_t localNameSize; uint16_t localNameCodingLength; int errn = decodeUnsignedInteger16(stream, &slen); if (errn) { return errn; } if (slen > 0) { /* string value was not found in local partition */ /* ==> string literal is encoded as a String */ /* with the length of the string incremented by one */ if (slen-- >= localName->size) { return EXI_ERROR_OUT_OF_BOUNDS; } errn = decodeCharactersASCII(stream, slen, localName->chars); if (errn) { return errn; } /* After encoding the string value, it is added to the string table */ /* partition and assigned the next available compact identifier */ errn = exiAddLocalName(nameTable, runtimeTable, uriID, localName->chars); if (errn) { return errn; } /* TODO UCD Profile */ /* qname = addLocalName(localName, uriID); */ } else { /* string value found in local partition */ /* ==> string value is represented as zero (0) encoded as an */ /* Unsigned Integer */ /* followed by an the compact identifier of the string value as an */ /* n-bit unsigned integer */ /* n is log2 m and m is the number of entries in the string table */ /* partition */ errn = exiGetLocalNameSize(nameTable, runtimeTable, uriID, &localNameSize); if (errn) { return errn; } errn = exiGetCodingLength(localNameSize, &localNameCodingLength); if (errn) { return errn; } errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID); if (errn) { return errn; } } return 0; } static int _exiDecodeQName(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, qname_t* qname) { uint32_t uriID; uint32_t localNameID; /* const char * clocalName; */ /* uri */ int errn =_exiDecodeNamespaceUri(stream, nameTable, runtimeTable, &qname->namespaceURI, &uriID); if (errn) { return errn; } /* localName */ errn = _exiDecodeLocalName(stream, nameTable, runtimeTable, &qname->localName, &localNameID, uriID); if (errn) { return errn; } /* errn = exiGetLocalName(nameTable, runtimeTable, uriID, localNameID, &clocalName); if (errn) { return errn; } strcpy ( qname->localName.chars, clocalName ); */ return 0 ; } int exiappHandDecodeStartElementGeneric(bitstream_t* stream, exi_state_t* state, qname_t* qname) { /* decode qname */ int errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), qname); if (errn) { return errn; } switch (state->grammarStack[state->stackIndex]) { /* $EXI_DECODE_START_ELEMENT_GENERIC$ */ case DOC_CONTENT: /* move on to DocEnd */ state->grammarStack[state->stackIndex] = DOC_END; /* push new ur-type grammar on stack */ return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); break; case UR_TYPE_GRAMMAR_0: /* move on to UR_TYPE_GRAMMAR_1 */ state->grammarStack[state->stackIndex] = UR_TYPE_GRAMMAR_1; /* push new ur-type grammar on stack */ return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); break; case UR_TYPE_GRAMMAR_1: /* remain in UR_TYPE_GRAMMAR_1 */ /* push new ur-type grammar on stack */ return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); break; default: return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; } return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; } int exiappHandDecodeEndElement(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { /* copy IDs */ ee->localPart = state->elementStack[state->stackIndex].localPart; ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI; return exiPopStack(state); } int exiappHandDecodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { int16_t currentID = state->grammarStack[state->stackIndex]; if (currentID < 0) { /* runtime grammars do have IDs smaller than 0 */ /* TODO learn EE event */ return -1; } return exiappHandDecodeEndElement(stream, state, ee); } int exiappHandDecodeCharacters(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { switch (state->grammarStack[state->stackIndex]) { case 101: /* DATETIME */ case 102: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiGMonthDay, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 99: /* DATETIME */ case 100: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiGMonth, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 17: /* NBIT_UNSIGNED_INTEGER */ case 18: /* NBIT_UNSIGNED_INTEGER */ case 135: /* NBIT_UNSIGNED_INTEGER */ case 136: /* NBIT_UNSIGNED_INTEGER */ val->type = NBIT_UNSIGNED_INTEGER; errn = decodeNBitUnsignedInteger(stream, 8, &bits); val->integer.val.uint8 = bits + 0; val->integer.type = UNSIGNED_INTEGER_8; if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 45: /* ENUMERATION */ case 46: /* ENUMERATION */ val->type = ENUMERATION; errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 81: /* BOOLEAN */ case 82: /* BOOLEAN */ val->type = BOOLEAN; errn = decodeBoolean(stream, &val->boolean); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 89: /* DECIMAL */ case 90: /* DECIMAL */ val->type = DECIMAL; errn = decodeDecimal(stream, &val->decimal); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 131: /* DATETIME */ case 132: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiTime, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 105: /* DATETIME */ case 106: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiGYearMonth, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 7: /* STRING */ case 10: /* STRING */ case 53: /* STRING */ case 54: /* STRING */ case 55: /* STRING */ case 56: /* STRING */ case 57: /* STRING */ case 58: /* STRING */ case 61: /* STRING */ case 62: /* STRING */ case 63: /* STRING */ case 64: /* STRING */ case 67: /* STRING */ case 68: /* STRING */ case 69: /* STRING */ case 70: /* STRING */ case 71: /* STRING */ case 72: /* STRING */ case 73: /* STRING */ case 74: /* STRING */ case 77: /* STRING */ case 78: /* STRING */ case 93: /* STRING */ case 94: /* STRING */ case 113: /* STRING */ case 114: /* STRING */ case 123: /* STRING */ case 124: /* STRING */ case 129: /* STRING */ case 130: /* STRING */ case 133: /* STRING */ case 134: /* STRING */ case 142: /* STRING */ case 143: /* STRING */ val->type = STRING; errn = decodeStringValue(stream, &val->string); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 50: /* STRING */ case 49: /* STRING */ val->type = STRING; errn = decodeStringValue(stream, &val->string); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 50; return 0; case 103: /* DATETIME */ case 104: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiGYear, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 51: /* LIST */ case 52: /* LIST */ case 59: /* LIST */ case 60: /* LIST */ case 65: /* LIST */ case 66: /* LIST */ val->type = LIST; /* List not supported properly yet */ val->list.type = STRING; errn = decodeUnsignedInteger16(stream, &val->list.len); if (errn) { return errn; } errn = _decodeListValues(stream, val->list.type, val->list.len); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 76: /* STRING */ case 75: /* STRING */ val->type = STRING; errn = decodeStringValue(stream, &val->string); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 76; return 0; case 97: /* DATETIME */ case 98: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiGDay, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 87: /* DATETIME */ case 88: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiDateTime, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 20: /* NBIT_UNSIGNED_INTEGER */ case 21: /* NBIT_UNSIGNED_INTEGER */ val->type = NBIT_UNSIGNED_INTEGER; errn = decodeNBitUnsignedInteger(stream, 5, &bits); val->integer.val.uint8 = bits + 1; val->integer.type = UNSIGNED_INTEGER_8; if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 109: /* INTEGER */ case 110: /* INTEGER */ case 111: /* INTEGER */ case 112: /* INTEGER */ case 115: /* INTEGER */ case 116: /* INTEGER */ case 117: /* INTEGER */ case 118: /* INTEGER */ case 121: /* INTEGER */ case 122: /* INTEGER */ case 127: /* INTEGER */ case 128: /* INTEGER */ val->type = INTEGER; errn = decodeInteger(stream, &val->integer); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 79: /* BINARY_BASE64 */ case 80: /* BINARY_BASE64 */ val->type = BINARY_BASE64; errn = decodeBinary(stream, &val->binary); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 83: /* NBIT_UNSIGNED_INTEGER */ case 84: /* NBIT_UNSIGNED_INTEGER */ val->type = NBIT_UNSIGNED_INTEGER; errn = decodeNBitUnsignedInteger(stream, 8, &bits); val->integer.val.int8 = bits + -128; val->integer.type = INTEGER_8; if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 85: /* DATETIME */ case 86: /* DATETIME */ val->type = DATETIME; errn = decodeDateTime(stream, exiDate, &val->datetime); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 12: /* UNSIGNED_INTEGER */ case 13: /* UNSIGNED_INTEGER */ case 15: /* UNSIGNED_INTEGER */ case 119: /* UNSIGNED_INTEGER */ case 120: /* UNSIGNED_INTEGER */ case 125: /* UNSIGNED_INTEGER */ case 126: /* UNSIGNED_INTEGER */ case 137: /* UNSIGNED_INTEGER */ case 138: /* UNSIGNED_INTEGER */ case 139: /* UNSIGNED_INTEGER */ case 140: /* UNSIGNED_INTEGER */ case 141: /* UNSIGNED_INTEGER */ val->type = UNSIGNED_INTEGER; errn = decodeUnsignedInteger(stream, &val->integer); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 91: /* FLOAT */ case 92: /* FLOAT */ case 95: /* FLOAT */ case 96: /* FLOAT */ val->type = FLOAT; errn = decodeFloat(stream, &val->float_me); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; case 107: /* BINARY_HEX */ case 108: /* BINARY_HEX */ val->type = BINARY_HEX; errn = decodeBinary(stream, &val->binary); if (errn) { return errn; } /* move on */ state->grammarStack[state->stackIndex] = 8; return 0; default: return EXI_ERROR_UNEXPECTED_CHARACTERS; } return 0; } int exiappHandDecodeCharactersGeneric(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { return exiappHandDecodeCharacters(stream, state, val); } int exiappHandDecodeCharactersGenericUndeclared(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { int errn = 0; if (state->grammarStack[state->stackIndex] < 0) { /* runtime grammars do have IDs smaller than 0 */ /* TODO learn CH event */ return -1; } /* update current rule --> element content rule (if not already) */ errn = exiMoveToElementContentRule(state); if (errn) { return errn; } /* read content value */ /* STRING */ val->type = STRING; errn = decodeStringValue(stream, &val->string); return errn; } int exiappHandDecodeAttribute(bitstream_t* stream, exi_state_t* state, eqname_t* at, exi_value_t* val) { switch (state->grammarStack[state->stackIndex]) { default: return EXI_ERROR_UNEXPECTED_ATTRIBUTE; } return EXI_ERROR_UNEXPECTED_ATTRIBUTE; } int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { errn = decodeBoolean(stream, &val->boolean); if (errn >= 0 && val->boolean) { /* handle xsi:nil == true */ errn = exiHandleXsiNilTrue(state); } return errn; } int exiappHandDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { uint32_t uriID; uint32_t localNameID; /* uri */ errn =_exiDecodeNamespaceUri(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), NULL, &uriID); if (errn) { return errn; } /* localName */ errn = _exiDecodeLocalName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), NULL, &localNameID, uriID); if (errn) { return errn; } val->eqname.namespaceURI = uriID; val->eqname.localPart = localNameID; /* handle xsi type cast */ errn = exiHandleXsiType(state, &val->eqname); return errn; } int exiappHandDecodeAttributeGenericUndeclared(bitstream_t* stream, exi_state_t* state, qname_t* at, exi_value_t* val) { int errn; int16_t currentID = state->grammarStack[state->stackIndex]; if (currentID < 0) { /* TODO runtime elements */ return -1; } else { /* decode qname */ errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), at); if (errn) { return errn; } } if (currentID < 0) { /* TODO learn AT event */ return -1; } /* decode attribute value */ val->type = STRING; errn = decodeStringValue(stream, &val->string); /* we do not move forward in grammars */ return errn; } #endif