/edu.tum.cs.ccts.protobuf.embedded/test/Test.c

http://protobuf-embedded-c.googlecode.com/ · C · 1153 lines · 825 code · 187 blank · 141 comment · 89 complexity · f5f15cd322b7b214a3c7d26d41f27e10 MD5 · raw file

  1. /*******************************************************************
  2. * C-file generated by Protoc for Embedded C. *
  3. * Version 0.2 (2012-01-31) *
  4. * *
  5. * Copyright (c) 2009-2012 *
  6. * Technische Universitaet Muenchen *
  7. * http://www4.in.tum.de/ *
  8. * *
  9. * Source : Test.proto
  10. * Package: edu.tum.cs.ccts.protobuf.embedded
  11. * *
  12. * Do not edit. *
  13. *******************************************************************/
  14. #include "Test.h"
  15. /*******************************************************************
  16. * General functions
  17. *******************************************************************/
  18. void _memset(void *msg_ptr, char init_val, unsigned int size) {
  19. int i;
  20. for(i = 0; i < size; ++ i)
  21. *((char*)msg_ptr + i) = init_val;
  22. }
  23. int varint_packed_size(unsigned long value) {
  24. if ((value & (0xffffffff << 7)) == 0) return 1;
  25. if ((value & (0xffffffff << 14)) == 0) return 2;
  26. if ((value & (0xffffffff << 21)) == 0) return 3;
  27. if ((value & (0xffffffff << 28)) == 0) return 4;
  28. return 5;
  29. }
  30. int write_raw_byte(char value, void *_buffer, int offset) {
  31. *((char *)_buffer + offset) = value;
  32. return ++offset;
  33. }
  34. /** Write a little-endian 32-bit integer. */
  35. int write_raw_little_endian32(unsigned long value, void *_buffer, int offset) {
  36. offset = write_raw_byte((char)((value ) & 0xFF), _buffer, offset);
  37. offset = write_raw_byte((char)((value >> 8) & 0xFF), _buffer, offset);
  38. offset = write_raw_byte((char)((value >> 16) & 0xFF), _buffer, offset);
  39. offset = write_raw_byte((char)((value >> 24) & 0xFF), _buffer, offset);
  40. return offset;
  41. }
  42. /** Write a little-endian 64-bit integer. */
  43. int write_raw_little_endian64(unsigned long long value, void *_buffer, int offset) {
  44. offset = write_raw_byte((char)((value ) & 0xFF), _buffer, offset);
  45. offset = write_raw_byte((char)((value >> 8) & 0xFF), _buffer, offset);
  46. offset = write_raw_byte((char)((value >> 16) & 0xFF), _buffer, offset);
  47. offset = write_raw_byte((char)((value >> 24) & 0xFF), _buffer, offset);
  48. offset = write_raw_byte((char)((value >> 32) & 0xFF), _buffer, offset);
  49. offset = write_raw_byte((char)((value >> 40) & 0xFF), _buffer, offset);
  50. offset = write_raw_byte((char)((value >> 48) & 0xFF), _buffer, offset);
  51. offset = write_raw_byte((char)((value >> 56) & 0xFF), _buffer, offset);
  52. return offset;
  53. }
  54. int write_raw_varint32(unsigned long value, void *_buffer, int offset) {
  55. while (1) {
  56. if ((value & ~0x7F) == 0) {
  57. offset = write_raw_byte((char)value, _buffer, offset);
  58. return offset;
  59. } else {
  60. offset = write_raw_byte((char)((value & 0x7F) | 0x80), _buffer, offset);
  61. value = value >> 7;
  62. }
  63. }
  64. return offset;
  65. }
  66. int write_raw_varint64(unsigned long long value, void *_buffer, int offset) {
  67. while (1) {
  68. if ((value & ~0x7FL) == 0) {
  69. offset = write_raw_byte((char)value, _buffer, offset);
  70. return offset;
  71. } else {
  72. offset = write_raw_byte((char)((value & 0x7F) | 0x80), _buffer, offset);
  73. value = value >> 7;
  74. }
  75. }
  76. return offset;
  77. }
  78. int write_raw_bytes(char *bytes, int bytes_size, void *_buffer, int offset) {
  79. int i;
  80. for(i = 0; i < bytes_size; ++ i) {
  81. offset = write_raw_byte((char)*(bytes + i), _buffer, offset);
  82. }
  83. return offset;
  84. }
  85. unsigned long encode_zig_zag32(signed long n) {
  86. // Note: the right-shift must be arithmetic
  87. return (n << 1) ^ (n >> 31);
  88. }
  89. unsigned long long encode_zig_zag64(signed long long n) {
  90. // Note: the right-shift must be arithmetic
  91. return (n << 1) ^ (n >> 63);
  92. }
  93. signed long decode_zig_zag32(unsigned long n) {
  94. return (n >> 1) ^ -(n & 1);
  95. }
  96. signed long long decode_zig_zag64(unsigned long long n) {
  97. return (n >> 1) ^ -(n & 1);
  98. }
  99. int read_raw_byte(char *tag, void *_buffer, int offset) {
  100. *tag = *((char *) _buffer + offset);
  101. return ++offset;
  102. }
  103. /** Read a 32-bit little-endian integer from the stream. */
  104. int read_raw_little_endian32(unsigned long *tag, void *_buffer, int offset) {
  105. offset = read_raw_byte((char *)tag, _buffer, offset);
  106. char b1 = (char) *tag;
  107. offset = read_raw_byte((char *)tag, _buffer, offset);
  108. char b2 = (char) *tag;
  109. offset = read_raw_byte((char *)tag, _buffer, offset);
  110. char b3 = (char) *tag;
  111. offset = read_raw_byte((char *)tag, _buffer, offset);
  112. char b4 = (char) *tag;
  113. *tag = (((unsigned long)b1 & 0xff) ) |
  114. (((unsigned long)b2 & 0xff) << 8) |
  115. (((unsigned long)b3 & 0xff) << 16) |
  116. (((unsigned long)b4 & 0xff) << 24);
  117. return offset;
  118. }
  119. /** Read a 64-bit little-endian integer from the stream. */
  120. int read_raw_little_endian64(unsigned long long *tag, void *_buffer, int offset) {
  121. offset = read_raw_byte((char *)tag, _buffer, offset);
  122. char b1 = (char) *tag;
  123. offset = read_raw_byte((char *)tag, _buffer, offset);
  124. char b2 = (char) *tag;
  125. offset = read_raw_byte((char *)tag, _buffer, offset);
  126. char b3 = (char) *tag;
  127. offset = read_raw_byte((char *)tag, _buffer, offset);
  128. char b4 = (char) *tag;
  129. offset = read_raw_byte((char *)tag, _buffer, offset);
  130. char b5 = (char) *tag;
  131. offset = read_raw_byte((char *)tag, _buffer, offset);
  132. char b6 = (char) *tag;
  133. offset = read_raw_byte((char *)tag, _buffer, offset);
  134. char b7 = (char) *tag;
  135. offset = read_raw_byte((char *)tag, _buffer, offset);
  136. char b8 = (char) *tag;
  137. *tag = (((unsigned long long)b1 & 0xff) ) |
  138. (((unsigned long long)b2 & 0xff) << 8) |
  139. (((unsigned long long)b3 & 0xff) << 16) |
  140. (((unsigned long long)b4 & 0xff) << 24) |
  141. (((unsigned long long)b5 & 0xff) << 32) |
  142. (((unsigned long long)b6 & 0xff) << 40) |
  143. (((unsigned long long)b7 & 0xff) << 48) |
  144. (((unsigned long long)b8 & 0xff) << 56);
  145. return offset;
  146. }
  147. int read_raw_varint32(unsigned long *tag, void *_buffer, int offset) {
  148. signed char result;
  149. offset = read_raw_byte((char *)&result, _buffer, offset);
  150. if (result >= 0) {
  151. *tag = result;
  152. return offset;
  153. }
  154. *tag = result & 0x7f;
  155. offset = read_raw_byte((char *)&result, _buffer, offset);
  156. if (result >= 0) {
  157. *tag |= result << 7;
  158. } else {
  159. *tag |= (result & 0x7f) << 7;
  160. offset = read_raw_byte((char *)&result, _buffer, offset);
  161. if (result >= 0) {
  162. *tag |= result << 14;
  163. } else {
  164. *tag |= (result & 0x7f) << 14;
  165. offset = read_raw_byte((char *)&result, _buffer, offset);
  166. if (result >= 0) {
  167. *tag |= ((unsigned long)result) << 21;
  168. } else {
  169. *tag |= (((unsigned long)result) & 0x7f) << 21;
  170. offset = read_raw_byte((char *)&result, _buffer, offset);
  171. *tag |= ((unsigned long)result) << 28;
  172. if (result < 0) {
  173. // Discard upper 32 bits.
  174. int i;
  175. for (i = 0; i < 5; ++ i) {
  176. offset = read_raw_byte((char *)&result, _buffer, offset);
  177. if (result >= 0) {
  178. return offset;
  179. }
  180. }
  181. //invalid state
  182. }
  183. }
  184. }
  185. }
  186. return offset;
  187. }
  188. int read_raw_varint64(unsigned long long *tag, void *_buffer, int offset) {
  189. short shift = 0;
  190. signed char b;
  191. *tag = 0;
  192. while (shift < 64) {
  193. offset = read_raw_byte((char *)&b, _buffer, offset);
  194. *tag |= (unsigned long long)(b & 0x7F) << shift;
  195. if ((b & 0x80) == 0) {
  196. return offset;
  197. }
  198. shift += 7;
  199. }
  200. //return error code.
  201. return -1;
  202. }
  203. int can_read_raw_varint32(void *_buffer, int offset, int length) {
  204. signed char c;
  205. // Bound length to valid range [0..5].
  206. if (length < 0) length = 0; else
  207. if (length > 5) length = 5;
  208. while (length > 0) {
  209. offset = read_raw_byte((char *)&c, _buffer, offset);
  210. if (c >= 0) {
  211. return 1; // Can read (1 == true).
  212. }
  213. length--;
  214. }
  215. return 0; // Cannot read (0 == false).
  216. }
  217. int can_read_raw_varint64(void *_buffer, int offset, int length) {
  218. signed char c;
  219. // Bound length to valid range [0..5].
  220. if (length < 0) length = 0; else
  221. if (length > 10) length = 10;
  222. while (length > 0) {
  223. offset = read_raw_byte((char *)&c, _buffer, offset);
  224. if (c >= 0) {
  225. return 1; // Can read (1 == true).
  226. }
  227. length--;
  228. }
  229. return 0; // Cannot read (0 == false).
  230. }
  231. int Message_can_read_delimited_from(void *_buffer, int offset, int length) {
  232. unsigned long size;
  233. int payload_offset;
  234. if (length <= 0) return 0; // Cannot read from empty or invalid message.
  235. if (!can_read_raw_varint32(_buffer, offset, length)) {
  236. return 0; // Could not even read the preceding size as varint32.
  237. }
  238. payload_offset = read_raw_varint32(&size, _buffer, offset);
  239. length = length - (payload_offset - offset);
  240. return (length >= size) ? 1 : 0;
  241. }
  242. unsigned long Message_get_delimited_size(void *_buffer, int offset) {
  243. unsigned long size = 0;
  244. int old_offset = offset;
  245. offset = read_raw_varint32(&size, _buffer, offset);
  246. return size + offset - old_offset;
  247. }
  248. /*******************************************************************
  249. * Enum: Test.proto, line 11
  250. *******************************************************************/
  251. int PhoneType_write_with_tag(enum PhoneType *_PhoneType, void *_buffer, int offset, int tag) {
  252. /* Write tag.*/
  253. offset = write_raw_varint32((tag<<3)+0, _buffer, offset);
  254. /* Write content.*/
  255. offset = write_raw_varint32(*_PhoneType, _buffer, offset);
  256. return offset;
  257. }
  258. /*******************************************************************
  259. * Message: Test.proto, line 63
  260. *******************************************************************/
  261. int AddressBook_write(struct AddressBook *_AddressBook, void *_buffer, int offset) {
  262. /* Write content of each message element.*/
  263. offset = write_raw_varint32((1<<3)+2, _buffer, offset);
  264. offset = write_raw_varint32(_AddressBook->_address_len, _buffer, offset);
  265. offset = write_raw_bytes(_AddressBook->_address, _AddressBook->_address_len, _buffer, offset);
  266. offset = write_raw_varint32((2<<3)+0, _buffer, offset);
  267. if (_AddressBook->_number >= 0)
  268. offset = write_raw_varint32(_AddressBook->_number, _buffer, offset);
  269. else
  270. offset = write_raw_varint64(_AddressBook->_number, _buffer, offset);
  271. return offset;
  272. }
  273. int AddressBook_write_with_tag(struct AddressBook *_AddressBook, void *_buffer, int offset, int tag) {
  274. /* Write tag.*/
  275. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  276. /* Write content.*/
  277. offset = AddressBook_write_delimited_to(_AddressBook, _buffer, offset);
  278. return offset;
  279. }
  280. int AddressBook_write_delimited_to(struct AddressBook *_AddressBook, void *_buffer, int offset) {
  281. int i, shift, new_offset, size;
  282. new_offset = AddressBook_write(_AddressBook, _buffer, offset);
  283. size = new_offset - offset;
  284. shift = (size > 127) ? 2 : 1;
  285. for (i = new_offset - 1; i >= offset; -- i)
  286. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  287. write_raw_varint32((unsigned long) size, _buffer, offset);
  288. return new_offset + shift;
  289. }
  290. void AddressBook_clear(struct AddressBook *_AddressBook) {
  291. _memset(_AddressBook, 0, sizeof(struct AddressBook));
  292. }
  293. int AddressBook_read(void *_buffer, struct AddressBook *_AddressBook, int offset, int limit) {
  294. int i = 0;
  295. unsigned long tag = i;
  296. /* Reset all attributes to 0 in advance. */
  297. AddressBook_clear(_AddressBook);
  298. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  299. while(offset < limit) {
  300. offset = read_raw_varint32(&tag, _buffer, offset);
  301. tag = tag>>3;
  302. switch(tag){
  303. //tag of: _AddressBook._address
  304. case 1 :
  305. /* Re-use 'tag' to store string length. */
  306. offset = read_raw_varint32(&tag, _buffer, offset);
  307. _AddressBook->_address_len = tag;
  308. for(i = 0; i < tag; ++ i)
  309. offset = read_raw_byte((_AddressBook->_address + i), _buffer, offset);
  310. break;
  311. //tag of: _AddressBook._number
  312. case 2 :
  313. offset = read_raw_varint32(&tag, _buffer, offset);
  314. _AddressBook->_number = (signed long)tag;
  315. break;
  316. }
  317. }
  318. return offset;
  319. }
  320. int AddressBook_read_delimited_from(void *_buffer, struct AddressBook *_AddressBook, int offset) {
  321. unsigned long size;
  322. offset = read_raw_varint32(&size, _buffer, offset);
  323. AddressBook_read(_buffer, _AddressBook, offset, size + offset);
  324. return offset + size;
  325. }
  326. /*******************************************************************
  327. * Message: Test.proto, line 72
  328. *******************************************************************/
  329. int B_write(struct B *_B, void *_buffer, int offset) {
  330. /* Write content of each message element.*/
  331. offset = write_raw_varint32((1<<3)+0, _buffer, offset);
  332. if (_B->_i >= 0)
  333. offset = write_raw_varint32(_B->_i, _buffer, offset);
  334. else
  335. offset = write_raw_varint64(_B->_i, _buffer, offset);
  336. return offset;
  337. }
  338. int B_write_with_tag(struct B *_B, void *_buffer, int offset, int tag) {
  339. /* Write tag.*/
  340. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  341. /* Write content.*/
  342. offset = B_write_delimited_to(_B, _buffer, offset);
  343. return offset;
  344. }
  345. int B_write_delimited_to(struct B *_B, void *_buffer, int offset) {
  346. int i, shift, new_offset, size;
  347. new_offset = B_write(_B, _buffer, offset);
  348. size = new_offset - offset;
  349. shift = (size > 127) ? 2 : 1;
  350. for (i = new_offset - 1; i >= offset; -- i)
  351. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  352. write_raw_varint32((unsigned long) size, _buffer, offset);
  353. return new_offset + shift;
  354. }
  355. void B_clear(struct B *_B) {
  356. _memset(_B, 0, sizeof(struct B));
  357. }
  358. int B_read(void *_buffer, struct B *_B, int offset, int limit) {
  359. int i = 0;
  360. unsigned long tag = i;
  361. /* Reset all attributes to 0 in advance. */
  362. B_clear(_B);
  363. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  364. while(offset < limit) {
  365. offset = read_raw_varint32(&tag, _buffer, offset);
  366. tag = tag>>3;
  367. switch(tag){
  368. //tag of: _B._i
  369. case 1 :
  370. offset = read_raw_varint32(&tag, _buffer, offset);
  371. _B->_i = (signed long)tag;
  372. break;
  373. }
  374. }
  375. return offset;
  376. }
  377. int B_read_delimited_from(void *_buffer, struct B *_B, int offset) {
  378. unsigned long size;
  379. offset = read_raw_varint32(&size, _buffer, offset);
  380. B_read(_buffer, _B, offset, size + offset);
  381. return offset + size;
  382. }
  383. /*******************************************************************
  384. * Message: Test.proto, line 17
  385. *******************************************************************/
  386. int PhoneNumber_write(struct PhoneNumber *_PhoneNumber, void *_buffer, int offset) {
  387. /* Write content of each message element.*/
  388. offset = write_raw_varint32((1<<3)+5, _buffer, offset);
  389. unsigned long *number_ptr = (unsigned long *)&_PhoneNumber->_number;
  390. offset = write_raw_little_endian32(*number_ptr, _buffer, offset);
  391. offset = PhoneType_write_with_tag(&_PhoneNumber->_type, _buffer, offset, 2);
  392. return offset;
  393. }
  394. int PhoneNumber_write_with_tag(struct PhoneNumber *_PhoneNumber, void *_buffer, int offset, int tag) {
  395. /* Write tag.*/
  396. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  397. /* Write content.*/
  398. offset = PhoneNumber_write_delimited_to(_PhoneNumber, _buffer, offset);
  399. return offset;
  400. }
  401. int PhoneNumber_write_delimited_to(struct PhoneNumber *_PhoneNumber, void *_buffer, int offset) {
  402. int i, shift, new_offset, size;
  403. new_offset = PhoneNumber_write(_PhoneNumber, _buffer, offset);
  404. size = new_offset - offset;
  405. shift = (size > 127) ? 2 : 1;
  406. for (i = new_offset - 1; i >= offset; -- i)
  407. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  408. write_raw_varint32((unsigned long) size, _buffer, offset);
  409. return new_offset + shift;
  410. }
  411. void PhoneNumber_clear(struct PhoneNumber *_PhoneNumber) {
  412. _memset(_PhoneNumber, 0, sizeof(struct PhoneNumber));
  413. }
  414. int PhoneNumber_read(void *_buffer, struct PhoneNumber *_PhoneNumber, int offset, int limit) {
  415. int i = 0;
  416. unsigned long tag = i;
  417. /* Reset all attributes to 0 in advance. */
  418. PhoneNumber_clear(_PhoneNumber);
  419. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  420. while(offset < limit) {
  421. offset = read_raw_varint32(&tag, _buffer, offset);
  422. tag = tag>>3;
  423. switch(tag){
  424. //tag of: _PhoneNumber._number
  425. case 1 :
  426. offset = read_raw_little_endian32(&tag, _buffer, offset);
  427. float *number = (float *)(&tag);
  428. _PhoneNumber->_number = *number;
  429. break;
  430. //tag of: _PhoneNumber._type
  431. case 2 :
  432. offset = read_raw_varint32(&tag, _buffer, offset);
  433. _PhoneNumber->_type = tag;
  434. break;
  435. }
  436. }
  437. return offset;
  438. }
  439. int PhoneNumber_read_delimited_from(void *_buffer, struct PhoneNumber *_PhoneNumber, int offset) {
  440. unsigned long size;
  441. offset = read_raw_varint32(&size, _buffer, offset);
  442. PhoneNumber_read(_buffer, _PhoneNumber, offset, size + offset);
  443. return offset + size;
  444. }
  445. /*******************************************************************
  446. * Message: Test.proto, line 22
  447. *******************************************************************/
  448. int Person_write(struct Person *_Person, void *_buffer, int offset) {
  449. /* Write content of each message element.*/
  450. offset = AddressBook_write_with_tag(&_Person->_ab, _buffer, offset, 38);
  451. offset = write_raw_varint32((1<<3)+2, _buffer, offset);
  452. offset = write_raw_varint32(_Person->_name1_len, _buffer, offset);
  453. offset = write_raw_bytes(_Person->_name1, _Person->_name1_len, _buffer, offset);
  454. offset = write_raw_varint32((2<<3)+2, _buffer, offset);
  455. offset = write_raw_varint32(_Person->_name2_len, _buffer, offset);
  456. offset = write_raw_bytes(_Person->_name2, _Person->_name2_len, _buffer, offset);
  457. offset = write_raw_varint32((3<<3)+2, _buffer, offset);
  458. offset = write_raw_varint32(_Person->_name3_len, _buffer, offset);
  459. offset = write_raw_bytes(_Person->_name3, _Person->_name3_len, _buffer, offset);
  460. offset = write_raw_varint32((4<<3)+2, _buffer, offset);
  461. offset = write_raw_varint32(_Person->_name4_len, _buffer, offset);
  462. offset = write_raw_bytes(_Person->_name4, _Person->_name4_len, _buffer, offset);
  463. offset = write_raw_varint32((5<<3)+2, _buffer, offset);
  464. offset = write_raw_varint32(_Person->_name5_len, _buffer, offset);
  465. offset = write_raw_bytes(_Person->_name5, _Person->_name5_len, _buffer, offset);
  466. offset = write_raw_varint32((6<<3)+2, _buffer, offset);
  467. offset = write_raw_varint32(_Person->_name6_len, _buffer, offset);
  468. offset = write_raw_bytes(_Person->_name6, _Person->_name6_len, _buffer, offset);
  469. offset = write_raw_varint32((36<<3)+2, _buffer, offset);
  470. offset = write_raw_varint32(_Person->_bname_len, _buffer, offset);
  471. offset = write_raw_bytes(_Person->_bname, _Person->_bname_len, _buffer, offset);
  472. offset = write_raw_varint32((7<<3)+0, _buffer, offset);
  473. if (_Person->_id >= 0)
  474. offset = write_raw_varint32(_Person->_id, _buffer, offset);
  475. else
  476. offset = write_raw_varint64(_Person->_id, _buffer, offset);
  477. offset = write_raw_varint32((16<<3)+0, _buffer, offset);
  478. offset = write_raw_varint64(_Person->_id64, _buffer, offset);
  479. offset = write_raw_varint32((20<<3)+0, _buffer, offset);
  480. offset = write_raw_varint32(encode_zig_zag32(_Person->_sid), _buffer, offset);
  481. offset = write_raw_varint32((22<<3)+0, _buffer, offset);
  482. offset = write_raw_varint64(encode_zig_zag64(_Person->_sid64), _buffer, offset);
  483. offset = write_raw_varint32((24<<3)+0, _buffer, offset);
  484. offset = write_raw_varint32(_Person->_uid, _buffer, offset);
  485. offset = write_raw_varint32((26<<3)+0, _buffer, offset);
  486. offset = write_raw_varint64(_Person->_uid64, _buffer, offset);
  487. offset = write_raw_varint32((28<<3)+5, _buffer, offset);
  488. offset = write_raw_little_endian32(_Person->_fid32, _buffer, offset);
  489. offset = write_raw_varint32((30<<3)+1, _buffer, offset);
  490. offset = write_raw_little_endian64(_Person->_fid64, _buffer, offset);
  491. offset = write_raw_varint32((32<<3)+5, _buffer, offset);
  492. offset = write_raw_little_endian32(_Person->_sfid32, _buffer, offset);
  493. offset = write_raw_varint32((34<<3)+1, _buffer, offset);
  494. offset = write_raw_little_endian64(_Person->_sfid64, _buffer, offset);
  495. offset = write_raw_varint32((8<<3)+5, _buffer, offset);
  496. unsigned long *iq_ptr = (unsigned long *)&_Person->_iq;
  497. offset = write_raw_little_endian32(*iq_ptr, _buffer, offset);
  498. offset = write_raw_varint32((18<<3)+1, _buffer, offset);
  499. unsigned long long *iqd_ptr = (unsigned long long*)&_Person->_iqd;
  500. offset = write_raw_little_endian64(*iqd_ptr, _buffer, offset);
  501. offset = write_raw_varint32((9<<3)+0, _buffer, offset);
  502. offset = write_raw_byte(_Person->_email, _buffer, offset);
  503. offset = PhoneType_write_with_tag(&_Person->_phone, _buffer, offset, 10);
  504. int strAttr_cnt;
  505. for (strAttr_cnt = 0; strAttr_cnt < _Person->_strAttr_repeated_len; ++ strAttr_cnt) {
  506. offset = write_raw_varint32((11<<3)+2, _buffer, offset);
  507. offset = write_raw_varint32(_Person->_strAttr_len[strAttr_cnt], _buffer, offset);
  508. offset = write_raw_bytes(_Person->_strAttr[strAttr_cnt], _Person->_strAttr_len[strAttr_cnt], _buffer, offset);
  509. }
  510. int bAttr_cnt;
  511. for (bAttr_cnt = 0; bAttr_cnt < _Person->_bAttr_repeated_len; ++ bAttr_cnt) {
  512. offset = write_raw_varint32((37<<3)+2, _buffer, offset);
  513. offset = write_raw_varint32(_Person->_bAttr_len[bAttr_cnt], _buffer, offset);
  514. offset = write_raw_bytes(_Person->_bAttr[bAttr_cnt], _Person->_bAttr_len[bAttr_cnt], _buffer, offset);
  515. }
  516. int intAttr_cnt;
  517. for (intAttr_cnt = 0; intAttr_cnt < _Person->_intAttr_repeated_len; ++ intAttr_cnt) {
  518. offset = write_raw_varint32((12<<3)+0, _buffer, offset);
  519. if (_Person->_intAttr[intAttr_cnt] >= 0)
  520. offset = write_raw_varint32(_Person->_intAttr[intAttr_cnt], _buffer, offset);
  521. else
  522. offset = write_raw_varint64(_Person->_intAttr[intAttr_cnt], _buffer, offset);
  523. }
  524. int int64Attr_cnt;
  525. for (int64Attr_cnt = 0; int64Attr_cnt < _Person->_int64Attr_repeated_len; ++ int64Attr_cnt) {
  526. offset = write_raw_varint32((17<<3)+0, _buffer, offset);
  527. offset = write_raw_varint64(_Person->_int64Attr[int64Attr_cnt], _buffer, offset);
  528. }
  529. int sintAttr_cnt;
  530. for (sintAttr_cnt = 0; sintAttr_cnt < _Person->_sintAttr_repeated_len; ++ sintAttr_cnt) {
  531. offset = write_raw_varint32((21<<3)+0, _buffer, offset);
  532. offset = write_raw_varint32(encode_zig_zag32(_Person->_sintAttr[sintAttr_cnt]), _buffer, offset);
  533. }
  534. int sintAttr64_cnt;
  535. for (sintAttr64_cnt = 0; sintAttr64_cnt < _Person->_sintAttr64_repeated_len; ++ sintAttr64_cnt) {
  536. offset = write_raw_varint32((23<<3)+0, _buffer, offset);
  537. offset = write_raw_varint64(encode_zig_zag64(_Person->_sintAttr64[sintAttr64_cnt]), _buffer, offset);
  538. }
  539. int uintAttr_cnt;
  540. for (uintAttr_cnt = 0; uintAttr_cnt < _Person->_uintAttr_repeated_len; ++ uintAttr_cnt) {
  541. offset = write_raw_varint32((25<<3)+0, _buffer, offset);
  542. offset = write_raw_varint32(_Person->_uintAttr[uintAttr_cnt], _buffer, offset);
  543. }
  544. int uintAttr64_cnt;
  545. for (uintAttr64_cnt = 0; uintAttr64_cnt < _Person->_uintAttr64_repeated_len; ++ uintAttr64_cnt) {
  546. offset = write_raw_varint32((27<<3)+0, _buffer, offset);
  547. offset = write_raw_varint64(_Person->_uintAttr64[uintAttr64_cnt], _buffer, offset);
  548. }
  549. int fintAttr_cnt;
  550. for (fintAttr_cnt = 0; fintAttr_cnt < _Person->_fintAttr_repeated_len; ++ fintAttr_cnt) {
  551. offset = write_raw_varint32((29<<3)+5, _buffer, offset);
  552. offset = write_raw_little_endian32(_Person->_fintAttr[fintAttr_cnt], _buffer, offset);
  553. }
  554. int fintAttr64_cnt;
  555. for (fintAttr64_cnt = 0; fintAttr64_cnt < _Person->_fintAttr64_repeated_len; ++ fintAttr64_cnt) {
  556. offset = write_raw_varint32((31<<3)+1, _buffer, offset);
  557. offset = write_raw_little_endian64(_Person->_fintAttr64[fintAttr64_cnt], _buffer, offset);
  558. }
  559. int sfintAttr_cnt;
  560. for (sfintAttr_cnt = 0; sfintAttr_cnt < _Person->_sfintAttr_repeated_len; ++ sfintAttr_cnt) {
  561. offset = write_raw_varint32((33<<3)+5, _buffer, offset);
  562. offset = write_raw_little_endian32(_Person->_sfintAttr[sfintAttr_cnt], _buffer, offset);
  563. }
  564. int sfintAttr64_cnt;
  565. for (sfintAttr64_cnt = 0; sfintAttr64_cnt < _Person->_sfintAttr64_repeated_len; ++ sfintAttr64_cnt) {
  566. offset = write_raw_varint32((35<<3)+1, _buffer, offset);
  567. offset = write_raw_little_endian64(_Person->_sfintAttr64[sfintAttr64_cnt], _buffer, offset);
  568. }
  569. int boolAttr_cnt;
  570. for (boolAttr_cnt = 0; boolAttr_cnt < _Person->_boolAttr_repeated_len; ++ boolAttr_cnt) {
  571. offset = write_raw_varint32((13<<3)+0, _buffer, offset);
  572. offset = write_raw_byte(_Person->_boolAttr[boolAttr_cnt], _buffer, offset);
  573. }
  574. int floatAttr_cnt;
  575. for (floatAttr_cnt = 0; floatAttr_cnt < _Person->_floatAttr_repeated_len; ++ floatAttr_cnt) {
  576. offset = write_raw_varint32((14<<3)+5, _buffer, offset);
  577. unsigned long *floatAttr_ptr = (unsigned long *)&_Person->_floatAttr[floatAttr_cnt];
  578. offset = write_raw_little_endian32(*floatAttr_ptr, _buffer, offset);
  579. }
  580. int doubleAttr_cnt;
  581. for (doubleAttr_cnt = 0; doubleAttr_cnt < _Person->_doubleAttr_repeated_len; ++ doubleAttr_cnt) {
  582. offset = write_raw_varint32((19<<3)+1, _buffer, offset);
  583. unsigned long long *doubleAttr_ptr = (unsigned long long*)&_Person->_doubleAttr[doubleAttr_cnt];
  584. offset = write_raw_little_endian64(*doubleAttr_ptr, _buffer, offset);
  585. }
  586. int enumAttr_cnt;
  587. for (enumAttr_cnt = 0; enumAttr_cnt < _Person->_enumAttr_repeated_len; ++ enumAttr_cnt) {
  588. offset = PhoneType_write_with_tag(&_Person->_enumAttr[enumAttr_cnt], _buffer, offset, 15);
  589. }
  590. return offset;
  591. }
  592. int Person_write_with_tag(struct Person *_Person, void *_buffer, int offset, int tag) {
  593. /* Write tag.*/
  594. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  595. /* Write content.*/
  596. offset = Person_write_delimited_to(_Person, _buffer, offset);
  597. return offset;
  598. }
  599. int Person_write_delimited_to(struct Person *_Person, void *_buffer, int offset) {
  600. int i, shift, new_offset, size;
  601. new_offset = Person_write(_Person, _buffer, offset);
  602. size = new_offset - offset;
  603. shift = (size > 127) ? 2 : 1;
  604. for (i = new_offset - 1; i >= offset; -- i)
  605. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  606. write_raw_varint32((unsigned long) size, _buffer, offset);
  607. return new_offset + shift;
  608. }
  609. void Person_clear(struct Person *_Person) {
  610. _memset(_Person, 0, sizeof(struct Person));
  611. }
  612. int Person_read(void *_buffer, struct Person *_Person, int offset, int limit) {
  613. int i = 0;
  614. unsigned long tag = i;
  615. unsigned long long value = i;
  616. /* Reset all attributes to 0 in advance. */
  617. Person_clear(_Person);
  618. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  619. while(offset < limit) {
  620. offset = read_raw_varint32(&tag, _buffer, offset);
  621. tag = tag>>3;
  622. switch(tag){
  623. //tag of: _Person._ab
  624. case 38 :
  625. offset = AddressBook_read_delimited_from(_buffer, &_Person->_ab, offset);
  626. break;
  627. //tag of: _Person._name1
  628. case 1 :
  629. /* Re-use 'tag' to store string length. */
  630. offset = read_raw_varint32(&tag, _buffer, offset);
  631. _Person->_name1_len = tag;
  632. for(i = 0; i < tag; ++ i)
  633. offset = read_raw_byte((_Person->_name1 + i), _buffer, offset);
  634. break;
  635. //tag of: _Person._name2
  636. case 2 :
  637. /* Re-use 'tag' to store string length. */
  638. offset = read_raw_varint32(&tag, _buffer, offset);
  639. _Person->_name2_len = tag;
  640. for(i = 0; i < tag; ++ i)
  641. offset = read_raw_byte((_Person->_name2 + i), _buffer, offset);
  642. break;
  643. //tag of: _Person._name3
  644. case 3 :
  645. /* Re-use 'tag' to store string length. */
  646. offset = read_raw_varint32(&tag, _buffer, offset);
  647. _Person->_name3_len = tag;
  648. for(i = 0; i < tag; ++ i)
  649. offset = read_raw_byte((_Person->_name3 + i), _buffer, offset);
  650. break;
  651. //tag of: _Person._name4
  652. case 4 :
  653. /* Re-use 'tag' to store string length. */
  654. offset = read_raw_varint32(&tag, _buffer, offset);
  655. _Person->_name4_len = tag;
  656. for(i = 0; i < tag; ++ i)
  657. offset = read_raw_byte((_Person->_name4 + i), _buffer, offset);
  658. break;
  659. //tag of: _Person._name5
  660. case 5 :
  661. /* Re-use 'tag' to store string length. */
  662. offset = read_raw_varint32(&tag, _buffer, offset);
  663. _Person->_name5_len = tag;
  664. for(i = 0; i < tag; ++ i)
  665. offset = read_raw_byte((_Person->_name5 + i), _buffer, offset);
  666. break;
  667. //tag of: _Person._name6
  668. case 6 :
  669. /* Re-use 'tag' to store string length. */
  670. offset = read_raw_varint32(&tag, _buffer, offset);
  671. _Person->_name6_len = tag;
  672. for(i = 0; i < tag; ++ i)
  673. offset = read_raw_byte((_Person->_name6 + i), _buffer, offset);
  674. break;
  675. //tag of: _Person._bname
  676. case 36 :
  677. /* Re-use 'tag' to store string length. */
  678. offset = read_raw_varint32(&tag, _buffer, offset);
  679. _Person->_bname_len = tag;
  680. for(i = 0; i < tag; ++ i)
  681. offset = read_raw_byte((_Person->_bname + i), _buffer, offset);
  682. break;
  683. //tag of: _Person._id
  684. case 7 :
  685. offset = read_raw_varint32(&tag, _buffer, offset);
  686. _Person->_id = (signed long)tag;
  687. break;
  688. //tag of: _Person._id64
  689. case 16 :
  690. offset = read_raw_varint64(&value, _buffer, offset);
  691. _Person->_id64 = (signed long long)value;
  692. break;
  693. //tag of: _Person._sid
  694. case 20 :
  695. offset = read_raw_varint32(&tag, _buffer, offset);
  696. _Person->_sid = decode_zig_zag32(tag);
  697. break;
  698. //tag of: _Person._sid64
  699. case 22 :
  700. offset = read_raw_varint64(&value, _buffer, offset);
  701. _Person->_sid64 = decode_zig_zag64(value);
  702. break;
  703. //tag of: _Person._uid
  704. case 24 :
  705. offset = read_raw_varint32(&tag, _buffer, offset);
  706. _Person->_uid = tag;
  707. break;
  708. //tag of: _Person._uid64
  709. case 26 :
  710. offset = read_raw_varint64(&value, _buffer, offset);
  711. _Person->_uid64 = value;
  712. break;
  713. //tag of: _Person._fid32
  714. case 28 :
  715. offset = read_raw_little_endian32(&tag, _buffer, offset);
  716. _Person->_fid32 = tag;
  717. break;
  718. //tag of: _Person._fid64
  719. case 30 :
  720. offset = read_raw_little_endian64(&value, _buffer, offset);
  721. _Person->_fid64 = value;
  722. break;
  723. //tag of: _Person._sfid32
  724. case 32 :
  725. offset = read_raw_little_endian32(&tag, _buffer, offset);
  726. _Person->_sfid32 = (signed long)tag;
  727. break;
  728. //tag of: _Person._sfid64
  729. case 34 :
  730. offset = read_raw_little_endian64(&value, _buffer, offset);
  731. _Person->_sfid64 = (signed long long)value;
  732. break;
  733. //tag of: _Person._iq
  734. case 8 :
  735. offset = read_raw_little_endian32(&tag, _buffer, offset);
  736. float *iq = (float *)(&tag);
  737. _Person->_iq = *iq;
  738. break;
  739. //tag of: _Person._iqd
  740. case 18 :
  741. offset = read_raw_little_endian64(&value, _buffer, offset);
  742. double *iqd = (double *)(&value);
  743. _Person->_iqd = *iqd;
  744. break;
  745. //tag of: _Person._email
  746. case 9 :
  747. offset = read_raw_varint32(&tag, _buffer, offset);
  748. _Person->_email = tag & 1;
  749. break;
  750. //tag of: _Person._phone
  751. case 10 :
  752. offset = read_raw_varint32(&tag, _buffer, offset);
  753. _Person->_phone = tag;
  754. break;
  755. //tag of: _Person._strAttr
  756. case 11 :
  757. /* Re-use 'tag' to store string length. */
  758. offset = read_raw_varint32(&tag, _buffer, offset);
  759. /* Set length of current string. */
  760. _Person->_strAttr_len[(int)_Person->_strAttr_repeated_len] = tag;
  761. /* Copy raw bytes of current string. */
  762. for(i = 0; i < tag; ++ i) {
  763. offset = read_raw_byte(&_Person->_strAttr[(int)_Person->_strAttr_repeated_len][i], _buffer, offset);
  764. }
  765. /* Advance to next string. */
  766. _Person->_strAttr_repeated_len++;
  767. break;
  768. //tag of: _Person._bAttr
  769. case 37 :
  770. /* Re-use 'tag' to store string length. */
  771. offset = read_raw_varint32(&tag, _buffer, offset);
  772. /* Set length of current string. */
  773. _Person->_bAttr_len[(int)_Person->_bAttr_repeated_len] = tag;
  774. /* Copy raw bytes of current string. */
  775. for(i = 0; i < tag; ++ i) {
  776. offset = read_raw_byte(&_Person->_bAttr[(int)_Person->_bAttr_repeated_len][i], _buffer, offset);
  777. }
  778. /* Advance to next string. */
  779. _Person->_bAttr_repeated_len++;
  780. break;
  781. //tag of: _Person._intAttr
  782. case 12 :
  783. offset = read_raw_varint32(&tag, _buffer, offset);
  784. _Person->_intAttr[(int)_Person->_intAttr_repeated_len++] = (signed long)tag;
  785. break;
  786. //tag of: _Person._int64Attr
  787. case 17 :
  788. offset = read_raw_varint64(&value, _buffer, offset);
  789. _Person->_int64Attr[(int)_Person->_int64Attr_repeated_len++] = (signed long long)value;
  790. break;
  791. //tag of: _Person._sintAttr
  792. case 21 :
  793. offset = read_raw_varint32(&tag, _buffer, offset);
  794. _Person->_sintAttr[(int)_Person->_sintAttr_repeated_len++] = decode_zig_zag32(tag);
  795. break;
  796. //tag of: _Person._sintAttr64
  797. case 23 :
  798. offset = read_raw_varint64(&value, _buffer, offset);
  799. _Person->_sintAttr64[(int)_Person->_sintAttr64_repeated_len++] = decode_zig_zag64(value);
  800. break;
  801. //tag of: _Person._uintAttr
  802. case 25 :
  803. offset = read_raw_varint32(&tag, _buffer, offset);
  804. _Person->_uintAttr[(int)_Person->_uintAttr_repeated_len++] = tag;
  805. break;
  806. //tag of: _Person._uintAttr64
  807. case 27 :
  808. offset = read_raw_varint64(&value, _buffer, offset);
  809. _Person->_uintAttr64[(int)_Person->_uintAttr64_repeated_len++] = value;
  810. break;
  811. //tag of: _Person._fintAttr
  812. case 29 :
  813. offset = read_raw_little_endian32(&tag, _buffer, offset);
  814. _Person->_fintAttr[(int)_Person->_fintAttr_repeated_len++] = tag;
  815. break;
  816. //tag of: _Person._fintAttr64
  817. case 31 :
  818. offset = read_raw_little_endian64(&value, _buffer, offset);
  819. _Person->_fintAttr64[(int)_Person->_fintAttr64_repeated_len++] = value;
  820. break;
  821. //tag of: _Person._sfintAttr
  822. case 33 :
  823. offset = read_raw_little_endian32(&tag, _buffer, offset);
  824. _Person->_sfintAttr[(int)_Person->_sfintAttr_repeated_len++] = (signed long)tag;
  825. break;
  826. //tag of: _Person._sfintAttr64
  827. case 35 :
  828. offset = read_raw_little_endian64(&value, _buffer, offset);
  829. _Person->_sfintAttr64[(int)_Person->_sfintAttr64_repeated_len++] = (signed long long)value;
  830. break;
  831. //tag of: _Person._boolAttr
  832. case 13 :
  833. offset = read_raw_varint32(&tag, _buffer, offset);
  834. _Person->_boolAttr[(int)_Person->_boolAttr_repeated_len++] = tag & 1;
  835. break;
  836. //tag of: _Person._floatAttr
  837. case 14 :
  838. offset = read_raw_little_endian32(&tag, _buffer, offset);
  839. float *floatAttr = (float *)(&tag);
  840. _Person->_floatAttr[(int)_Person->_floatAttr_repeated_len++] = *floatAttr;
  841. break;
  842. //tag of: _Person._doubleAttr
  843. case 19 :
  844. offset = read_raw_little_endian64(&value, _buffer, offset);
  845. double *doubleAttr = (double *)(&value);
  846. _Person->_doubleAttr[(int)_Person->_doubleAttr_repeated_len++] = *doubleAttr;
  847. break;
  848. //tag of: _Person._enumAttr
  849. case 15 :
  850. offset = read_raw_varint32(&tag, _buffer, offset);
  851. _Person->_enumAttr[(int)_Person->_enumAttr_repeated_len++] = tag;
  852. break;
  853. }
  854. }
  855. return offset;
  856. }
  857. int Person_read_delimited_from(void *_buffer, struct Person *_Person, int offset) {
  858. unsigned long size;
  859. offset = read_raw_varint32(&size, _buffer, offset);
  860. Person_read(_buffer, _Person, offset, size + offset);
  861. return offset + size;
  862. }
  863. /*******************************************************************
  864. * Message: Test.proto, line 68
  865. *******************************************************************/
  866. int C_write(struct C *_C, void *_buffer, int offset) {
  867. /* Write content of each message element.*/
  868. offset = B_write_with_tag(&_C->_b, _buffer, offset, 1);
  869. return offset;
  870. }
  871. int C_write_with_tag(struct C *_C, void *_buffer, int offset, int tag) {
  872. /* Write tag.*/
  873. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  874. /* Write content.*/
  875. offset = C_write_delimited_to(_C, _buffer, offset);
  876. return offset;
  877. }
  878. int C_write_delimited_to(struct C *_C, void *_buffer, int offset) {
  879. int i, shift, new_offset, size;
  880. new_offset = C_write(_C, _buffer, offset);
  881. size = new_offset - offset;
  882. shift = (size > 127) ? 2 : 1;
  883. for (i = new_offset - 1; i >= offset; -- i)
  884. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  885. write_raw_varint32((unsigned long) size, _buffer, offset);
  886. return new_offset + shift;
  887. }
  888. void C_clear(struct C *_C) {
  889. _memset(_C, 0, sizeof(struct C));
  890. }
  891. int C_read(void *_buffer, struct C *_C, int offset, int limit) {
  892. int i = 0;
  893. unsigned long tag = i;
  894. /* Reset all attributes to 0 in advance. */
  895. C_clear(_C);
  896. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  897. while(offset < limit) {
  898. offset = read_raw_varint32(&tag, _buffer, offset);
  899. tag = tag>>3;
  900. switch(tag){
  901. //tag of: _C._b
  902. case 1 :
  903. offset = B_read_delimited_from(_buffer, &_C->_b, offset);
  904. break;
  905. }
  906. }
  907. return offset;
  908. }
  909. int C_read_delimited_from(void *_buffer, struct C *_C, int offset) {
  910. unsigned long size;
  911. offset = read_raw_varint32(&size, _buffer, offset);
  912. C_read(_buffer, _C, offset, size + offset);
  913. return offset + size;
  914. }
  915. /*******************************************************************
  916. * Message: Test.proto, line 76
  917. *******************************************************************/
  918. int A_write(struct A *_A, void *_buffer, int offset) {
  919. /* Write content of each message element.*/
  920. offset = B_write_with_tag(&_A->_b, _buffer, offset, 1);
  921. return offset;
  922. }
  923. int A_write_with_tag(struct A *_A, void *_buffer, int offset, int tag) {
  924. /* Write tag.*/
  925. offset = write_raw_varint32((tag<<3)+2, _buffer, offset);
  926. /* Write content.*/
  927. offset = A_write_delimited_to(_A, _buffer, offset);
  928. return offset;
  929. }
  930. int A_write_delimited_to(struct A *_A, void *_buffer, int offset) {
  931. int i, shift, new_offset, size;
  932. new_offset = A_write(_A, _buffer, offset);
  933. size = new_offset - offset;
  934. shift = (size > 127) ? 2 : 1;
  935. for (i = new_offset - 1; i >= offset; -- i)
  936. *((char *)_buffer + i + shift) = *((char *)_buffer + i);
  937. write_raw_varint32((unsigned long) size, _buffer, offset);
  938. return new_offset + shift;
  939. }
  940. void A_clear(struct A *_A) {
  941. _memset(_A, 0, sizeof(struct A));
  942. }
  943. int A_read(void *_buffer, struct A *_A, int offset, int limit) {
  944. int i = 0;
  945. unsigned long tag = i;
  946. /* Reset all attributes to 0 in advance. */
  947. A_clear(_A);
  948. /* Read/interpret all attributes from buffer offset until upper limit is reached. */
  949. while(offset < limit) {
  950. offset = read_raw_varint32(&tag, _buffer, offset);
  951. tag = tag>>3;
  952. switch(tag){
  953. //tag of: _A._b
  954. case 1 :
  955. offset = B_read_delimited_from(_buffer, &_A->_b, offset);
  956. break;
  957. }
  958. }
  959. return offset;
  960. }
  961. int A_read_delimited_from(void *_buffer, struct A *_A, int offset) {
  962. unsigned long size;
  963. offset = read_raw_varint32(&size, _buffer, offset);
  964. A_read(_buffer, _A, offset, size + offset);
  965. return offset + size;
  966. }