appHandEXIDecoder.c 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219
  1. /*
  2. * Copyright (C) 2007-2012 Siemens AG
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Lesser General Public License as published
  6. * by the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU Lesser General Public License for more details.
  13. * GNU Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /*******************************************************************
  19. *
  20. * @author Daniel.Peintner.EXT@siemens.com
  21. * @version 0.7
  22. * @contact Joerg.Heuer@siemens.com
  23. *
  24. * <p>Code generated by EXIdizer.com</p>
  25. ********************************************************************/
  26. #ifndef EXI_appHand_DECODER_C
  27. #define EXI_appHand_DECODER_C
  28. #include "appHandEXIDecoder.h"
  29. #include "EXITypes.h"
  30. #include "EXIOptions.h"
  31. #include "BitInputStream.h"
  32. #include "DecoderChannel.h"
  33. #include "CoderChannel.h"
  34. #include "StringTable.h"
  35. #include "appHandNameTableEntries.h"
  36. #include "MethodsBag.h"
  37. #include "appHandEXICoder.h"
  38. #include "EXIHeaderDecoder.h"
  39. #include "ErrorCodes.h"
  40. #include "appHandQNames.h"
  41. #include "appHandQNameDefines.h"
  42. /* local variables */
  43. static uint32_t xsi;
  44. static uint32_t bits;
  45. static int errn;
  46. static exi_event_t currEvent;
  47. #define URI_CODEPOINTS_SIZE 35
  48. #define LOCALNAME_CODEPOINTS_SIZE 25
  49. uint32_t codepointsUri[URI_CODEPOINTS_SIZE];
  50. uint32_t codepointsLocalName[LOCALNAME_CODEPOINTS_SIZE];
  51. /*static exi_string_ucs_t stringUri = {URI_CODEPOINTS_SIZE, codepointsUri, 0};*/
  52. /*static exi_name_entry_t uri = {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}};*/
  53. /*static exi_name_entry_t localName = {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}};*/
  54. static exi_qname_t _qname = {
  55. {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}},
  56. {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}}
  57. };
  58. static int _decodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) {
  59. int errn;
  60. uint32_t val;
  61. errn = decodeNBitUnsignedInteger(stream, nbits, &val);
  62. if(errn) {
  63. return errn;
  64. }
  65. /* TODO map integer value more fine-grained */
  66. iv->type = EXI_INTEGER_32;
  67. iv->val.int32 = val + lowerBound;
  68. return errn;
  69. }
  70. static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state,
  71. exi_event_t* nextEvent) {
  72. uint32_t eventCode2 = 0;
  73. int16_t ruleID = state->grammarStack[state->stackIndex];
  74. switch (ruleID) {
  75. case 7:
  76. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  77. case 11:
  78. /* FirstStartTag[CHARACTERS[FLOAT]] */
  79. case 10:
  80. /* FirstStartTag[CHARACTERS[STRING]] */
  81. case 18:
  82. /* FirstStartTag[CHARACTERS[STRING]] */
  83. case 20:
  84. /* FirstStartTag[CHARACTERS[STRING]] */
  85. case 21:
  86. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  87. case 25:
  88. /* FirstStartTag[CHARACTERS[LIST]] */
  89. case 24:
  90. /* FirstStartTag[CHARACTERS[STRING]] */
  91. case 29:
  92. /* FirstStartTag[CHARACTERS[LIST]] */
  93. case 36:
  94. /* FirstStartTag[CHARACTERS[STRING]] */
  95. case 48:
  96. /* FirstStartTag[CHARACTERS[STRING]] */
  97. case 49:
  98. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  99. case 53:
  100. /* FirstStartTag[CHARACTERS[DECIMAL]] */
  101. case 55:
  102. /* FirstStartTag[CHARACTERS[STRING]] */
  103. case 57:
  104. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  105. case 58:
  106. /* FirstStartTag[CHARACTERS[STRING]] */
  107. case 45:
  108. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  109. case 64:
  110. /* FirstStartTag[CHARACTERS[DATETIME]] */
  111. case 16:
  112. /* FirstStartTag[START_ELEMENT(ResponseCode)] */
  113. case 68:
  114. /* FirstStartTag[CHARACTERS[INTEGER]] */
  115. case 46:
  116. /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  117. case 69:
  118. /* FirstStartTag[CHARACTERS[INTEGER]] */
  119. case 74:
  120. /* FirstStartTag[CHARACTERS[DATETIME]] */
  121. case 15:
  122. /* FirstStartTag[START_ELEMENT(AppProtocol)] */
  123. case 76:
  124. /* FirstStartTag[CHARACTERS[INTEGER]] */
  125. case 78:
  126. /* FirstStartTag[CHARACTERS[STRING]] */
  127. case 79:
  128. /* FirstStartTag[CHARACTERS[STRING]] */
  129. case 80:
  130. /* FirstStartTag[CHARACTERS[BOOLEAN]] */
  131. case 35:
  132. /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  133. case 44:
  134. /* FirstStartTag[CHARACTERS[ENUMERATION]] */
  135. case 86:
  136. /* FirstStartTag[CHARACTERS[STRING]] */
  137. case 89:
  138. /* FirstStartTag[CHARACTERS[INTEGER]] */
  139. case 93:
  140. /* FirstStartTag[CHARACTERS[INTEGER]] */
  141. case 98:
  142. /* FirstStartTag[CHARACTERS[STRING]] */
  143. case 99:
  144. /* FirstStartTag[CHARACTERS[DATETIME]] */
  145. case 101:
  146. /* FirstStartTag[CHARACTERS[STRING]] */
  147. case 100:
  148. /* FirstStartTag[CHARACTERS[DATETIME]] */
  149. case 102:
  150. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  151. case 104:
  152. /* FirstStartTag[CHARACTERS[DATETIME]] */
  153. case 106:
  154. /* FirstStartTag[CHARACTERS[STRING]] */
  155. case 111:
  156. /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
  157. case 43:
  158. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  159. case 112:
  160. /* FirstStartTag[CHARACTERS[DATETIME]] */
  161. case 122:
  162. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  163. case 130:
  164. /* FirstStartTag[CHARACTERS[FLOAT]] */
  165. case 132:
  166. /* FirstStartTag[CHARACTERS[BINARY_HEX]] */
  167. case 133:
  168. /* FirstStartTag[CHARACTERS[DATETIME]] */
  169. case 134:
  170. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  171. case 135:
  172. /* FirstStartTag[CHARACTERS[DATETIME]] */
  173. case 5:
  174. /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
  175. case 138:
  176. /* FirstStartTag[CHARACTERS[INTEGER]] */
  177. case 141:
  178. /* FirstStartTag[CHARACTERS[STRING]] */
  179. case 142:
  180. /* FirstStartTag[CHARACTERS[STRING]] */
  181. case 143:
  182. /* FirstStartTag[CHARACTERS[STRING]] */
  183. case 144:
  184. /* FirstStartTag[CHARACTERS[LIST]] */
  185. errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2);
  186. switch (eventCode2) {
  187. case 0:
  188. *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
  189. return errn;
  190. case 1:
  191. *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE;
  192. return errn;
  193. case 2:
  194. *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL;
  195. return errn;
  196. case 3:
  197. *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
  198. return errn;
  199. case 4:
  200. *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE;
  201. errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode);
  202. state->eventCode -= 1;
  203. return errn;
  204. case 5:
  205. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  206. return errn;
  207. case 6:
  208. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  209. return errn;
  210. }
  211. break;
  212. case 22:
  213. /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  214. case 50:
  215. /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  216. errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2);
  217. switch (eventCode2) {
  218. case 0:
  219. *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE;
  220. return errn;
  221. case 1:
  222. *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL;
  223. return errn;
  224. case 2:
  225. *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
  226. return errn;
  227. case 3:
  228. *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE;
  229. errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode);
  230. state->eventCode -= 1;
  231. return errn;
  232. case 4:
  233. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  234. return errn;
  235. case 5:
  236. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  237. return errn;
  238. }
  239. break;
  240. case 1:
  241. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  242. case 12:
  243. /* Element[CHARACTERS[STRING]] */
  244. case 17:
  245. /* Element[CHARACTERS[INTEGER]] */
  246. case 19:
  247. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  248. case 28:
  249. /* Element[CHARACTERS[BINARY_HEX]] */
  250. case 30:
  251. /* Element[START_ELEMENT(ProtocolNamespace)] */
  252. case 32:
  253. /* Element[CHARACTERS[STRING]] */
  254. case 33:
  255. /* Element[START_ELEMENT(VersionNumberMinor)] */
  256. case 37:
  257. /* Element[CHARACTERS[BOOLEAN]] */
  258. case 38:
  259. /* Element[CHARACTERS[STRING]] */
  260. case 40:
  261. /* Element[CHARACTERS[STRING]] */
  262. case 41:
  263. /* Element[CHARACTERS[STRING]] */
  264. case 47:
  265. /* Element[CHARACTERS[INTEGER]] */
  266. case 52:
  267. /* Element[CHARACTERS[BINARY_BASE64]] */
  268. case 54:
  269. /* Element[CHARACTERS[STRING]] */
  270. case 56:
  271. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  272. case 59:
  273. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  274. case 31:
  275. /* Element[START_ELEMENT(VersionNumberMajor)] */
  276. case 62:
  277. /* Element[CHARACTERS[FLOAT]] */
  278. case 63:
  279. /* Element[CHARACTERS[DATETIME]] */
  280. case 65:
  281. /* Element[CHARACTERS[LIST]] */
  282. case 67:
  283. /* Element[CHARACTERS[STRING]] */
  284. case 70:
  285. /* Element[CHARACTERS[STRING]] */
  286. case 71:
  287. /* Element[CHARACTERS[ENUMERATION]] */
  288. case 75:
  289. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  290. case 77:
  291. /* Element[CHARACTERS[STRING]] */
  292. case 81:
  293. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  294. case 82:
  295. /* Element[CHARACTERS[DATETIME]] */
  296. case 83:
  297. /* Element[CHARACTERS[INTEGER]] */
  298. case 84:
  299. /* Element[CHARACTERS[DATETIME]] */
  300. case 85:
  301. /* Element[CHARACTERS[STRING]] */
  302. case 87:
  303. /* Element[CHARACTERS[STRING]] */
  304. case 88:
  305. /* Element[CHARACTERS[DATETIME]] */
  306. case 34:
  307. /* Element[START_ELEMENT(SchemaID)] */
  308. case 91:
  309. /* Element[CHARACTERS[INTEGER]] */
  310. case 94:
  311. /* Element[START_ELEMENT(AppProtocol)] */
  312. case 95:
  313. /* Element[CHARACTERS[LIST]] */
  314. case 96:
  315. /* Element[CHARACTERS[STRING]] */
  316. case 103:
  317. /* Element[CHARACTERS[FLOAT]] */
  318. case 107:
  319. /* Element[CHARACTERS[INTEGER]] */
  320. case 108:
  321. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  322. case 114:
  323. /* Element[CHARACTERS[STRING]] */
  324. case 116:
  325. /* Element[CHARACTERS[DECIMAL]] */
  326. case 117:
  327. /* Element[START_ELEMENT(ResponseCode)] */
  328. case 118:
  329. /* Element[CHARACTERS[STRING]] */
  330. case 119:
  331. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  332. case 120:
  333. /* Element[CHARACTERS[STRING]] */
  334. case 121:
  335. /* Element[CHARACTERS[DATETIME]] */
  336. case 123:
  337. /* Element[CHARACTERS[DATETIME]] */
  338. case 126:
  339. /* Element[CHARACTERS[DATETIME]] */
  340. case 90:
  341. /* Element[START_ELEMENT(Priority)] */
  342. case 131:
  343. /* Element[CHARACTERS[STRING]] */
  344. case 136:
  345. /* Element[CHARACTERS[INTEGER]] */
  346. case 137:
  347. /* Element[CHARACTERS[STRING]] */
  348. case 140:
  349. /* Element[CHARACTERS[LIST]] */
  350. case 139:
  351. /* Element[CHARACTERS[DATETIME]] */
  352. case 145:
  353. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  354. errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2);
  355. switch (eventCode2) {
  356. case 0:
  357. *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
  358. return errn;
  359. case 1:
  360. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  361. return errn;
  362. case 2:
  363. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  364. return errn;
  365. }
  366. break;
  367. case 3:
  368. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  369. case 8:
  370. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  371. case 2:
  372. /* Element[END_ELEMENT] */
  373. case 26:
  374. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  375. case 39:
  376. /* Element[END_ELEMENT] */
  377. case 60:
  378. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  379. case 72:
  380. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  381. case 23:
  382. /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  383. case 9:
  384. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  385. case 97:
  386. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  387. case 109:
  388. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  389. case 92:
  390. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  391. case 115:
  392. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  393. case 124:
  394. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  395. case 27:
  396. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  397. case 51:
  398. /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  399. case 128:
  400. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  401. case 66:
  402. /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
  403. case 110:
  404. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  405. case 61:
  406. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  407. case 127:
  408. /* Element[END_ELEMENT] */
  409. case 113:
  410. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  411. case 4:
  412. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  413. case 125:
  414. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  415. case 129:
  416. /* Element[END_ELEMENT] */
  417. case 73:
  418. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  419. errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2);
  420. switch (eventCode2) {
  421. case 0:
  422. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  423. return errn;
  424. case 1:
  425. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  426. return errn;
  427. }
  428. break;
  429. default:
  430. if (ruleID < 0) {
  431. /* built-in element grammar */
  432. if ( exi_appHand_IsStartContent(ruleID) ) {
  433. /* TODO generate 2nd level productions */
  434. /* StartTagContent grammar */
  435. errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2);
  436. if(errn) {
  437. return errn;
  438. }
  439. switch(eventCode2) {
  440. case 0:
  441. /* 0: EE */
  442. *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
  443. break;
  444. case 1:
  445. /* 1: AT(*) */
  446. *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
  447. break;
  448. case 2:
  449. /* 2: SE(*) */
  450. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  451. break;
  452. case 3:
  453. /* 3: CH */
  454. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  455. break;
  456. default:
  457. return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
  458. break;
  459. }
  460. return errn;
  461. } else {
  462. /* TODO generate 2nd level productions */
  463. /* ElementContent grammar */
  464. errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2);
  465. if(errn) {
  466. return errn;
  467. }
  468. switch(eventCode2) {
  469. case 0:
  470. /* 0: SE(*) */
  471. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
  472. break;
  473. case 1:
  474. /* 1: CH */
  475. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
  476. break;
  477. default:
  478. return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
  479. break;
  480. }
  481. }
  482. } else {
  483. *nextEvent = EXI_EVENT_ERROR;
  484. return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
  485. }
  486. break;
  487. }
  488. return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
  489. }
  490. static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_state_t* state,
  491. exi_name_entry_t* uri) {
  492. /* exi_string_ascii_t* namespaceURI, uint32_t* uriID) {*/
  493. uint16_t uriSize, uriCodingLength;
  494. uint32_t uriID;
  495. int errn;
  496. errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize);
  497. if (errn) {
  498. return errn;
  499. }
  500. /* URI Entries + 1 */
  501. errn = exiGetCodingLength(uriSize + 1, &uriCodingLength);
  502. if (errn) {
  503. return errn;
  504. }
  505. errn = decodeNBitUnsignedInteger(stream, uriCodingLength, &uriID);
  506. if (errn) {
  507. return errn;
  508. }
  509. if (uriID == 0) {
  510. /* uri string value was not found */
  511. /* ==> zero (0) as an n-nit unsigned integer */
  512. /* followed by uri encoded as string */
  513. uri->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID;
  514. errn = decodeString(stream, &uri->str);
  515. if (errn) {
  516. return errn;
  517. }
  518. /* after encoding string value is added to table */
  519. errn = exiAddUri(&state->nameTablePrepopulated, &state->nameTableRuntime); /*, namespaceURI->chars); */
  520. if (errn) {
  521. return errn;
  522. }
  523. uri->id = uriSize;
  524. /* uriID = uriSize; */
  525. } else {
  526. /* uri string value found */
  527. /* ==> value(i+1) is encoded as n-bit unsigned integer */
  528. uri->type = EXI_NAME_ENTRY_TYPE_ID;
  529. uri->id = (uint16_t)(uriID - 1);
  530. /* *uriID = *uriID - 1; */
  531. }
  532. return 0;
  533. }
  534. static int _exiDecodeLocalName(bitstream_t* stream, exi_state_t* state,
  535. uint16_t uriID, exi_name_entry_t* localName) {
  536. /* exi_string_ascii_t* localName,
  537. uint32_t* localNameID, uint32_t uriID) { */
  538. uint32_t localNameID;
  539. uint16_t slen;
  540. uint16_t localNameSize;
  541. uint16_t localNameCodingLength;
  542. int errn = decodeUnsignedInteger16(stream, &slen);
  543. if (errn) {
  544. return errn;
  545. }
  546. if (slen > 0) {
  547. /* string value was not found in local partition */
  548. /* ==> string literal is encoded as a String */
  549. /* with the length of the string incremented by one */
  550. localName->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID;
  551. if (slen-- >= (localName->str.size) ) {
  552. return EXI_ERROR_OUT_OF_BOUNDS;
  553. }
  554. localName->str.len = slen;
  555. errn = decodeCharacters(stream, slen, localName->str.codepoints);
  556. /*if (slen-- >= localName->size) {
  557. return EXI_ERROR_OUT_OF_BOUNDS;
  558. }
  559. errn = decodeCharactersASCII(stream, slen, localName->chars); */
  560. if (errn) {
  561. return errn;
  562. }
  563. /* After encoding the string value, it is added to the string table */
  564. /* partition and assigned the next available compact identifier */
  565. errn = exiAddLocalName(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localName->id); /* uriID); *//*, localName->chars); */
  566. /*if (errn) {
  567. return errn;
  568. }*/
  569. /* TODO UCD Profile */
  570. /* qname = addLocalName(localName, uriID); */
  571. } else {
  572. /* string value found in local partition */
  573. /* ==> string value is represented as zero (0) encoded as an */
  574. /* Unsigned Integer */
  575. /* followed by an the compact identifier of the string value as an */
  576. /* n-bit unsigned integer */
  577. /* n is log2 m and m is the number of entries in the string table */
  578. /* partition */
  579. localName->type = EXI_NAME_ENTRY_TYPE_ID;
  580. errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); /* uriID, &localNameSize); */
  581. if (errn) {
  582. return errn;
  583. }
  584. errn = exiGetCodingLength(localNameSize, &localNameCodingLength);
  585. if (errn) {
  586. return errn;
  587. }
  588. errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, &localNameID); /* localNameID);*/
  589. localName->id = (uint16_t)(localNameID);
  590. /*if (errn) {
  591. return errn;
  592. }*/
  593. }
  594. return errn;
  595. }
  596. static int _exiDecodeQName(bitstream_t* stream, exi_state_t* state,
  597. uint16_t* qnameID, exi_qname_t* qname) {
  598. /*uint32_t uriID;
  599. uint32_t localNameID;*/
  600. /* const char * clocalName; */
  601. /* uri */
  602. int errn =_exiDecodeNamespaceUri(stream, state, &qname->uri); /* &qname->namespaceURI, &uriID); */
  603. if (errn) {
  604. return errn;
  605. }
  606. /* localName */
  607. errn = _exiDecodeLocalName(stream, state, qname->uri.id, &qname->localName); /* &qname->localName, &localNameID, uriID); */
  608. if (errn) {
  609. return errn;
  610. }
  611. /*
  612. errn = exiGetLocalName(nameTable, runtimeTable, uriID, localNameID, &clocalName);
  613. if (errn) {
  614. return errn;
  615. }
  616. strcpy ( qname->localName.chars, clocalName );
  617. */
  618. if (_qname.localName.type == EXI_NAME_ENTRY_TYPE_STRING_AND_ID) {
  619. errn = exiappHandAddEQName(state, qnameID, qname->uri.id, qname->localName.id);
  620. } else {
  621. /* IDs known --> retrieve qnameID */
  622. errn = exiappHandGetQNameID(state, qname->uri.id, qname->localName.id, qnameID);
  623. }
  624. return errn;
  625. }
  626. static int _exiDecodeStartElement(exi_state_t* state, uint16_t qnameID,
  627. uint16_t stackId, uint16_t newState) {
  628. /*uint16_t ns, uint16_t ln, uint16_t qn, */
  629. /*se->namespaceURI = ns;
  630. se->localPart = ln;
  631. se->qname = qn;*/
  632. /* move on */
  633. state->grammarStack[state->stackIndex] = stackId;
  634. /* push element on stack */
  635. return exi_appHand_PushStack(state, newState, qnameID); /* se);*/
  636. }
  637. int exiappHandGetLastQName(exi_qname_t** qname) {
  638. *qname = &_qname;
  639. return 0;
  640. }
  641. int exiappHandDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) {
  642. uint32_t uint32;
  643. val->type = lt.type;
  644. switch(lt.type) {
  645. case EXI_DATATYPE_BINARY_BASE64:
  646. case EXI_DATATYPE_BINARY_HEX:
  647. errn = decodeBinary(stream, &val->binary);
  648. break;
  649. case EXI_DATATYPE_BOOLEAN:
  650. errn = decodeBoolean(stream, &val->boolean);
  651. break;
  652. case EXI_DATATYPE_BOOLEAN_FACET:
  653. errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
  654. val->boolean = uint32 > 1;
  655. break;
  656. case EXI_DATATYPE_DECIMAL:
  657. errn = decodeDecimal(stream, &val->decimal);
  658. break;
  659. case EXI_DATATYPE_FLOAT:
  660. errn = decodeFloat(stream, &val->float_me);
  661. break;
  662. case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER:
  663. errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE;
  664. break;
  665. case EXI_DATATYPE_UNSIGNED_INTEGER:
  666. errn = decodeUnsignedInteger(stream, &val->integer);
  667. break;
  668. case EXI_DATATYPE_INTEGER:
  669. errn = decodeInteger(stream, &val->integer);
  670. break;
  671. case EXI_DATATYPE_DATETIME:
  672. errn = decodeDateTime(stream,lt.datetimeType, &val->datetime);
  673. break;
  674. case EXI_DATATYPE_STRING:
  675. errn = decodeStringValue(stream, state, qnameID, &val->str);
  676. break;
  677. default:
  678. return EXI_UNSUPPORTED_LIST_VALUE_TYPE;
  679. }
  680. return errn;
  681. }
  682. int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state,
  683. exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable) {
  684. #if EXI_appHandVALUE_PARTITION_CAPACITY != 0
  685. #if EXI_appHandVALUE_MAX_LENGTH != 0
  686. int i;
  687. #endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */
  688. #endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */
  689. /* init grammar state */
  690. state->stackIndex = 0;
  691. state->grammarStack[0] = DOCUMENT;
  692. /* name table */
  693. state->nameTablePrepopulated = exiappHandNameTablePrepopulated;
  694. state->nameTableRuntime = runtimeTable;
  695. /* next qname ID */
  696. state->nextQNameID = EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES;
  697. /* string table */
  698. state->stringTable = stringTable;
  699. state->stringTable.numberOfGlobalStrings = 0;
  700. #if EXI_appHandVALUE_PARTITION_CAPACITY != 0
  701. #if EXI_appHandVALUE_MAX_LENGTH != 0
  702. for(i=0; i<(state->stringTable.sizeLocalStrings); i++) {
  703. state->stringTable.numberOfLocalStrings[i] = 0;
  704. }
  705. #endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */
  706. #endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */
  707. /* runtime grammars */
  708. state->numberOfRuntimeGrammars = 0;
  709. /* Avoid warning: Unused declaration of variable 'name' */
  710. xsi = 0;
  711. bits = 0;
  712. /* decode header */
  713. return readEXIHeader(stream);
  714. }
  715. int exiappHandDecodeNextEvent(bitstream_t* stream, exi_state_t* state,
  716. exi_event_t* nextEvent) {
  717. uint16_t codingLength;
  718. uint16_t numberOfProductions;
  719. uint32_t eventCode1;
  720. int16_t ruleID = state->grammarStack[state->stackIndex];
  721. state->eventCode = 0;
  722. errn = 0;
  723. switch (ruleID) {
  724. case 3:
  725. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  726. case 8:
  727. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  728. case 26:
  729. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  730. case 60:
  731. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  732. case 72:
  733. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  734. case 9:
  735. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  736. case 97:
  737. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  738. case 109:
  739. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  740. case 92:
  741. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  742. case 115:
  743. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  744. case 124:
  745. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  746. case 27:
  747. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  748. case 128:
  749. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  750. case 66:
  751. /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
  752. case 110:
  753. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  754. case 61:
  755. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  756. case 113:
  757. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  758. case 4:
  759. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  760. case 125:
  761. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  762. case 73:
  763. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  764. errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
  765. switch (state->eventCode) {
  766. case 0:
  767. *nextEvent = EXI_EVENT_START_ELEMENT;
  768. break;
  769. case 1:
  770. *nextEvent = EXI_EVENT_END_ELEMENT;
  771. break;
  772. case 2:
  773. /* 2nd level events */
  774. errn = exiDecodeNext2Event(stream, state, nextEvent);
  775. break;
  776. default:
  777. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  778. break;
  779. }
  780. break;
  781. case 30:
  782. /* Element[START_ELEMENT(ProtocolNamespace)] */
  783. case 33:
  784. /* Element[START_ELEMENT(VersionNumberMinor)] */
  785. case 31:
  786. /* Element[START_ELEMENT(VersionNumberMajor)] */
  787. case 16:
  788. /* FirstStartTag[START_ELEMENT(ResponseCode)] */
  789. case 15:
  790. /* FirstStartTag[START_ELEMENT(AppProtocol)] */
  791. case 34:
  792. /* Element[START_ELEMENT(SchemaID)] */
  793. case 94:
  794. /* Element[START_ELEMENT(AppProtocol)] */
  795. case 117:
  796. /* Element[START_ELEMENT(ResponseCode)] */
  797. case 90:
  798. /* Element[START_ELEMENT(Priority)] */
  799. case 5:
  800. /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
  801. errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
  802. switch (state->eventCode) {
  803. case 0:
  804. *nextEvent = EXI_EVENT_START_ELEMENT;
  805. break;
  806. case 1:
  807. /* 2nd level events */
  808. errn = exiDecodeNext2Event(stream, state, nextEvent);
  809. break;
  810. default:
  811. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  812. break;
  813. }
  814. break;
  815. case 0:
  816. /* Document[START_DOCUMENT] */
  817. case 105:
  818. /* Fragment[START_DOCUMENT] */
  819. *nextEvent = EXI_EVENT_START_DOCUMENT;
  820. break;
  821. case 14:
  822. /* DocEnd[END_DOCUMENT] */
  823. *nextEvent = EXI_EVENT_END_DOCUMENT;
  824. break;
  825. case 42:
  826. /* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
  827. errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode);
  828. switch (state->eventCode) {
  829. case 0:
  830. case 1:
  831. case 2:
  832. case 3:
  833. case 4:
  834. case 5:
  835. case 6:
  836. case 7:
  837. case 8:
  838. *nextEvent = EXI_EVENT_START_ELEMENT;
  839. break;
  840. case 9:
  841. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
  842. break;
  843. case 10:
  844. *nextEvent = EXI_EVENT_END_DOCUMENT;
  845. break;
  846. default:
  847. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  848. break;
  849. }
  850. break;
  851. case 22:
  852. /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  853. case 50:
  854. /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  855. errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode);
  856. switch (state->eventCode) {
  857. case 0:
  858. *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC;
  859. break;
  860. case 1:
  861. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
  862. break;
  863. case 2:
  864. *nextEvent = EXI_EVENT_END_ELEMENT;
  865. break;
  866. case 3:
  867. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC;
  868. break;
  869. case 4:
  870. /* 2nd level events */
  871. errn = exiDecodeNext2Event(stream, state, nextEvent);
  872. break;
  873. default:
  874. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  875. break;
  876. }
  877. break;
  878. case 1:
  879. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  880. case 7:
  881. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  882. case 11:
  883. /* FirstStartTag[CHARACTERS[FLOAT]] */
  884. case 10:
  885. /* FirstStartTag[CHARACTERS[STRING]] */
  886. case 12:
  887. /* Element[CHARACTERS[STRING]] */
  888. case 17:
  889. /* Element[CHARACTERS[INTEGER]] */
  890. case 18:
  891. /* FirstStartTag[CHARACTERS[STRING]] */
  892. case 19:
  893. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  894. case 20:
  895. /* FirstStartTag[CHARACTERS[STRING]] */
  896. case 21:
  897. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  898. case 25:
  899. /* FirstStartTag[CHARACTERS[LIST]] */
  900. case 24:
  901. /* FirstStartTag[CHARACTERS[STRING]] */
  902. case 29:
  903. /* FirstStartTag[CHARACTERS[LIST]] */
  904. case 28:
  905. /* Element[CHARACTERS[BINARY_HEX]] */
  906. case 32:
  907. /* Element[CHARACTERS[STRING]] */
  908. case 37:
  909. /* Element[CHARACTERS[BOOLEAN]] */
  910. case 36:
  911. /* FirstStartTag[CHARACTERS[STRING]] */
  912. case 38:
  913. /* Element[CHARACTERS[STRING]] */
  914. case 40:
  915. /* Element[CHARACTERS[STRING]] */
  916. case 41:
  917. /* Element[CHARACTERS[STRING]] */
  918. case 48:
  919. /* FirstStartTag[CHARACTERS[STRING]] */
  920. case 47:
  921. /* Element[CHARACTERS[INTEGER]] */
  922. case 49:
  923. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  924. case 52:
  925. /* Element[CHARACTERS[BINARY_BASE64]] */
  926. case 53:
  927. /* FirstStartTag[CHARACTERS[DECIMAL]] */
  928. case 54:
  929. /* Element[CHARACTERS[STRING]] */
  930. case 55:
  931. /* FirstStartTag[CHARACTERS[STRING]] */
  932. case 56:
  933. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  934. case 57:
  935. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  936. case 58:
  937. /* FirstStartTag[CHARACTERS[STRING]] */
  938. case 59:
  939. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  940. case 45:
  941. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  942. case 62:
  943. /* Element[CHARACTERS[FLOAT]] */
  944. case 63:
  945. /* Element[CHARACTERS[DATETIME]] */
  946. case 64:
  947. /* FirstStartTag[CHARACTERS[DATETIME]] */
  948. case 65:
  949. /* Element[CHARACTERS[LIST]] */
  950. case 67:
  951. /* Element[CHARACTERS[STRING]] */
  952. case 68:
  953. /* FirstStartTag[CHARACTERS[INTEGER]] */
  954. case 46:
  955. /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  956. case 69:
  957. /* FirstStartTag[CHARACTERS[INTEGER]] */
  958. case 70:
  959. /* Element[CHARACTERS[STRING]] */
  960. case 71:
  961. /* Element[CHARACTERS[ENUMERATION]] */
  962. case 74:
  963. /* FirstStartTag[CHARACTERS[DATETIME]] */
  964. case 75:
  965. /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  966. case 76:
  967. /* FirstStartTag[CHARACTERS[INTEGER]] */
  968. case 77:
  969. /* Element[CHARACTERS[STRING]] */
  970. case 78:
  971. /* FirstStartTag[CHARACTERS[STRING]] */
  972. case 79:
  973. /* FirstStartTag[CHARACTERS[STRING]] */
  974. case 80:
  975. /* FirstStartTag[CHARACTERS[BOOLEAN]] */
  976. case 81:
  977. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  978. case 35:
  979. /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  980. case 82:
  981. /* Element[CHARACTERS[DATETIME]] */
  982. case 44:
  983. /* FirstStartTag[CHARACTERS[ENUMERATION]] */
  984. case 83:
  985. /* Element[CHARACTERS[INTEGER]] */
  986. case 84:
  987. /* Element[CHARACTERS[DATETIME]] */
  988. case 85:
  989. /* Element[CHARACTERS[STRING]] */
  990. case 86:
  991. /* FirstStartTag[CHARACTERS[STRING]] */
  992. case 87:
  993. /* Element[CHARACTERS[STRING]] */
  994. case 88:
  995. /* Element[CHARACTERS[DATETIME]] */
  996. case 89:
  997. /* FirstStartTag[CHARACTERS[INTEGER]] */
  998. case 91:
  999. /* Element[CHARACTERS[INTEGER]] */
  1000. case 93:
  1001. /* FirstStartTag[CHARACTERS[INTEGER]] */
  1002. case 95:
  1003. /* Element[CHARACTERS[LIST]] */
  1004. case 96:
  1005. /* Element[CHARACTERS[STRING]] */
  1006. case 98:
  1007. /* FirstStartTag[CHARACTERS[STRING]] */
  1008. case 99:
  1009. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1010. case 101:
  1011. /* FirstStartTag[CHARACTERS[STRING]] */
  1012. case 100:
  1013. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1014. case 102:
  1015. /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
  1016. case 103:
  1017. /* Element[CHARACTERS[FLOAT]] */
  1018. case 104:
  1019. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1020. case 106:
  1021. /* FirstStartTag[CHARACTERS[STRING]] */
  1022. case 107:
  1023. /* Element[CHARACTERS[INTEGER]] */
  1024. case 111:
  1025. /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
  1026. case 108:
  1027. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  1028. case 43:
  1029. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  1030. case 112:
  1031. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1032. case 114:
  1033. /* Element[CHARACTERS[STRING]] */
  1034. case 116:
  1035. /* Element[CHARACTERS[DECIMAL]] */
  1036. case 118:
  1037. /* Element[CHARACTERS[STRING]] */
  1038. case 119:
  1039. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  1040. case 120:
  1041. /* Element[CHARACTERS[STRING]] */
  1042. case 121:
  1043. /* Element[CHARACTERS[DATETIME]] */
  1044. case 123:
  1045. /* Element[CHARACTERS[DATETIME]] */
  1046. case 122:
  1047. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  1048. case 126:
  1049. /* Element[CHARACTERS[DATETIME]] */
  1050. case 130:
  1051. /* FirstStartTag[CHARACTERS[FLOAT]] */
  1052. case 131:
  1053. /* Element[CHARACTERS[STRING]] */
  1054. case 132:
  1055. /* FirstStartTag[CHARACTERS[BINARY_HEX]] */
  1056. case 133:
  1057. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1058. case 134:
  1059. /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
  1060. case 135:
  1061. /* FirstStartTag[CHARACTERS[DATETIME]] */
  1062. case 136:
  1063. /* Element[CHARACTERS[INTEGER]] */
  1064. case 137:
  1065. /* Element[CHARACTERS[STRING]] */
  1066. case 140:
  1067. /* Element[CHARACTERS[LIST]] */
  1068. case 139:
  1069. /* Element[CHARACTERS[DATETIME]] */
  1070. case 138:
  1071. /* FirstStartTag[CHARACTERS[INTEGER]] */
  1072. case 141:
  1073. /* FirstStartTag[CHARACTERS[STRING]] */
  1074. case 142:
  1075. /* FirstStartTag[CHARACTERS[STRING]] */
  1076. case 143:
  1077. /* FirstStartTag[CHARACTERS[STRING]] */
  1078. case 144:
  1079. /* FirstStartTag[CHARACTERS[LIST]] */
  1080. case 145:
  1081. /* Element[CHARACTERS[UNSIGNED_INTEGER]] */
  1082. errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
  1083. switch (state->eventCode) {
  1084. case 0:
  1085. *nextEvent = EXI_EVENT_CHARACTERS;
  1086. break;
  1087. case 1:
  1088. /* 2nd level events */
  1089. errn = exiDecodeNext2Event(stream, state, nextEvent);
  1090. break;
  1091. default:
  1092. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1093. break;
  1094. }
  1095. break;
  1096. case 2:
  1097. /* Element[END_ELEMENT] */
  1098. case 39:
  1099. /* Element[END_ELEMENT] */
  1100. case 127:
  1101. /* Element[END_ELEMENT] */
  1102. case 129:
  1103. /* Element[END_ELEMENT] */
  1104. errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
  1105. switch (state->eventCode) {
  1106. case 0:
  1107. *nextEvent = EXI_EVENT_END_ELEMENT;
  1108. break;
  1109. case 1:
  1110. /* 2nd level events */
  1111. errn = exiDecodeNext2Event(stream, state, nextEvent);
  1112. break;
  1113. default:
  1114. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1115. break;
  1116. }
  1117. break;
  1118. case 13:
  1119. /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
  1120. errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
  1121. switch (state->eventCode) {
  1122. case 0:
  1123. case 1:
  1124. *nextEvent = EXI_EVENT_START_ELEMENT;
  1125. break;
  1126. case 2:
  1127. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
  1128. break;
  1129. default:
  1130. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1131. break;
  1132. }
  1133. break;
  1134. case 23:
  1135. /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  1136. case 51:
  1137. /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
  1138. errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
  1139. switch (state->eventCode) {
  1140. case 0:
  1141. *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
  1142. break;
  1143. case 1:
  1144. *nextEvent = EXI_EVENT_END_ELEMENT;
  1145. break;
  1146. case 2:
  1147. *nextEvent = EXI_EVENT_CHARACTERS_GENERIC;
  1148. break;
  1149. case 3:
  1150. /* 2nd level events */
  1151. errn = exiDecodeNext2Event(stream, state, nextEvent);
  1152. break;
  1153. default:
  1154. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1155. break;
  1156. }
  1157. break;
  1158. default:
  1159. if(ruleID < 0) {
  1160. /* built-in element grammar */
  1161. numberOfProductions = state->runtimeGrammars[(ruleID + 1)*(-1)].numberOfProductions;
  1162. if(numberOfProductions > 0) {
  1163. /* decode 1st level event code */
  1164. errn = exiGetCodingLength(numberOfProductions + 1, &codingLength);
  1165. if(errn) {
  1166. return errn;
  1167. }
  1168. errn = decodeNBitUnsignedInteger(stream, codingLength, &eventCode1);
  1169. if(errn) {
  1170. return errn;
  1171. }
  1172. if(eventCode1 == numberOfProductions) {
  1173. /* 2nd level */
  1174. errn = exiDecodeNext2Event(stream, state, nextEvent);
  1175. } else {
  1176. /* 1st level event not supported in profile */
  1177. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1178. }
  1179. } else {
  1180. errn = exiDecodeNext2Event(stream, state, nextEvent);
  1181. }
  1182. } else {
  1183. *nextEvent = EXI_EVENT_ERROR;
  1184. errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
  1185. }
  1186. break;
  1187. }
  1188. currEvent = *nextEvent;
  1189. return errn;
  1190. }
  1191. #ifndef __GNUC__
  1192. #pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
  1193. #endif /* __GNUC__ */
  1194. int exiappHandDecodeStartDocument(bitstream_t* stream, exi_state_t* state) {
  1195. if ( state->grammarStack[state->stackIndex] == 0 ) {
  1196. /* move on */
  1197. state->grammarStack[state->stackIndex] = 13;
  1198. return 0;
  1199. }
  1200. if ( state->grammarStack[state->stackIndex] == 105 ) {
  1201. /* move on */
  1202. state->grammarStack[state->stackIndex] = 42;
  1203. return 0;
  1204. }
  1205. return EXI_ERROR_UNEXPECTED_START_DOCUMENT;
  1206. }
  1207. #ifndef __GNUC__
  1208. #pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
  1209. #endif /* __GNUC__ */
  1210. #ifndef __GNUC__
  1211. #pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
  1212. #endif /* __GNUC__ */
  1213. int exiappHandDecodeEndDocument(bitstream_t* stream, exi_state_t* state) {
  1214. if ( state->grammarStack[state->stackIndex] == 42) {
  1215. return 0;
  1216. }
  1217. if ( state->grammarStack[state->stackIndex] == 14) {
  1218. return 0;
  1219. }
  1220. return EXI_ERROR_UNEXPECTED_END_DOCUMENT;
  1221. }
  1222. #ifndef __GNUC__
  1223. #pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
  1224. #endif /* __GNUC__ */
  1225. int exiappHandDecodeStartElement(bitstream_t* stream, exi_state_t* state,
  1226. uint16_t* qnameID) {
  1227. errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
  1228. switch(currEvent) {
  1229. case EXI_EVENT_START_ELEMENT:
  1230. switch (state->grammarStack[state->stackIndex]) {
  1231. case 3:
  1232. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1233. switch(state->eventCode) {
  1234. case 0:
  1235. errn = _exiDecodeStartElement(state, *qnameID = 0, 4, 5);
  1236. break;
  1237. }
  1238. break;
  1239. case 4:
  1240. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1241. switch(state->eventCode) {
  1242. case 0:
  1243. errn = _exiDecodeStartElement(state, *qnameID = 0, 124, 5);
  1244. break;
  1245. }
  1246. break;
  1247. case 5:
  1248. /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
  1249. switch(state->eventCode) {
  1250. case 0:
  1251. errn = _exiDecodeStartElement(state, *qnameID = 2, 31, 18);
  1252. break;
  1253. }
  1254. break;
  1255. case 8:
  1256. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1257. switch(state->eventCode) {
  1258. case 0:
  1259. errn = _exiDecodeStartElement(state, *qnameID = 0, 9, 5);
  1260. break;
  1261. }
  1262. break;
  1263. case 9:
  1264. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1265. switch(state->eventCode) {
  1266. case 0:
  1267. errn = _exiDecodeStartElement(state, *qnameID = 0, 92, 5);
  1268. break;
  1269. }
  1270. break;
  1271. case 13:
  1272. /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
  1273. switch(state->eventCode) {
  1274. case 0:
  1275. errn = _exiDecodeStartElement(state, *qnameID = 65, 14, 15);
  1276. break;
  1277. case 1:
  1278. errn = _exiDecodeStartElement(state, *qnameID = 66, 14, 16);
  1279. break;
  1280. }
  1281. break;
  1282. case 15:
  1283. /* FirstStartTag[START_ELEMENT(AppProtocol)] */
  1284. switch(state->eventCode) {
  1285. case 0:
  1286. errn = _exiDecodeStartElement(state, *qnameID = 0, 3, 5);
  1287. break;
  1288. }
  1289. break;
  1290. case 16:
  1291. /* FirstStartTag[START_ELEMENT(ResponseCode)] */
  1292. switch(state->eventCode) {
  1293. case 0:
  1294. errn = _exiDecodeStartElement(state, *qnameID = 3, 66, 44);
  1295. break;
  1296. }
  1297. break;
  1298. case 26:
  1299. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1300. switch(state->eventCode) {
  1301. case 0:
  1302. errn = _exiDecodeStartElement(state, *qnameID = 0, 27, 5);
  1303. break;
  1304. }
  1305. break;
  1306. case 27:
  1307. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1308. switch(state->eventCode) {
  1309. case 0:
  1310. errn = _exiDecodeStartElement(state, *qnameID = 0, 97, 5);
  1311. break;
  1312. }
  1313. break;
  1314. case 30:
  1315. /* Element[START_ELEMENT(ProtocolNamespace)] */
  1316. switch(state->eventCode) {
  1317. case 0:
  1318. errn = _exiDecodeStartElement(state, *qnameID = 2, 31, 18);
  1319. break;
  1320. }
  1321. break;
  1322. case 31:
  1323. /* Element[START_ELEMENT(VersionNumberMajor)] */
  1324. switch(state->eventCode) {
  1325. case 0:
  1326. errn = _exiDecodeStartElement(state, *qnameID = 5, 33, 46);
  1327. break;
  1328. }
  1329. break;
  1330. case 33:
  1331. /* Element[START_ELEMENT(VersionNumberMinor)] */
  1332. switch(state->eventCode) {
  1333. case 0:
  1334. errn = _exiDecodeStartElement(state, *qnameID = 6, 34, 35);
  1335. break;
  1336. }
  1337. break;
  1338. case 34:
  1339. /* Element[START_ELEMENT(SchemaID)] */
  1340. switch(state->eventCode) {
  1341. case 0:
  1342. errn = _exiDecodeStartElement(state, *qnameID = 4, 90, 45);
  1343. break;
  1344. }
  1345. break;
  1346. case 42:
  1347. /* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
  1348. switch(state->eventCode) {
  1349. case 0:
  1350. errn = _exiDecodeStartElement(state, *qnameID = 0, 42, 5);
  1351. break;
  1352. case 1:
  1353. errn = _exiDecodeStartElement(state, *qnameID = 1, 42, 43);
  1354. break;
  1355. case 2:
  1356. errn = _exiDecodeStartElement(state, *qnameID = 2, 42, 18);
  1357. break;
  1358. case 3:
  1359. errn = _exiDecodeStartElement(state, *qnameID = 3, 42, 44);
  1360. break;
  1361. case 4:
  1362. errn = _exiDecodeStartElement(state, *qnameID = 4, 42, 45);
  1363. break;
  1364. case 5:
  1365. errn = _exiDecodeStartElement(state, *qnameID = 5, 42, 46);
  1366. break;
  1367. case 6:
  1368. errn = _exiDecodeStartElement(state, *qnameID = 6, 42, 35);
  1369. break;
  1370. case 7:
  1371. errn = _exiDecodeStartElement(state, *qnameID = 65, 42, 15);
  1372. break;
  1373. case 8:
  1374. errn = _exiDecodeStartElement(state, *qnameID = 66, 42, 16);
  1375. break;
  1376. }
  1377. break;
  1378. case 60:
  1379. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1380. switch(state->eventCode) {
  1381. case 0:
  1382. errn = _exiDecodeStartElement(state, *qnameID = 0, 61, 5);
  1383. break;
  1384. }
  1385. break;
  1386. case 61:
  1387. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1388. switch(state->eventCode) {
  1389. case 0:
  1390. errn = _exiDecodeStartElement(state, *qnameID = 0, 26, 5);
  1391. break;
  1392. }
  1393. break;
  1394. case 66:
  1395. /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
  1396. switch(state->eventCode) {
  1397. case 0:
  1398. errn = _exiDecodeStartElement(state, *qnameID = 4, 129, 45);
  1399. break;
  1400. }
  1401. break;
  1402. case 72:
  1403. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1404. switch(state->eventCode) {
  1405. case 0:
  1406. errn = _exiDecodeStartElement(state, *qnameID = 0, 73, 5);
  1407. break;
  1408. }
  1409. break;
  1410. case 73:
  1411. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1412. switch(state->eventCode) {
  1413. case 0:
  1414. errn = _exiDecodeStartElement(state, *qnameID = 0, 109, 5);
  1415. break;
  1416. }
  1417. break;
  1418. case 90:
  1419. /* Element[START_ELEMENT(Priority)] */
  1420. switch(state->eventCode) {
  1421. case 0:
  1422. errn = _exiDecodeStartElement(state, *qnameID = 1, 127, 43);
  1423. break;
  1424. }
  1425. break;
  1426. case 92:
  1427. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1428. switch(state->eventCode) {
  1429. case 0:
  1430. errn = _exiDecodeStartElement(state, *qnameID = 0, 113, 5);
  1431. break;
  1432. }
  1433. break;
  1434. case 94:
  1435. /* Element[START_ELEMENT(AppProtocol)] */
  1436. switch(state->eventCode) {
  1437. case 0:
  1438. errn = _exiDecodeStartElement(state, *qnameID = 0, 3, 5);
  1439. break;
  1440. }
  1441. break;
  1442. case 97:
  1443. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1444. switch(state->eventCode) {
  1445. case 0:
  1446. errn = _exiDecodeStartElement(state, *qnameID = 0, 39, 5);
  1447. break;
  1448. }
  1449. break;
  1450. case 109:
  1451. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1452. switch(state->eventCode) {
  1453. case 0:
  1454. errn = _exiDecodeStartElement(state, *qnameID = 0, 110, 5);
  1455. break;
  1456. }
  1457. break;
  1458. case 110:
  1459. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1460. switch(state->eventCode) {
  1461. case 0:
  1462. errn = _exiDecodeStartElement(state, *qnameID = 0, 60, 5);
  1463. break;
  1464. }
  1465. break;
  1466. case 113:
  1467. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1468. switch(state->eventCode) {
  1469. case 0:
  1470. errn = _exiDecodeStartElement(state, *qnameID = 0, 115, 5);
  1471. break;
  1472. }
  1473. break;
  1474. case 115:
  1475. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1476. switch(state->eventCode) {
  1477. case 0:
  1478. errn = _exiDecodeStartElement(state, *qnameID = 0, 72, 5);
  1479. break;
  1480. }
  1481. break;
  1482. case 117:
  1483. /* Element[START_ELEMENT(ResponseCode)] */
  1484. switch(state->eventCode) {
  1485. case 0:
  1486. errn = _exiDecodeStartElement(state, *qnameID = 3, 66, 44);
  1487. break;
  1488. }
  1489. break;
  1490. case 124:
  1491. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1492. switch(state->eventCode) {
  1493. case 0:
  1494. errn = _exiDecodeStartElement(state, *qnameID = 0, 125, 5);
  1495. break;
  1496. }
  1497. break;
  1498. case 125:
  1499. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1500. switch(state->eventCode) {
  1501. case 0:
  1502. errn = _exiDecodeStartElement(state, *qnameID = 0, 128, 5);
  1503. break;
  1504. }
  1505. break;
  1506. case 128:
  1507. /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
  1508. switch(state->eventCode) {
  1509. case 0:
  1510. errn = _exiDecodeStartElement(state, *qnameID = 0, 8, 5);
  1511. break;
  1512. }
  1513. break;
  1514. }
  1515. break;
  1516. case EXI_EVENT_START_ELEMENT_NS:
  1517. errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
  1518. break;
  1519. case EXI_EVENT_START_ELEMENT_GENERIC:
  1520. case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED:
  1521. errn = _exiDecodeQName(stream, state, qnameID,
  1522. &_qname);
  1523. if (errn) {
  1524. return errn;
  1525. }
  1526. /* update current rule --> element content rule (if not already) */
  1527. errn = exi_appHand_MoveToElementContentRule(state);
  1528. if (errn) {
  1529. return errn;
  1530. }
  1531. /* retrieve global grammar(existing OR runtime) and push it stack */
  1532. errn = exi_appHand_RetrieveAndPushGlobalGrammar(state, *qnameID);
  1533. break;
  1534. default:
  1535. errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
  1536. break;
  1537. }
  1538. return errn;
  1539. }
  1540. /*int exiappHandDecodeStartElementGeneric(bitstream_t* stream, exi_state_t* state,
  1541. qname_t* qname) {
  1542. // decode qname
  1543. int errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), qname);
  1544. if (errn) {
  1545. return errn;
  1546. }
  1547. switch (state->grammarStack[state->stackIndex]) {
  1548. // $EXI_DECODE_START_ELEMENT_GENERIC$
  1549. case DOC_CONTENT:
  1550. // move on to DocEnd
  1551. state->grammarStack[state->stackIndex] = DOC_END;
  1552. // push new ur-type grammar on stack
  1553. return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL);
  1554. break;
  1555. case UR_TYPE_GRAMMAR_0:
  1556. // move on to UR_TYPE_GRAMMAR_1
  1557. state->grammarStack[state->stackIndex] = UR_TYPE_GRAMMAR_1;
  1558. // push new ur-type grammar on stack
  1559. return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL);
  1560. break;
  1561. case UR_TYPE_GRAMMAR_1:
  1562. // remain in UR_TYPE_GRAMMAR_1
  1563. // push new ur-type grammar on stack
  1564. return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL);
  1565. break;
  1566. default:
  1567. return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC;
  1568. }
  1569. return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC;
  1570. }*/
  1571. #ifndef __GNUC__
  1572. #pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
  1573. #endif /* __GNUC__ */
  1574. int exiappHandDecodeEndElement(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID) {
  1575. int16_t currentID;
  1576. switch(currEvent) {
  1577. case EXI_EVENT_END_ELEMENT_UNDECLARED:
  1578. currentID = state->grammarStack[state->stackIndex];
  1579. if (currentID < 0) {
  1580. /* runtime grammars do have IDs smaller than 0 */
  1581. /* TODO learn EE event */
  1582. return -1;
  1583. }
  1584. /* Note: no break statement */
  1585. default:
  1586. /* copy IDs */
  1587. *qnameID = state->elementStack[state->stackIndex];
  1588. /*ee->localPart = state->elementStack[state->stackIndex].localPart;
  1589. ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI;*/
  1590. return exi_appHand_PopStack(state);
  1591. }
  1592. }
  1593. #ifndef __GNUC__
  1594. #pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
  1595. #endif /* __GNUC__ */
  1596. /*int exiappHandDecodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state, eqname_t* ee) {
  1597. int16_t currentID = state->grammarStack[state->stackIndex];
  1598. if (currentID < 0) {
  1599. // runtime grammars do have IDs smaller than 0
  1600. // TODO learn EE event
  1601. return -1;
  1602. }
  1603. return exiappHandDecodeEndElement(stream, state, ee);
  1604. }*/
  1605. int exiappHandDecodeCharacters(bitstream_t* stream, exi_state_t* state,
  1606. exi_value_t* val) {
  1607. int16_t moveOnID = 0;
  1608. errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
  1609. switch(currEvent) {
  1610. case EXI_EVENT_CHARACTERS:
  1611. case EXI_EVENT_CHARACTERS_GENERIC:
  1612. switch (state->grammarStack[state->stackIndex]) {
  1613. case 53:
  1614. /* DECIMAL */
  1615. case 116:
  1616. /* DECIMAL */
  1617. val->type = EXI_DATATYPE_DECIMAL;
  1618. errn = decodeDecimal(stream, &val->decimal);
  1619. moveOnID = 2; /* move on ID */
  1620. break;
  1621. case 10:
  1622. /* STRING */
  1623. case 12:
  1624. /* STRING */
  1625. case 18:
  1626. /* STRING */
  1627. case 20:
  1628. /* STRING */
  1629. case 24:
  1630. /* STRING */
  1631. case 32:
  1632. /* STRING */
  1633. case 36:
  1634. /* STRING */
  1635. case 38:
  1636. /* STRING */
  1637. case 40:
  1638. /* STRING */
  1639. case 41:
  1640. /* STRING */
  1641. case 48:
  1642. /* STRING */
  1643. case 54:
  1644. /* STRING */
  1645. case 55:
  1646. /* STRING */
  1647. case 58:
  1648. /* STRING */
  1649. case 67:
  1650. /* STRING */
  1651. case 70:
  1652. /* STRING */
  1653. case 77:
  1654. /* STRING */
  1655. case 78:
  1656. /* STRING */
  1657. case 79:
  1658. /* STRING */
  1659. case 85:
  1660. /* STRING */
  1661. case 86:
  1662. /* STRING */
  1663. case 87:
  1664. /* STRING */
  1665. case 96:
  1666. /* STRING */
  1667. case 98:
  1668. /* STRING */
  1669. case 101:
  1670. /* STRING */
  1671. case 106:
  1672. /* STRING */
  1673. case 114:
  1674. /* STRING */
  1675. case 118:
  1676. /* STRING */
  1677. case 120:
  1678. /* STRING */
  1679. case 131:
  1680. /* STRING */
  1681. case 137:
  1682. /* STRING */
  1683. case 141:
  1684. /* STRING */
  1685. case 142:
  1686. /* STRING */
  1687. case 143:
  1688. /* STRING */
  1689. val->type = EXI_DATATYPE_STRING;
  1690. errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
  1691. moveOnID = 2; /* move on ID */
  1692. break;
  1693. case 25:
  1694. /* LIST */
  1695. case 29:
  1696. /* LIST */
  1697. case 65:
  1698. /* LIST */
  1699. case 95:
  1700. /* LIST */
  1701. case 140:
  1702. /* LIST */
  1703. case 144:
  1704. /* LIST */
  1705. val->type = EXI_DATATYPE_LIST;
  1706. val->list.type = EXI_DATATYPE_STRING;
  1707. errn = decodeUnsignedInteger16(stream, &val->list.len);
  1708. moveOnID = 2; /* move on ID */
  1709. break;
  1710. case 112:
  1711. /* DATETIME */
  1712. case 126:
  1713. /* DATETIME */
  1714. val->type = EXI_DATATYPE_DATETIME;
  1715. errn = decodeDateTime(stream, EXI_DATETIME_TIME, &val->datetime);
  1716. moveOnID = 2; /* move on ID */
  1717. break;
  1718. case 28:
  1719. /* BINARY_HEX */
  1720. case 132:
  1721. /* BINARY_HEX */
  1722. val->type = EXI_DATATYPE_BINARY_HEX;
  1723. errn = decodeBinary(stream, &val->binary);
  1724. moveOnID = 2; /* move on ID */
  1725. break;
  1726. case 74:
  1727. /* DATETIME */
  1728. case 123:
  1729. /* DATETIME */
  1730. val->type = EXI_DATATYPE_DATETIME;
  1731. errn = decodeDateTime(stream, EXI_DATETIME_GYEARMONTH, &val->datetime);
  1732. moveOnID = 2; /* move on ID */
  1733. break;
  1734. case 1:
  1735. /* NBIT_UNSIGNED_INTEGER */
  1736. case 45:
  1737. /* NBIT_UNSIGNED_INTEGER */
  1738. case 75:
  1739. /* NBIT_UNSIGNED_INTEGER */
  1740. case 122:
  1741. /* NBIT_UNSIGNED_INTEGER */
  1742. val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
  1743. errn = _decodeNBitIntegerValue(stream, &val->integer, 8, 0);
  1744. moveOnID = 2; /* move on ID */
  1745. break;
  1746. case 88:
  1747. /* DATETIME */
  1748. case 104:
  1749. /* DATETIME */
  1750. val->type = EXI_DATATYPE_DATETIME;
  1751. errn = decodeDateTime(stream, EXI_DATETIME_DATETIME, &val->datetime);
  1752. moveOnID = 2; /* move on ID */
  1753. break;
  1754. case 56:
  1755. /* NBIT_UNSIGNED_INTEGER */
  1756. case 134:
  1757. /* NBIT_UNSIGNED_INTEGER */
  1758. val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
  1759. errn = _decodeNBitIntegerValue(stream, &val->integer, 8, -128);
  1760. moveOnID = 2; /* move on ID */
  1761. break;
  1762. case 100:
  1763. /* DATETIME */
  1764. case 139:
  1765. /* DATETIME */
  1766. val->type = EXI_DATATYPE_DATETIME;
  1767. errn = decodeDateTime(stream, EXI_DATETIME_GMONTHDAY, &val->datetime);
  1768. moveOnID = 2; /* move on ID */
  1769. break;
  1770. case 17:
  1771. /* INTEGER */
  1772. case 47:
  1773. /* INTEGER */
  1774. case 68:
  1775. /* INTEGER */
  1776. case 69:
  1777. /* INTEGER */
  1778. case 76:
  1779. /* INTEGER */
  1780. case 83:
  1781. /* INTEGER */
  1782. case 89:
  1783. /* INTEGER */
  1784. case 91:
  1785. /* INTEGER */
  1786. case 93:
  1787. /* INTEGER */
  1788. case 107:
  1789. /* INTEGER */
  1790. case 136:
  1791. /* INTEGER */
  1792. case 138:
  1793. /* INTEGER */
  1794. val->type = EXI_DATATYPE_INTEGER;
  1795. errn = decodeInteger(stream, &val->integer);
  1796. moveOnID = 2; /* move on ID */
  1797. break;
  1798. case 71:
  1799. /* ENUMERATION */
  1800. case 44:
  1801. /* ENUMERATION */
  1802. val->type = EXI_DATATYPE_ENUMERATION;
  1803. errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration);
  1804. moveOnID = 2; /* move on ID */
  1805. break;
  1806. case 64:
  1807. /* DATETIME */
  1808. case 82:
  1809. /* DATETIME */
  1810. val->type = EXI_DATATYPE_DATETIME;
  1811. errn = decodeDateTime(stream, EXI_DATETIME_GMONTH, &val->datetime);
  1812. moveOnID = 2; /* move on ID */
  1813. break;
  1814. case 84:
  1815. /* DATETIME */
  1816. case 99:
  1817. /* DATETIME */
  1818. val->type = EXI_DATATYPE_DATETIME;
  1819. errn = decodeDateTime(stream, EXI_DATETIME_GYEAR, &val->datetime);
  1820. moveOnID = 2; /* move on ID */
  1821. break;
  1822. case 121:
  1823. /* DATETIME */
  1824. case 133:
  1825. /* DATETIME */
  1826. val->type = EXI_DATATYPE_DATETIME;
  1827. errn = decodeDateTime(stream, EXI_DATETIME_DATE, &val->datetime);
  1828. moveOnID = 2; /* move on ID */
  1829. break;
  1830. case 63:
  1831. /* DATETIME */
  1832. case 135:
  1833. /* DATETIME */
  1834. val->type = EXI_DATATYPE_DATETIME;
  1835. errn = decodeDateTime(stream, EXI_DATETIME_GDAY, &val->datetime);
  1836. moveOnID = 2; /* move on ID */
  1837. break;
  1838. case 22:
  1839. /* STRING */
  1840. case 23:
  1841. /* STRING */
  1842. val->type = EXI_DATATYPE_STRING;
  1843. errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
  1844. moveOnID = 23; /* move on ID */
  1845. break;
  1846. case 11:
  1847. /* FLOAT */
  1848. case 62:
  1849. /* FLOAT */
  1850. case 103:
  1851. /* FLOAT */
  1852. case 130:
  1853. /* FLOAT */
  1854. val->type = EXI_DATATYPE_FLOAT;
  1855. errn = decodeFloat(stream, &val->float_me);
  1856. moveOnID = 2; /* move on ID */
  1857. break;
  1858. case 19:
  1859. /* NBIT_UNSIGNED_INTEGER */
  1860. case 43:
  1861. /* NBIT_UNSIGNED_INTEGER */
  1862. val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
  1863. errn = _decodeNBitIntegerValue(stream, &val->integer, 5, 1);
  1864. moveOnID = 2; /* move on ID */
  1865. break;
  1866. case 37:
  1867. /* BOOLEAN */
  1868. case 80:
  1869. /* BOOLEAN */
  1870. val->type = EXI_DATATYPE_BOOLEAN;
  1871. errn = decodeBoolean(stream, &val->boolean);
  1872. moveOnID = 2; /* move on ID */
  1873. break;
  1874. case 7:
  1875. /* UNSIGNED_INTEGER */
  1876. case 21:
  1877. /* UNSIGNED_INTEGER */
  1878. case 49:
  1879. /* UNSIGNED_INTEGER */
  1880. case 57:
  1881. /* UNSIGNED_INTEGER */
  1882. case 59:
  1883. /* UNSIGNED_INTEGER */
  1884. case 46:
  1885. /* UNSIGNED_INTEGER */
  1886. case 81:
  1887. /* UNSIGNED_INTEGER */
  1888. case 35:
  1889. /* UNSIGNED_INTEGER */
  1890. case 102:
  1891. /* UNSIGNED_INTEGER */
  1892. case 108:
  1893. /* UNSIGNED_INTEGER */
  1894. case 119:
  1895. /* UNSIGNED_INTEGER */
  1896. case 145:
  1897. /* UNSIGNED_INTEGER */
  1898. val->type = EXI_DATATYPE_UNSIGNED_INTEGER;
  1899. errn = decodeUnsignedInteger(stream, &val->integer);
  1900. moveOnID = 2; /* move on ID */
  1901. break;
  1902. case 50:
  1903. /* STRING */
  1904. case 51:
  1905. /* STRING */
  1906. val->type = EXI_DATATYPE_STRING;
  1907. errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
  1908. moveOnID = 51; /* move on ID */
  1909. break;
  1910. case 52:
  1911. /* BINARY_BASE64 */
  1912. case 111:
  1913. /* BINARY_BASE64 */
  1914. val->type = EXI_DATATYPE_BINARY_BASE64;
  1915. errn = decodeBinary(stream, &val->binary);
  1916. moveOnID = 2; /* move on ID */
  1917. break;
  1918. }
  1919. if (errn) {
  1920. /* error */
  1921. } else {
  1922. /* move on */
  1923. state->grammarStack[state->stackIndex] = moveOnID;
  1924. }
  1925. break;
  1926. case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED:
  1927. if (state->grammarStack[state->stackIndex] < 0) {
  1928. /* runtime grammars do have IDs smaller than 0 */
  1929. return EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH;
  1930. }
  1931. /* update current rule --> element content rule (if not already) */
  1932. errn = exi_appHand_MoveToElementContentRule(state);
  1933. if (errn) {
  1934. return errn;
  1935. }
  1936. /* read content value as STRING */
  1937. val->type = EXI_DATATYPE_STRING;
  1938. errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
  1939. break;
  1940. default:
  1941. errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
  1942. break;
  1943. }
  1944. return errn;
  1945. }
  1946. /*int exiappHandDecodeCharactersGeneric(bitstream_t* stream, exi_state_t* state,
  1947. exi_value_t* val) {
  1948. return exiappHandDecodeCharacters(stream, state, val);
  1949. }*/
  1950. /*int exiappHandDecodeCharactersGenericUndeclared(bitstream_t* stream, exi_state_t* state,
  1951. exi_value_t* val) {
  1952. int errn = 0;
  1953. if (state->grammarStack[state->stackIndex] < 0) {
  1954. // runtime grammars do have IDs smaller than 0
  1955. // TODO learn CH event
  1956. return -1;
  1957. }
  1958. // update current rule --> element content rule (if not already)
  1959. errn = exiMoveToElementContentRule(state);
  1960. if (errn) {
  1961. return errn;
  1962. }
  1963. // read content value
  1964. // STRING
  1965. val->type = EXI_DATATYPE_STRING;
  1966. errn = decodeStringValue(stream, &val->string);
  1967. return errn;
  1968. }*/
  1969. int exiappHandDecodeAttributeGenericValue(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID, exi_value_t* val) {
  1970. int16_t currentID;
  1971. if (_qname.uri.id == 2 && _qname.localName.id == 1 ) {
  1972. /* xsi:type --> QName type */
  1973. errn = exiappHandDecodeAttributeXsiType(stream, state, val);
  1974. } else {
  1975. currentID = state->grammarStack[state->stackIndex];
  1976. if (currentID >= 0) {
  1977. /* if schema-informed value type according global attribute */
  1978. switch(*qnameID) {
  1979. default:
  1980. val->type = EXI_DATATYPE_STRING;
  1981. errn = decodeStringValue(stream, state, *qnameID, &val->str);
  1982. break;
  1983. }
  1984. } else {
  1985. val->type = EXI_DATATYPE_STRING;
  1986. errn = decodeStringValue(stream, state, *qnameID, &val->str);
  1987. }
  1988. }
  1989. return errn;
  1990. }
  1991. int exiappHandDecodeAttribute(bitstream_t* stream, exi_state_t* state,
  1992. uint16_t* qnameID, exi_value_t* val) {
  1993. int16_t moveOnID = 0;
  1994. int16_t currentID = state->grammarStack[state->stackIndex];
  1995. errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
  1996. switch(currEvent) {
  1997. case EXI_EVENT_ATTRIBUTE:
  1998. case EXI_EVENT_ATTRIBUTE_INVALID_VALUE:
  1999. switch (currentID) {
  2000. }
  2001. if (errn) {
  2002. /* error */
  2003. } else {
  2004. /* move on */
  2005. state->grammarStack[state->stackIndex] = moveOnID;
  2006. }
  2007. break;
  2008. case EXI_EVENT_ATTRIBUTE_GENERIC:
  2009. case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED:
  2010. errn = _exiDecodeQName(stream, state, qnameID, &_qname);
  2011. if (errn) {
  2012. return errn;
  2013. }
  2014. /* learn attribute ? */
  2015. errn = exi_appHand_LearnAttribute(state, *qnameID, _qname.uri.id, _qname.localName.id);
  2016. if (errn) {
  2017. return errn;
  2018. }
  2019. /* decode attribute value */
  2020. errn = exiappHandDecodeAttributeGenericValue(stream, state, qnameID, val);
  2021. break;
  2022. default:
  2023. errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
  2024. break;
  2025. }
  2026. return errn;
  2027. }
  2028. /*int exiappHandDecodeAttributeGenericUndeclared(bitstream_t* stream, exi_state_t* state,
  2029. qname_t* at, exi_value_t* val) {
  2030. int errn;
  2031. int16_t currentID = state->grammarStack[state->stackIndex];
  2032. if (currentID < 0) {
  2033. // TODO runtime elements
  2034. return -1;
  2035. } else {
  2036. // decode qname
  2037. errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), at);
  2038. if (errn) {
  2039. return errn;
  2040. }
  2041. }
  2042. if (currentID < 0) {
  2043. // TODO learn AT event
  2044. return -1;
  2045. }
  2046. decode attribute value
  2047. val->type = EXI_DATATYPE_STRING;
  2048. errn = decodeStringValue(stream, &val->string);
  2049. // we do not move forward in grammars
  2050. return errn;
  2051. }*/
  2052. int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state,
  2053. exi_value_t* val) {
  2054. errn = decodeBoolean(stream, &val->boolean);
  2055. if (errn >= 0 && val->boolean) {
  2056. /* handle xsi:nil == true */
  2057. errn = exi_appHand_HandleXsiNilTrue(state);
  2058. }
  2059. return errn;
  2060. }
  2061. int exiappHandDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state,
  2062. exi_value_t* val) {
  2063. /*uint32_t uriID;
  2064. uint32_t localNameID; */
  2065. /* uri */
  2066. errn =_exiDecodeNamespaceUri(stream, state, &_qname.uri); /* NULL, &uriID); */
  2067. if (errn) {
  2068. return errn;
  2069. }
  2070. /* localName */
  2071. errn = _exiDecodeLocalName(stream, state, _qname.uri.id, &_qname.localName); /* NULL, &localNameID, uriID);*/
  2072. if (errn) {
  2073. return errn;
  2074. }
  2075. val->type = EXI_DATATYPE_QNAME;
  2076. val->eqname.namespaceURI = _qname.uri.id; /* uriID; */
  2077. val->eqname.localPart = _qname.localName.id; /* localNameID; */
  2078. /* handle xsi type cast */
  2079. errn = exi_appHand_HandleXsiType(state, &val->eqname);
  2080. return errn;
  2081. }
  2082. #endif