pbTest1Messages.pas 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. { Unit pbTest1Messages.pas }
  2. { Generated from Test1.proto }
  3. { Package Test1 }
  4. unit pbTest1Messages;
  5. interface
  6. uses
  7. cUtils,
  8. cStrings,
  9. cProtoBufUtils,
  10. pbTestImport1Messages;
  11. { TEnumG0 }
  12. type
  13. TEnumG0 = (
  14. enumg0G1 = 1,
  15. enumg0G2 = 2
  16. );
  17. function pbEncodeValueEnumG0(var Buf; const BufSize: Integer; const Value: TEnumG0): Integer;
  18. function pbEncodeFieldEnumG0(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TEnumG0): Integer;
  19. function pbDecodeValueEnumG0(const Buf; const BufSize: Integer; var Value: TEnumG0): Integer;
  20. procedure pbDecodeFieldEnumG0(const Field: TpbProtoBufDecodeField; var Value: TEnumG0);
  21. { TTestMsg0Record }
  22. type
  23. TTestMsg0Record = record
  24. Field1 : LongInt;
  25. Field2 : Int64;
  26. end;
  27. PTestMsg0Record = ^TTestMsg0Record;
  28. procedure TestMsg0RecordInit(var A: TTestMsg0Record);
  29. procedure TestMsg0RecordFinalise(var A: TTestMsg0Record);
  30. function pbEncodeDataTestMsg0Record(var Buf; const BufSize: Integer; const A: TTestMsg0Record): Integer;
  31. function pbEncodeValueTestMsg0Record(var Buf; const BufSize: Integer; const A: TTestMsg0Record): Integer;
  32. function pbEncodeFieldTestMsg0Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestMsg0Record): Integer;
  33. function pbDecodeValueTestMsg0Record(const Buf; const BufSize: Integer; var Value: TTestMsg0Record): Integer;
  34. procedure pbDecodeFieldTestMsg0Record(const Field: TpbProtoBufDecodeField; var Value: TTestMsg0Record);
  35. { TEnum1 }
  36. type
  37. TEnum1 = (
  38. enum1Val1 = 1,
  39. enum1Val2 = 2
  40. );
  41. function pbEncodeValueEnum1(var Buf; const BufSize: Integer; const Value: TEnum1): Integer;
  42. function pbEncodeFieldEnum1(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TEnum1): Integer;
  43. function pbDecodeValueEnum1(const Buf; const BufSize: Integer; var Value: TEnum1): Integer;
  44. procedure pbDecodeFieldEnum1(const Field: TpbProtoBufDecodeField; var Value: TEnum1);
  45. { TDynArrayInt32 }
  46. type
  47. TDynArrayInt32 = array of LongInt;
  48. function pbEncodeFieldDynArrayInt32(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayInt32): Integer;
  49. function pbEncodeFieldDynArrayInt32_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayInt32): Integer;
  50. procedure pbDecodeFieldDynArrayInt32(const Field: TpbProtoBufDecodeField; var Value: TDynArrayInt32);
  51. procedure pbDecodeFieldDynArrayInt32_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayInt32);
  52. { TDynArrayString }
  53. type
  54. TDynArrayString = array of AnsiString;
  55. function pbEncodeFieldDynArrayString(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayString): Integer;
  56. function pbEncodeFieldDynArrayString_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayString): Integer;
  57. procedure pbDecodeFieldDynArrayString(const Field: TpbProtoBufDecodeField; var Value: TDynArrayString);
  58. procedure pbDecodeFieldDynArrayString_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayString);
  59. { TDynArrayEnum1 }
  60. type
  61. TDynArrayEnum1 = array of TEnum1;
  62. function pbEncodeFieldDynArrayEnum1(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayEnum1): Integer;
  63. function pbEncodeFieldDynArrayEnum1_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayEnum1): Integer;
  64. procedure pbDecodeFieldDynArrayEnum1(const Field: TpbProtoBufDecodeField; var Value: TDynArrayEnum1);
  65. procedure pbDecodeFieldDynArrayEnum1_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayEnum1);
  66. { TDynArrayTestMsg0Record }
  67. type
  68. TDynArrayTestMsg0Record = array of TTestMsg0Record;
  69. function pbEncodeFieldDynArrayTestMsg0Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayTestMsg0Record): Integer;
  70. function pbEncodeFieldDynArrayTestMsg0Record_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayTestMsg0Record): Integer;
  71. procedure pbDecodeFieldDynArrayTestMsg0Record(const Field: TpbProtoBufDecodeField; var Value: TDynArrayTestMsg0Record);
  72. procedure pbDecodeFieldDynArrayTestMsg0Record_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayTestMsg0Record);
  73. { TTestNested1Record }
  74. type
  75. TTestNested1Record = record
  76. Field1 : LongInt;
  77. end;
  78. PTestNested1Record = ^TTestNested1Record;
  79. procedure TestNested1RecordInit(var A: TTestNested1Record);
  80. procedure TestNested1RecordFinalise(var A: TTestNested1Record);
  81. function pbEncodeDataTestNested1Record(var Buf; const BufSize: Integer; const A: TTestNested1Record): Integer;
  82. function pbEncodeValueTestNested1Record(var Buf; const BufSize: Integer; const A: TTestNested1Record): Integer;
  83. function pbEncodeFieldTestNested1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestNested1Record): Integer;
  84. function pbDecodeValueTestNested1Record(const Buf; const BufSize: Integer; var Value: TTestNested1Record): Integer;
  85. procedure pbDecodeFieldTestNested1Record(const Field: TpbProtoBufDecodeField; var Value: TTestNested1Record);
  86. { TTestMsg1Record }
  87. type
  88. TTestMsg1Record = record
  89. DefField1 : LongInt;
  90. DefField2 : Int64;
  91. DefField3 : AnsiString;
  92. DefField4 : Double;
  93. DefField5 : Boolean;
  94. DefField6 : TEnumG0;
  95. DefField7 : Int64;
  96. DefField8 : LongWord;
  97. DefField9 : Single;
  98. FieldMsg1 : TTestMsg0Record;
  99. FieldE1 : TEnum1;
  100. FieldE2 : TEnum1;
  101. FieldNested1 : TTestNested1Record;
  102. FieldNested2 : TTestNested1Record;
  103. FieldArr1 : TDynArrayInt32;
  104. FieldArr2 : TDynArrayInt32;
  105. FieldArr3 : TDynArrayString;
  106. FieldArrE1 : TDynArrayEnum1;
  107. FieldMArr2 : TDynArrayTestMsg0Record;
  108. FieldImp1 : TEnumGlobal;
  109. FieldImp2 : TEnumGlobal;
  110. end;
  111. PTestMsg1Record = ^TTestMsg1Record;
  112. procedure TestMsg1RecordInit(var A: TTestMsg1Record);
  113. procedure TestMsg1RecordFinalise(var A: TTestMsg1Record);
  114. function pbEncodeDataTestMsg1Record(var Buf; const BufSize: Integer; const A: TTestMsg1Record): Integer;
  115. function pbEncodeValueTestMsg1Record(var Buf; const BufSize: Integer; const A: TTestMsg1Record): Integer;
  116. function pbEncodeFieldTestMsg1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestMsg1Record): Integer;
  117. function pbDecodeValueTestMsg1Record(const Buf; const BufSize: Integer; var Value: TTestMsg1Record): Integer;
  118. procedure pbDecodeFieldTestMsg1Record(const Field: TpbProtoBufDecodeField; var Value: TTestMsg1Record);
  119. { TTestIden1Record }
  120. type
  121. TTestIden1Record = record
  122. FieldNameTest1 : LongInt;
  123. FieldNameTest2 : LongInt;
  124. end;
  125. PTestIden1Record = ^TTestIden1Record;
  126. procedure TestIden1RecordInit(var A: TTestIden1Record);
  127. procedure TestIden1RecordFinalise(var A: TTestIden1Record);
  128. function pbEncodeDataTestIden1Record(var Buf; const BufSize: Integer; const A: TTestIden1Record): Integer;
  129. function pbEncodeValueTestIden1Record(var Buf; const BufSize: Integer; const A: TTestIden1Record): Integer;
  130. function pbEncodeFieldTestIden1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestIden1Record): Integer;
  131. function pbDecodeValueTestIden1Record(const Buf; const BufSize: Integer; var Value: TTestIden1Record): Integer;
  132. procedure pbDecodeFieldTestIden1Record(const Field: TpbProtoBufDecodeField; var Value: TTestIden1Record);
  133. implementation
  134. { TEnumG0 }
  135. function pbEncodeValueEnumG0(var Buf; const BufSize: Integer; const Value: TEnumG0): Integer;
  136. begin
  137. Result := pbEncodeValueInt32(Buf, BufSize, Ord(Value));
  138. end;
  139. function pbEncodeFieldEnumG0(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TEnumG0): Integer;
  140. begin
  141. Result := pbEncodeFieldInt32(Buf, BufSize, FieldNum, Ord(Value));
  142. end;
  143. function pbDecodeValueEnumG0(const Buf; const BufSize: Integer; var Value: TEnumG0): Integer;
  144. var I : LongInt;
  145. begin
  146. Result := pbDecodeValueInt32(Buf, BufSize, I);
  147. Value := TEnumG0(I);
  148. end;
  149. procedure pbDecodeFieldEnumG0(const Field: TpbProtoBufDecodeField; var Value: TEnumG0);
  150. var I : LongInt;
  151. begin
  152. pbDecodeFieldInt32(Field, I);
  153. Value := TEnumG0(I);
  154. end;
  155. { TTestMsg0Record }
  156. procedure TestMsg0RecordInit(var A: TTestMsg0Record);
  157. begin
  158. with A do
  159. begin
  160. Field1 := 0;
  161. Field2 := 0;
  162. end;
  163. end;
  164. procedure TestMsg0RecordFinalise(var A: TTestMsg0Record);
  165. begin
  166. with A do
  167. begin
  168. end;
  169. end;
  170. function pbEncodeDataTestMsg0Record(var Buf; const BufSize: Integer; const A: TTestMsg0Record): Integer;
  171. var
  172. P : PByte;
  173. L : Integer;
  174. I : Integer;
  175. begin
  176. P := @Buf;
  177. L := BufSize;
  178. I := pbEncodeFieldInt32(P^, L, 1, A.Field1);
  179. Dec(L, I);
  180. Inc(P, I);
  181. I := pbEncodeFieldInt64(P^, L, 2, A.Field2);
  182. Dec(L, I);
  183. Result := BufSize - L;
  184. end;
  185. function pbEncodeValueTestMsg0Record(var Buf; const BufSize: Integer; const A: TTestMsg0Record): Integer;
  186. var
  187. P : PByte;
  188. L, N, I : Integer;
  189. begin
  190. P := @Buf;
  191. L := BufSize;
  192. N := pbEncodeDataTestMsg0Record(P^, 0, A);
  193. I := pbEncodeValueInt32(P^, L, N);
  194. Inc(P, I);
  195. Dec(L, I);
  196. I := pbEncodeDataTestMsg0Record(P^, L, A);
  197. Assert(I = N);
  198. Dec(L, I);
  199. Result := BufSize - L;
  200. end;
  201. function pbEncodeFieldTestMsg0Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestMsg0Record): Integer;
  202. var
  203. P : PByte;
  204. L : Integer;
  205. I : Integer;
  206. begin
  207. P := @Buf;
  208. L := BufSize;
  209. I := pbEncodeFieldKey(P^, L, FieldNum, pwtVarBytes);
  210. Dec(L, I);
  211. Inc(P, I);
  212. I := pbEncodeValueTestMsg0Record(P^, L, A);
  213. Dec(L, I);
  214. Result := BufSize - L;
  215. end;
  216. procedure pbDecodeFieldTestMsg0Record_CallbackProc(const Field: TpbProtoBufDecodeField; const Data: Pointer);
  217. var
  218. A : PTestMsg0Record;
  219. begin
  220. A := Data;
  221. case Field.FieldNum of
  222. 1 : pbDecodeFieldInt32(Field, A^.Field1);
  223. 2 : pbDecodeFieldInt64(Field, A^.Field2);
  224. end;
  225. end;
  226. function pbDecodeValueTestMsg0Record(const Buf; const BufSize: Integer; var Value: TTestMsg0Record): Integer;
  227. var
  228. P : PByte;
  229. L, I, N : Integer;
  230. begin
  231. P := @Buf;
  232. L := BufSize;
  233. I := pbDecodeValueInt32(P^, L, N);
  234. Dec(L, I);
  235. Inc(P, I);
  236. pbDecodeProtoBuf(P^, N, pbDecodeFieldTestMsg0Record_CallbackProc, @Value);
  237. Dec(L, N);
  238. Result := BufSize - L;
  239. end;
  240. procedure pbDecodeFieldTestMsg0Record(const Field: TpbProtoBufDecodeField; var Value: TTestMsg0Record);
  241. begin
  242. pbDecodeProtoBuf(Field.ValueVarBytesPtr^, Field.ValueVarBytesLen, pbDecodeFieldTestMsg0Record_CallbackProc, @Value);
  243. end;
  244. { TEnum1 }
  245. function pbEncodeValueEnum1(var Buf; const BufSize: Integer; const Value: TEnum1): Integer;
  246. begin
  247. Result := pbEncodeValueInt32(Buf, BufSize, Ord(Value));
  248. end;
  249. function pbEncodeFieldEnum1(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TEnum1): Integer;
  250. begin
  251. Result := pbEncodeFieldInt32(Buf, BufSize, FieldNum, Ord(Value));
  252. end;
  253. function pbDecodeValueEnum1(const Buf; const BufSize: Integer; var Value: TEnum1): Integer;
  254. var I : LongInt;
  255. begin
  256. Result := pbDecodeValueInt32(Buf, BufSize, I);
  257. Value := TEnum1(I);
  258. end;
  259. procedure pbDecodeFieldEnum1(const Field: TpbProtoBufDecodeField; var Value: TEnum1);
  260. var I : LongInt;
  261. begin
  262. pbDecodeFieldInt32(Field, I);
  263. Value := TEnum1(I);
  264. end;
  265. { TDynArrayInt32 }
  266. function pbEncodeFieldDynArrayInt32(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayInt32): Integer;
  267. var
  268. P : PByte;
  269. I, L, N : Integer;
  270. begin
  271. P := @Buf;
  272. L := BufSize;
  273. for I := 0 to Length(Value) - 1 do
  274. begin
  275. N := pbEncodeFieldInt32(P^, L, FieldNum, Value[I]);
  276. Inc(P, N);
  277. Dec(L, N);
  278. end;
  279. Result := BufSize - L;
  280. end;
  281. function pbEncodeFieldDynArrayInt32_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayInt32): Integer;
  282. var
  283. P : PByte;
  284. I, T, L, N : Integer;
  285. begin
  286. P := @Buf;
  287. T := 0;
  288. for I := 0 to Length(Value) - 1 do
  289. Inc(T, pbEncodeValueInt32(P^, 0, Value[I]));
  290. L := BufSize;
  291. N := pbEncodeFieldVarBytesHdr(P^, L, FieldNum, T);
  292. Inc(P, N);
  293. Dec(L, N);
  294. for I := 0 to Length(Value) - 1 do
  295. begin
  296. N := pbEncodeValueInt32(P^, L, Value[I]);
  297. Inc(P, N);
  298. Dec(L, N);
  299. end;
  300. Result := BufSize - L;
  301. end;
  302. procedure pbDecodeFieldDynArrayInt32(const Field: TpbProtoBufDecodeField; var Value: TDynArrayInt32);
  303. var
  304. L : Integer;
  305. begin
  306. L := Length(Value);
  307. SetLength(Value, L + 1);
  308. pbDecodeFieldInt32(Field, Value[L]);
  309. end;
  310. procedure pbDecodeFieldDynArrayInt32_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayInt32);
  311. var
  312. P : PByte;
  313. L, N, I : Integer;
  314. begin
  315. P := Field.ValueVarBytesPtr;
  316. L := 0;
  317. N := Field.ValueVarBytesLen;
  318. while N > 0 do
  319. begin
  320. SetLength(Value, L + 1);
  321. I := pbDecodeValueInt32(P^, N, Value[L]);
  322. Inc(L);
  323. Inc(P, I);
  324. Dec(N, I);
  325. end;
  326. end;
  327. { TDynArrayString }
  328. function pbEncodeFieldDynArrayString(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayString): Integer;
  329. var
  330. P : PByte;
  331. I, L, N : Integer;
  332. begin
  333. P := @Buf;
  334. L := BufSize;
  335. for I := 0 to Length(Value) - 1 do
  336. begin
  337. N := pbEncodeFieldString(P^, L, FieldNum, Value[I]);
  338. Inc(P, N);
  339. Dec(L, N);
  340. end;
  341. Result := BufSize - L;
  342. end;
  343. function pbEncodeFieldDynArrayString_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayString): Integer;
  344. var
  345. P : PByte;
  346. I, T, L, N : Integer;
  347. begin
  348. P := @Buf;
  349. T := 0;
  350. for I := 0 to Length(Value) - 1 do
  351. Inc(T, pbEncodeValueString(P^, 0, Value[I]));
  352. L := BufSize;
  353. N := pbEncodeFieldVarBytesHdr(P^, L, FieldNum, T);
  354. Inc(P, N);
  355. Dec(L, N);
  356. for I := 0 to Length(Value) - 1 do
  357. begin
  358. N := pbEncodeValueString(P^, L, Value[I]);
  359. Inc(P, N);
  360. Dec(L, N);
  361. end;
  362. Result := BufSize - L;
  363. end;
  364. procedure pbDecodeFieldDynArrayString(const Field: TpbProtoBufDecodeField; var Value: TDynArrayString);
  365. var
  366. L : Integer;
  367. begin
  368. L := Length(Value);
  369. SetLength(Value, L + 1);
  370. pbDecodeFieldString(Field, Value[L]);
  371. end;
  372. procedure pbDecodeFieldDynArrayString_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayString);
  373. var
  374. P : PByte;
  375. L, N, I : Integer;
  376. begin
  377. P := Field.ValueVarBytesPtr;
  378. L := 0;
  379. N := Field.ValueVarBytesLen;
  380. while N > 0 do
  381. begin
  382. SetLength(Value, L + 1);
  383. I := pbDecodeValueString(P^, N, Value[L]);
  384. Inc(L);
  385. Inc(P, I);
  386. Dec(N, I);
  387. end;
  388. end;
  389. { TDynArrayEnum1 }
  390. function pbEncodeFieldDynArrayEnum1(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayEnum1): Integer;
  391. var
  392. P : PByte;
  393. I, L, N : Integer;
  394. begin
  395. P := @Buf;
  396. L := BufSize;
  397. for I := 0 to Length(Value) - 1 do
  398. begin
  399. N := pbEncodeFieldEnum1(P^, L, FieldNum, Value[I]);
  400. Inc(P, N);
  401. Dec(L, N);
  402. end;
  403. Result := BufSize - L;
  404. end;
  405. function pbEncodeFieldDynArrayEnum1_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayEnum1): Integer;
  406. var
  407. P : PByte;
  408. I, T, L, N : Integer;
  409. begin
  410. P := @Buf;
  411. T := 0;
  412. for I := 0 to Length(Value) - 1 do
  413. Inc(T, pbEncodeValueEnum1(P^, 0, Value[I]));
  414. L := BufSize;
  415. N := pbEncodeFieldVarBytesHdr(P^, L, FieldNum, T);
  416. Inc(P, N);
  417. Dec(L, N);
  418. for I := 0 to Length(Value) - 1 do
  419. begin
  420. N := pbEncodeValueEnum1(P^, L, Value[I]);
  421. Inc(P, N);
  422. Dec(L, N);
  423. end;
  424. Result := BufSize - L;
  425. end;
  426. procedure pbDecodeFieldDynArrayEnum1(const Field: TpbProtoBufDecodeField; var Value: TDynArrayEnum1);
  427. var
  428. L : Integer;
  429. begin
  430. L := Length(Value);
  431. SetLength(Value, L + 1);
  432. pbDecodeFieldEnum1(Field, Value[L]);
  433. end;
  434. procedure pbDecodeFieldDynArrayEnum1_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayEnum1);
  435. var
  436. P : PByte;
  437. L, N, I : Integer;
  438. begin
  439. P := Field.ValueVarBytesPtr;
  440. L := 0;
  441. N := Field.ValueVarBytesLen;
  442. while N > 0 do
  443. begin
  444. SetLength(Value, L + 1);
  445. I := pbDecodeValueEnum1(P^, N, Value[L]);
  446. Inc(L);
  447. Inc(P, I);
  448. Dec(N, I);
  449. end;
  450. end;
  451. { TDynArrayTestMsg0Record }
  452. function pbEncodeFieldDynArrayTestMsg0Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayTestMsg0Record): Integer;
  453. var
  454. P : PByte;
  455. I, L, N : Integer;
  456. begin
  457. P := @Buf;
  458. L := BufSize;
  459. for I := 0 to Length(Value) - 1 do
  460. begin
  461. N := pbEncodeFieldTestMsg0Record(P^, L, FieldNum, Value[I]);
  462. Inc(P, N);
  463. Dec(L, N);
  464. end;
  465. Result := BufSize - L;
  466. end;
  467. function pbEncodeFieldDynArrayTestMsg0Record_Packed(var Buf; const BufSize: Integer; const FieldNum: Integer; const Value: TDynArrayTestMsg0Record): Integer;
  468. var
  469. P : PByte;
  470. I, T, L, N : Integer;
  471. begin
  472. P := @Buf;
  473. T := 0;
  474. for I := 0 to Length(Value) - 1 do
  475. Inc(T, pbEncodeValueTestMsg0Record(P^, 0, Value[I]));
  476. L := BufSize;
  477. N := pbEncodeFieldVarBytesHdr(P^, L, FieldNum, T);
  478. Inc(P, N);
  479. Dec(L, N);
  480. for I := 0 to Length(Value) - 1 do
  481. begin
  482. N := pbEncodeValueTestMsg0Record(P^, L, Value[I]);
  483. Inc(P, N);
  484. Dec(L, N);
  485. end;
  486. Result := BufSize - L;
  487. end;
  488. procedure pbDecodeFieldDynArrayTestMsg0Record(const Field: TpbProtoBufDecodeField; var Value: TDynArrayTestMsg0Record);
  489. var
  490. L : Integer;
  491. begin
  492. L := Length(Value);
  493. SetLength(Value, L + 1);
  494. TestMsg0RecordInit(Value[L]);
  495. pbDecodeFieldTestMsg0Record(Field, Value[L]);
  496. end;
  497. procedure pbDecodeFieldDynArrayTestMsg0Record_Packed(const Field: TpbProtoBufDecodeField; var Value: TDynArrayTestMsg0Record);
  498. var
  499. P : PByte;
  500. L, N, I : Integer;
  501. begin
  502. P := Field.ValueVarBytesPtr;
  503. L := 0;
  504. N := Field.ValueVarBytesLen;
  505. while N > 0 do
  506. begin
  507. SetLength(Value, L + 1);
  508. TestMsg0RecordInit(Value[L]);
  509. I := pbDecodeValueTestMsg0Record(P^, N, Value[L]);
  510. Inc(L);
  511. Inc(P, I);
  512. Dec(N, I);
  513. end;
  514. end;
  515. { TTestNested1Record }
  516. procedure TestNested1RecordInit(var A: TTestNested1Record);
  517. begin
  518. with A do
  519. begin
  520. Field1 := 0;
  521. end;
  522. end;
  523. procedure TestNested1RecordFinalise(var A: TTestNested1Record);
  524. begin
  525. with A do
  526. begin
  527. end;
  528. end;
  529. function pbEncodeDataTestNested1Record(var Buf; const BufSize: Integer; const A: TTestNested1Record): Integer;
  530. var
  531. P : PByte;
  532. L : Integer;
  533. I : Integer;
  534. begin
  535. P := @Buf;
  536. L := BufSize;
  537. I := pbEncodeFieldInt32(P^, L, 1, A.Field1);
  538. Dec(L, I);
  539. Result := BufSize - L;
  540. end;
  541. function pbEncodeValueTestNested1Record(var Buf; const BufSize: Integer; const A: TTestNested1Record): Integer;
  542. var
  543. P : PByte;
  544. L, N, I : Integer;
  545. begin
  546. P := @Buf;
  547. L := BufSize;
  548. N := pbEncodeDataTestNested1Record(P^, 0, A);
  549. I := pbEncodeValueInt32(P^, L, N);
  550. Inc(P, I);
  551. Dec(L, I);
  552. I := pbEncodeDataTestNested1Record(P^, L, A);
  553. Assert(I = N);
  554. Dec(L, I);
  555. Result := BufSize - L;
  556. end;
  557. function pbEncodeFieldTestNested1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestNested1Record): Integer;
  558. var
  559. P : PByte;
  560. L : Integer;
  561. I : Integer;
  562. begin
  563. P := @Buf;
  564. L := BufSize;
  565. I := pbEncodeFieldKey(P^, L, FieldNum, pwtVarBytes);
  566. Dec(L, I);
  567. Inc(P, I);
  568. I := pbEncodeValueTestNested1Record(P^, L, A);
  569. Dec(L, I);
  570. Result := BufSize - L;
  571. end;
  572. procedure pbDecodeFieldTestNested1Record_CallbackProc(const Field: TpbProtoBufDecodeField; const Data: Pointer);
  573. var
  574. A : PTestNested1Record;
  575. begin
  576. A := Data;
  577. case Field.FieldNum of
  578. 1 : pbDecodeFieldInt32(Field, A^.Field1);
  579. end;
  580. end;
  581. function pbDecodeValueTestNested1Record(const Buf; const BufSize: Integer; var Value: TTestNested1Record): Integer;
  582. var
  583. P : PByte;
  584. L, I, N : Integer;
  585. begin
  586. P := @Buf;
  587. L := BufSize;
  588. I := pbDecodeValueInt32(P^, L, N);
  589. Dec(L, I);
  590. Inc(P, I);
  591. pbDecodeProtoBuf(P^, N, pbDecodeFieldTestNested1Record_CallbackProc, @Value);
  592. Dec(L, N);
  593. Result := BufSize - L;
  594. end;
  595. procedure pbDecodeFieldTestNested1Record(const Field: TpbProtoBufDecodeField; var Value: TTestNested1Record);
  596. begin
  597. pbDecodeProtoBuf(Field.ValueVarBytesPtr^, Field.ValueVarBytesLen, pbDecodeFieldTestNested1Record_CallbackProc, @Value);
  598. end;
  599. { TTestMsg1Record }
  600. procedure TestMsg1RecordInit(var A: TTestMsg1Record);
  601. begin
  602. with A do
  603. begin
  604. DefField1 := 2;
  605. DefField2 := -1;
  606. DefField3 := 'yes';
  607. DefField4 := 1.1;
  608. DefField5 := True;
  609. DefField6 := enumg0G2;
  610. DefField7 := 100;
  611. DefField8 := 1;
  612. DefField9 := 12.3;
  613. TestMsg0RecordInit(FieldMsg1);
  614. FieldE1 := enum1Val1;
  615. FieldE2 := enum1Val2;
  616. TestNested1RecordInit(FieldNested1);
  617. TestNested1RecordInit(FieldNested2);
  618. FieldArr1 := nil;
  619. FieldArr2 := nil;
  620. FieldArr3 := nil;
  621. FieldArrE1 := nil;
  622. FieldMArr2 := nil;
  623. FieldImp1 := enumglobalGVal1;
  624. FieldImp2 := enumglobalGVal1;
  625. end;
  626. end;
  627. procedure TestMsg1RecordFinalise(var A: TTestMsg1Record);
  628. begin
  629. with A do
  630. begin
  631. TestNested1RecordFinalise(FieldNested2);
  632. TestNested1RecordFinalise(FieldNested1);
  633. TestMsg0RecordFinalise(FieldMsg1);
  634. end;
  635. end;
  636. function pbEncodeDataTestMsg1Record(var Buf; const BufSize: Integer; const A: TTestMsg1Record): Integer;
  637. var
  638. P : PByte;
  639. L : Integer;
  640. I : Integer;
  641. begin
  642. P := @Buf;
  643. L := BufSize;
  644. I := pbEncodeFieldInt32(P^, L, 1, A.DefField1);
  645. Dec(L, I);
  646. Inc(P, I);
  647. I := pbEncodeFieldInt64(P^, L, 2, A.DefField2);
  648. Dec(L, I);
  649. Inc(P, I);
  650. I := pbEncodeFieldString(P^, L, 3, A.DefField3);
  651. Dec(L, I);
  652. Inc(P, I);
  653. I := pbEncodeFieldDouble(P^, L, 4, A.DefField4);
  654. Dec(L, I);
  655. Inc(P, I);
  656. I := pbEncodeFieldBool(P^, L, 5, A.DefField5);
  657. Dec(L, I);
  658. Inc(P, I);
  659. I := pbEncodeFieldEnumG0(P^, L, 6, A.DefField6);
  660. Dec(L, I);
  661. Inc(P, I);
  662. I := pbEncodeFieldSInt64(P^, L, 7, A.DefField7);
  663. Dec(L, I);
  664. Inc(P, I);
  665. I := pbEncodeFieldFixed32(P^, L, 8, A.DefField8);
  666. Dec(L, I);
  667. Inc(P, I);
  668. I := pbEncodeFieldFloat(P^, L, 9, A.DefField9);
  669. Dec(L, I);
  670. Inc(P, I);
  671. I := pbEncodeFieldTestMsg0Record(P^, L, 20, A.FieldMsg1);
  672. Dec(L, I);
  673. Inc(P, I);
  674. I := pbEncodeFieldEnum1(P^, L, 21, A.FieldE1);
  675. Dec(L, I);
  676. Inc(P, I);
  677. I := pbEncodeFieldEnum1(P^, L, 22, A.FieldE2);
  678. Dec(L, I);
  679. Inc(P, I);
  680. I := pbEncodeFieldTestNested1Record(P^, L, 30, A.FieldNested1);
  681. Dec(L, I);
  682. Inc(P, I);
  683. I := pbEncodeFieldTestNested1Record(P^, L, 31, A.FieldNested2);
  684. Dec(L, I);
  685. Inc(P, I);
  686. I := pbEncodeFieldDynArrayInt32(P^, L, 40, A.FieldArr1);
  687. Dec(L, I);
  688. Inc(P, I);
  689. I := pbEncodeFieldDynArrayInt32_Packed(P^, L, 41, A.FieldArr2);
  690. Dec(L, I);
  691. Inc(P, I);
  692. I := pbEncodeFieldDynArrayString(P^, L, 42, A.FieldArr3);
  693. Dec(L, I);
  694. Inc(P, I);
  695. I := pbEncodeFieldDynArrayEnum1(P^, L, 43, A.FieldArrE1);
  696. Dec(L, I);
  697. Inc(P, I);
  698. I := pbEncodeFieldDynArrayTestMsg0Record(P^, L, 44, A.FieldMArr2);
  699. Dec(L, I);
  700. Inc(P, I);
  701. I := pbEncodeFieldEnumGlobal(P^, L, 50, A.FieldImp1);
  702. Dec(L, I);
  703. Inc(P, I);
  704. I := pbEncodeFieldEnumGlobal(P^, L, 51, A.FieldImp2);
  705. Dec(L, I);
  706. Result := BufSize - L;
  707. end;
  708. function pbEncodeValueTestMsg1Record(var Buf; const BufSize: Integer; const A: TTestMsg1Record): Integer;
  709. var
  710. P : PByte;
  711. L, N, I : Integer;
  712. begin
  713. P := @Buf;
  714. L := BufSize;
  715. N := pbEncodeDataTestMsg1Record(P^, 0, A);
  716. I := pbEncodeValueInt32(P^, L, N);
  717. Inc(P, I);
  718. Dec(L, I);
  719. I := pbEncodeDataTestMsg1Record(P^, L, A);
  720. Assert(I = N);
  721. Dec(L, I);
  722. Result := BufSize - L;
  723. end;
  724. function pbEncodeFieldTestMsg1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestMsg1Record): Integer;
  725. var
  726. P : PByte;
  727. L : Integer;
  728. I : Integer;
  729. begin
  730. P := @Buf;
  731. L := BufSize;
  732. I := pbEncodeFieldKey(P^, L, FieldNum, pwtVarBytes);
  733. Dec(L, I);
  734. Inc(P, I);
  735. I := pbEncodeValueTestMsg1Record(P^, L, A);
  736. Dec(L, I);
  737. Result := BufSize - L;
  738. end;
  739. procedure pbDecodeFieldTestMsg1Record_CallbackProc(const Field: TpbProtoBufDecodeField; const Data: Pointer);
  740. var
  741. A : PTestMsg1Record;
  742. begin
  743. A := Data;
  744. case Field.FieldNum of
  745. 1 : pbDecodeFieldInt32(Field, A^.DefField1);
  746. 2 : pbDecodeFieldInt64(Field, A^.DefField2);
  747. 3 : pbDecodeFieldString(Field, A^.DefField3);
  748. 4 : pbDecodeFieldDouble(Field, A^.DefField4);
  749. 5 : pbDecodeFieldBool(Field, A^.DefField5);
  750. 6 : pbDecodeFieldEnumG0(Field, A^.DefField6);
  751. 7 : pbDecodeFieldSInt64(Field, A^.DefField7);
  752. 8 : pbDecodeFieldFixed32(Field, A^.DefField8);
  753. 9 : pbDecodeFieldFloat(Field, A^.DefField9);
  754. 20 : pbDecodeFieldTestMsg0Record(Field, A^.FieldMsg1);
  755. 21 : pbDecodeFieldEnum1(Field, A^.FieldE1);
  756. 22 : pbDecodeFieldEnum1(Field, A^.FieldE2);
  757. 30 : pbDecodeFieldTestNested1Record(Field, A^.FieldNested1);
  758. 31 : pbDecodeFieldTestNested1Record(Field, A^.FieldNested2);
  759. 40 : pbDecodeFieldDynArrayInt32(Field, A^.FieldArr1);
  760. 41 : pbDecodeFieldDynArrayInt32_Packed(Field, A^.FieldArr2);
  761. 42 : pbDecodeFieldDynArrayString(Field, A^.FieldArr3);
  762. 43 : pbDecodeFieldDynArrayEnum1(Field, A^.FieldArrE1);
  763. 44 : pbDecodeFieldDynArrayTestMsg0Record(Field, A^.FieldMArr2);
  764. 50 : pbDecodeFieldEnumGlobal(Field, A^.FieldImp1);
  765. 51 : pbDecodeFieldEnumGlobal(Field, A^.FieldImp2);
  766. end;
  767. end;
  768. function pbDecodeValueTestMsg1Record(const Buf; const BufSize: Integer; var Value: TTestMsg1Record): Integer;
  769. var
  770. P : PByte;
  771. L, I, N : Integer;
  772. begin
  773. P := @Buf;
  774. L := BufSize;
  775. I := pbDecodeValueInt32(P^, L, N);
  776. Dec(L, I);
  777. Inc(P, I);
  778. pbDecodeProtoBuf(P^, N, pbDecodeFieldTestMsg1Record_CallbackProc, @Value);
  779. Dec(L, N);
  780. Result := BufSize - L;
  781. end;
  782. procedure pbDecodeFieldTestMsg1Record(const Field: TpbProtoBufDecodeField; var Value: TTestMsg1Record);
  783. begin
  784. pbDecodeProtoBuf(Field.ValueVarBytesPtr^, Field.ValueVarBytesLen, pbDecodeFieldTestMsg1Record_CallbackProc, @Value);
  785. end;
  786. { TTestIden1Record }
  787. procedure TestIden1RecordInit(var A: TTestIden1Record);
  788. begin
  789. with A do
  790. begin
  791. FieldNameTest1 := 0;
  792. FieldNameTest2 := 0;
  793. end;
  794. end;
  795. procedure TestIden1RecordFinalise(var A: TTestIden1Record);
  796. begin
  797. with A do
  798. begin
  799. end;
  800. end;
  801. function pbEncodeDataTestIden1Record(var Buf; const BufSize: Integer; const A: TTestIden1Record): Integer;
  802. var
  803. P : PByte;
  804. L : Integer;
  805. I : Integer;
  806. begin
  807. P := @Buf;
  808. L := BufSize;
  809. I := pbEncodeFieldInt32(P^, L, 1, A.FieldNameTest1);
  810. Dec(L, I);
  811. Inc(P, I);
  812. I := pbEncodeFieldInt32(P^, L, 2, A.FieldNameTest2);
  813. Dec(L, I);
  814. Result := BufSize - L;
  815. end;
  816. function pbEncodeValueTestIden1Record(var Buf; const BufSize: Integer; const A: TTestIden1Record): Integer;
  817. var
  818. P : PByte;
  819. L, N, I : Integer;
  820. begin
  821. P := @Buf;
  822. L := BufSize;
  823. N := pbEncodeDataTestIden1Record(P^, 0, A);
  824. I := pbEncodeValueInt32(P^, L, N);
  825. Inc(P, I);
  826. Dec(L, I);
  827. I := pbEncodeDataTestIden1Record(P^, L, A);
  828. Assert(I = N);
  829. Dec(L, I);
  830. Result := BufSize - L;
  831. end;
  832. function pbEncodeFieldTestIden1Record(var Buf; const BufSize: Integer; const FieldNum: Integer; const A: TTestIden1Record): Integer;
  833. var
  834. P : PByte;
  835. L : Integer;
  836. I : Integer;
  837. begin
  838. P := @Buf;
  839. L := BufSize;
  840. I := pbEncodeFieldKey(P^, L, FieldNum, pwtVarBytes);
  841. Dec(L, I);
  842. Inc(P, I);
  843. I := pbEncodeValueTestIden1Record(P^, L, A);
  844. Dec(L, I);
  845. Result := BufSize - L;
  846. end;
  847. procedure pbDecodeFieldTestIden1Record_CallbackProc(const Field: TpbProtoBufDecodeField; const Data: Pointer);
  848. var
  849. A : PTestIden1Record;
  850. begin
  851. A := Data;
  852. case Field.FieldNum of
  853. 1 : pbDecodeFieldInt32(Field, A^.FieldNameTest1);
  854. 2 : pbDecodeFieldInt32(Field, A^.FieldNameTest2);
  855. end;
  856. end;
  857. function pbDecodeValueTestIden1Record(const Buf; const BufSize: Integer; var Value: TTestIden1Record): Integer;
  858. var
  859. P : PByte;
  860. L, I, N : Integer;
  861. begin
  862. P := @Buf;
  863. L := BufSize;
  864. I := pbDecodeValueInt32(P^, L, N);
  865. Dec(L, I);
  866. Inc(P, I);
  867. pbDecodeProtoBuf(P^, N, pbDecodeFieldTestIden1Record_CallbackProc, @Value);
  868. Dec(L, N);
  869. Result := BufSize - L;
  870. end;
  871. procedure pbDecodeFieldTestIden1Record(const Field: TpbProtoBufDecodeField; var Value: TTestIden1Record);
  872. begin
  873. pbDecodeProtoBuf(Field.ValueVarBytesPtr^, Field.ValueVarBytesLen, pbDecodeFieldTestIden1Record_CallbackProc, @Value);
  874. end;
  875. end.