Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/protobuf/src/google/protobuf/util/internal/protostream_objectwriter.h

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 public: 76 public:
77 // Options that control ProtoStreamObjectWriter class's behavior. 77 // Options that control ProtoStreamObjectWriter class's behavior.
78 struct Options { 78 struct Options {
79 // Treats integer inputs in google.protobuf.Struct as strings. Normally, 79 // Treats integer inputs in google.protobuf.Struct as strings. Normally,
80 // integer values are returned in double field "number_value" of 80 // integer values are returned in double field "number_value" of
81 // google.protobuf.Struct. However, this can cause precision loss for 81 // google.protobuf.Struct. However, this can cause precision loss for
82 // int64/uint64 inputs. This option is provided for cases that want to 82 // int64/uint64 inputs. This option is provided for cases that want to
83 // preserve integer precision. 83 // preserve integer precision.
84 bool struct_integers_as_strings; 84 bool struct_integers_as_strings;
85 85
86 // Not treat unknown fields as an error. If there is an unknown fields, 86 Options() : struct_integers_as_strings(false) {}
87 // just ignore it and continue to process the rest.
88 bool ignore_unknown_fields;
89
90 // If true, check if enum name in camel case or without underscore matches
91 // the field name.
92 bool use_lower_camel_for_enums;
93
94 Options()
95 : struct_integers_as_strings(false),
96 ignore_unknown_fields(false),
97 use_lower_camel_for_enums(false) {}
98 87
99 // Default instance of Options with all options set to defaults. 88 // Default instance of Options with all options set to defaults.
100 static const Options& Defaults() { 89 static const Options& Defaults() {
101 static Options defaults; 90 static Options defaults;
102 return defaults; 91 return defaults;
103 } 92 }
104 }; 93 };
105 94
106 // Constructor. Does not take ownership of any parameter passed in. 95 // Constructor. Does not take ownership of any parameter passed in.
107 ProtoStreamObjectWriter(TypeResolver* type_resolver, 96 ProtoStreamObjectWriter(TypeResolver* type_resolver,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 // Passes a StartList call through to the Any writer. 133 // Passes a StartList call through to the Any writer.
145 void StartList(StringPiece name); 134 void StartList(StringPiece name);
146 135
147 // Passes an EndList call through to the Any writer. 136 // Passes an EndList call through to the Any writer.
148 void EndList(); 137 void EndList();
149 138
150 // Renders a data piece on the any. 139 // Renders a data piece on the any.
151 void RenderDataPiece(StringPiece name, const DataPiece& value); 140 void RenderDataPiece(StringPiece name, const DataPiece& value);
152 141
153 private: 142 private:
154 // Before the "@type" field is encountered, we store all incoming data
155 // into this Event struct and replay them after we get the "@type" field.
156 class LIBPROTOBUF_EXPORT Event {
157 public:
158 enum Type {
159 START_OBJECT = 0,
160 END_OBJECT = 1,
161 START_LIST = 2,
162 END_LIST = 3,
163 RENDER_DATA_PIECE = 4,
164 };
165
166 // Constructor for END_OBJECT and END_LIST events.
167 explicit Event(Type type) : type_(type), value_(DataPiece::NullData()) {}
168
169 // Constructor for START_OBJECT and START_LIST events.
170 explicit Event(Type type, StringPiece name)
171 : type_(type),
172 name_(name.ToString()),
173 value_(DataPiece::NullData()) {}
174
175 // Constructor for RENDER_DATA_PIECE events.
176 explicit Event(StringPiece name, const DataPiece& value)
177 : type_(RENDER_DATA_PIECE), name_(name.ToString()), value_(value) {
178 DeepCopy();
179 }
180
181 Event(const Event& other)
182 : type_(other.type_), name_(other.name_), value_(other.value_) {
183 DeepCopy();
184 }
185
186 Event& operator=(const Event& other) {
187 type_ = other.type_;
188 name_ = other.name_;
189 value_ = other.value_;
190 DeepCopy();
191 return *this;
192 }
193
194 void Replay(AnyWriter* writer) const;
195
196 private:
197 void DeepCopy();
198
199 Type type_;
200 string name_;
201 DataPiece value_;
202 string value_storage_;
203 };
204
205 // Handles starting up the any once we have a type. 143 // Handles starting up the any once we have a type.
206 void StartAny(const DataPiece& value); 144 void StartAny(const DataPiece& value);
207 145
208 // Writes the Any out to the parent writer in its serialized form. 146 // Writes the Any out to the parent writer in its serialized form.
209 void WriteAny(); 147 void WriteAny();
210 148
211 // The parent of this writer, needed for various bits such as type info and 149 // The parent of this writer, needed for various bits such as type info and
212 // the listeners. 150 // the listeners.
213 ProtoStreamObjectWriter* parent_; 151 ProtoStreamObjectWriter* parent_;
214 152
(...skipping 15 matching lines...) Expand all
230 int depth_; 168 int depth_;
231 169
232 // True if the type is a well-known type. Well-known types in Any 170 // True if the type is a well-known type. Well-known types in Any
233 // has a special formating: 171 // has a special formating:
234 // { 172 // {
235 // "@type": "type.googleapis.com/google.protobuf.XXX", 173 // "@type": "type.googleapis.com/google.protobuf.XXX",
236 // "value": <JSON representation of the type>, 174 // "value": <JSON representation of the type>,
237 // } 175 // }
238 bool is_well_known_type_; 176 bool is_well_known_type_;
239 TypeRenderer* well_known_type_render_; 177 TypeRenderer* well_known_type_render_;
240
241 // Store data before the "@type" field.
242 std::vector<Event> uninterpreted_events_;
243 }; 178 };
244 179
245 // Represents an item in a stack of items used to keep state between 180 // Represents an item in a stack of items used to keep state between
246 // ObjectWrier events. 181 // ObjectWrier events.
247 class LIBPROTOBUF_EXPORT Item : public BaseElement { 182 class LIBPROTOBUF_EXPORT Item : public BaseElement {
248 public: 183 public:
249 // Indicates the type of item. 184 // Indicates the type of item.
250 enum ItemType { 185 enum ItemType {
251 MESSAGE, // Simple message 186 MESSAGE, // Simple message
252 MAP, // Proto3 map type 187 MAP, // Proto3 map type
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 ProtoStreamObjectWriter* ow_; 224 ProtoStreamObjectWriter* ow_;
290 225
291 // A writer for Any objects, handles all Any-related nonsense. 226 // A writer for Any objects, handles all Any-related nonsense.
292 google::protobuf::scoped_ptr<AnyWriter> any_; 227 google::protobuf::scoped_ptr<AnyWriter> any_;
293 228
294 // The type of this element, see enum for permissible types. 229 // The type of this element, see enum for permissible types.
295 ItemType item_type_; 230 ItemType item_type_;
296 231
297 // Set of map keys already seen for the type_. Used to validate incoming 232 // Set of map keys already seen for the type_. Used to validate incoming
298 // messages so no map key appears more than once. 233 // messages so no map key appears more than once.
299 google::protobuf::scoped_ptr<hash_set<string> > map_keys_; 234 hash_set<string> map_keys_;
300 235
301 // Conveys whether this Item is a placeholder or not. Placeholder items are 236 // Conveys whether this Item is a placeholder or not. Placeholder items are
302 // pushed to stack to account for special types. 237 // pushed to stack to account for special types.
303 bool is_placeholder_; 238 bool is_placeholder_;
304 239
305 // Conveys whether this Item is a list or not. This is used to send 240 // Conveys whether this Item is a list or not. This is used to send
306 // StartList or EndList calls to underlying ObjectWriter. 241 // StartList or EndList calls to underlying ObjectWriter.
307 bool is_list_; 242 bool is_list_;
308 243
309 GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS(Item); 244 GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS(Item);
310 }; 245 };
311 246
312 ProtoStreamObjectWriter(const TypeInfo* typeinfo, 247 ProtoStreamObjectWriter(const TypeInfo* typeinfo,
313 const google::protobuf::Type& type, 248 const google::protobuf::Type& type,
314 strings::ByteSink* output, ErrorListener* listener); 249 strings::ByteSink* output, ErrorListener* listener);
315 250
316 // Returns true if the field is a map. 251 // Returns true if the field is a map.
317 inline bool IsMap(const google::protobuf::Field& field); 252 bool IsMap(const google::protobuf::Field& field);
318 253
319 // Returns true if the field is an any. 254 // Returns true if the field is an any.
320 inline bool IsAny(const google::protobuf::Field& field); 255 bool IsAny(const google::protobuf::Field& field);
321 256
322 // Returns true if the field is google.protobuf.Struct. 257 // Returns true if the field is google.protobuf.Struct.
323 inline bool IsStruct(const google::protobuf::Field& field); 258 bool IsStruct(const google::protobuf::Field& field);
324 259
325 // Returns true if the field is google.protobuf.Value. 260 // Returns true if the field is google.protobuf.Value.
326 inline bool IsStructValue(const google::protobuf::Field& field); 261 bool IsStructValue(const google::protobuf::Field& field);
327 262
328 // Returns true if the field is google.protobuf.ListValue. 263 // Returns true if the field is google.protobuf.ListValue.
329 inline bool IsStructListValue(const google::protobuf::Field& field); 264 bool IsStructListValue(const google::protobuf::Field& field);
330 265
331 // Renders google.protobuf.Value in struct.proto. It picks the right oneof 266 // Renders google.protobuf.Value in struct.proto. It picks the right oneof
332 // type based on value's type. 267 // type based on value's type.
333 static util::Status RenderStructValue(ProtoStreamObjectWriter* ow, 268 static util::Status RenderStructValue(ProtoStreamObjectWriter* ow,
334 const DataPiece& value); 269 const DataPiece& value);
335 270
336 // Renders google.protobuf.Timestamp value. 271 // Renders google.protobuf.Timestamp value.
337 static util::Status RenderTimestamp(ProtoStreamObjectWriter* ow, 272 static util::Status RenderTimestamp(ProtoStreamObjectWriter* ow,
338 const DataPiece& value); 273 const DataPiece& value);
339 274
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 331
397 GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS(ProtoStreamObjectWriter); 332 GOOGLE_DISALLOW_IMPLICIT_CONSTRUCTORS(ProtoStreamObjectWriter);
398 }; 333 };
399 334
400 } // namespace converter 335 } // namespace converter
401 } // namespace util 336 } // namespace util
402 } // namespace protobuf 337 } // namespace protobuf
403 338
404 } // namespace google 339 } // namespace google
405 #endif // GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTWRITER_H__ 340 #endif // GOOGLE_PROTOBUF_UTIL_CONVERTER_PROTOSTREAM_OBJECTWRITER_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698