Changeset 9 for ProtocolBuffers/UProtocolBuffers.pas
- Timestamp:
- Oct 12, 2009, 11:01:02 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ProtocolBuffers/UProtocolBuffers.pas
r8 r9 25 25 procedure SaveVariantToStream(Stream: TStream; Value: Integer); 26 26 function LoadVariantFromStream(Stream: TStream): Integer; 27 procedure SaveHeadToStream(Stream: TStream); 28 procedure LoadHeadFromStream(Stream: TStream); 27 29 procedure SaveToStream(Stream: TStream); virtual; 28 30 procedure LoadFromStream(Stream: TStream); virtual; … … 50 52 TPBMessageItem = class(TPBItem) 51 53 Items: TList; // TList<TPBItem>; 54 function SearchItemByTag(Tag: Integer): TPBItem; 52 55 procedure SaveToStream(Stream: TStream); override; 53 56 procedure LoadFromStream(Stream: TStream); override; … … 75 78 procedure TProtocolBuffer.LoadFromStream(Stream: TStream); 76 79 begin 80 BaseMessage.LoadHeadFromStream(Stream); 77 81 BaseMessage.LoadFromStream(Stream); 78 82 end; … … 101 105 { TPBMessageItem } 102 106 107 function TPBMessageItem.SearchItemByTag(Tag: Integer): TPBItem; 108 var 109 I: Integer; 110 begin 111 I := 0; 112 while (I < Items.Count) and (TPBItem(Items[I]).Tag <> Tag) do Inc(I); 113 if I < Items.Count then Result := Items[I] 114 else Result := nil; 115 end; 116 103 117 procedure TPBMessageItem.SaveToStream(Stream: TStream); 104 118 var 105 119 I: Integer; 106 120 begin 107 inherited SaveToStream(Stream); 121 inherited; 122 SaveHeadToStream(Stream); 108 123 for I := 0 to Items.Count - 1 do 109 124 TPBItem(Items[I]).SaveToStream(Stream); … … 113 128 var 114 129 I: Integer; 115 begin 116 inherited LoadFromStream(Stream); 117 for I := 0 to Items.Count - 1 do 118 TPBItem(Items[I]).LoadFromStream(Stream); 130 TempItem: TPBItem; 131 SearchItem: TPBItem; 132 begin 133 inherited; 134 TempItem := TPBItem.Create; 135 for I := 0 to Items.Count - 1 do begin 136 TempItem.LoadHeadFromStream(Stream); 137 SearchItem := SearchItemByTag(TempItem.Tag); 138 if Assigned(SearchItem) then begin 139 if SearchItem.ItemType <> TempItem.ItemType then 140 raise Exception.Create('Bad type for item "' + SearchItem.Name + 141 '" with tag ' + IntToStr(SearchItem.Tag)); 142 if SearchItem is TPBIntegerItem then 143 TPBIntegerItem(SearchItem).LoadFromStream(Stream) 144 else if SearchItem is TPBStringItem then 145 TPBStringItem(SearchItem).LoadFromStream(Stream) 146 else if SearchItem is TPBMessageItem then 147 TPBMessageItem(SearchItem).LoadFromStream(Stream); 148 end; 149 end; 119 150 end; 120 151 … … 154 185 end; 155 186 156 procedure TPBItem.Save ToStream(Stream: TStream);187 procedure TPBItem.SaveHeadToStream(Stream: TStream); 157 188 var 158 189 ByteIndex: Byte; … … 171 202 end; 172 203 173 procedure TPBItem.Load FromStream(Stream: TStream);204 procedure TPBItem.LoadHeadFromStream(Stream: TStream); 174 205 var 175 206 Data: Byte; … … 187 218 end; 188 219 220 procedure TPBItem.SaveToStream(Stream: TStream); 221 begin 222 223 end; 224 225 procedure TPBItem.LoadFromStream(Stream: TStream); 226 begin 227 228 end; 229 189 230 function TPBItem.LoadVariantFromStream(Stream: TStream): Integer; 190 231 var … … 206 247 procedure TPBIntegerItem.SaveToStream(Stream: TStream); 207 248 begin 208 inherited SaveToStream(Stream); 249 inherited; 250 SaveHeadToStream(Stream); 209 251 SaveVariantToStream(Stream, Value); 210 252 end; … … 212 254 procedure TPBIntegerItem.LoadFromStream(Stream: TStream); 213 255 begin 214 inherited LoadFromStream(Stream);215 LoadVariantFromStream(Stream);256 inherited; 257 Value := LoadVariantFromStream(Stream); 216 258 end; 217 259 … … 225 267 procedure TPBStringItem.SaveToStream(Stream: TStream); 226 268 begin 227 inherited SaveToStream(Stream); 269 inherited; 270 SaveHeadToStream(Stream); 228 271 SaveVariantToStream(Stream, Length(Value)); 229 272 TMemoryStreamEx(Stream).Write(Value[1], Length(Value)); … … 232 275 procedure TPBStringItem.LoadFromStream(Stream: TStream); 233 276 begin 234 inherited LoadFromStream(Stream);277 inherited; 235 278 SetLength(Value, LoadVariantFromStream(Stream)); 236 279 TMemoryStreamEx(Stream).Read(Value[1], Length(Value));
Note:
See TracChangeset
for help on using the changeset viewer.