|
|
|
@ -39,6 +39,7 @@ |
|
|
|
|
#include <google/protobuf/util/internal/object_location_tracker.h> |
|
|
|
|
#include <google/protobuf/util/internal/constants.h> |
|
|
|
|
#include <google/protobuf/util/internal/utility.h> |
|
|
|
|
#include <google/protobuf/stubs/once.h> |
|
|
|
|
#include <google/protobuf/stubs/strutil.h> |
|
|
|
|
#include <google/protobuf/stubs/map_util.h> |
|
|
|
|
#include <google/protobuf/stubs/statusor.h> |
|
|
|
@ -1365,60 +1366,67 @@ void ProtoStreamObjectWriter::RenderSimpleDataPiece( |
|
|
|
|
// Map of functions that are responsible for rendering well known type
|
|
|
|
|
// represented by the key.
|
|
|
|
|
hash_map<string, ProtoStreamObjectWriter::TypeRenderer>* |
|
|
|
|
ProtoStreamObjectWriter::CreateRendererMap() { |
|
|
|
|
google::protobuf::scoped_ptr<hash_map<string, ProtoStreamObjectWriter::TypeRenderer> > |
|
|
|
|
result(new hash_map<string, ProtoStreamObjectWriter::TypeRenderer>()); |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Timestamp"] = |
|
|
|
|
ProtoStreamObjectWriter::renderers_ = NULL; |
|
|
|
|
GOOGLE_PROTOBUF_DECLARE_ONCE(writer_renderers_init_); |
|
|
|
|
|
|
|
|
|
void ProtoStreamObjectWriter::InitRendererMap() { |
|
|
|
|
renderers_ = new hash_map<string, ProtoStreamObjectWriter::TypeRenderer>(); |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Timestamp"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderTimestamp; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Duration"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Duration"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderDuration; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.FieldMask"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.FieldMask"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderFieldMask; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Double"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Double"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Float"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Float"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Int64"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Int64"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.UInt64"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.UInt64"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Int32"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Int32"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.UInt32"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.UInt32"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Bool"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Bool"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.String"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.String"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Bytes"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Bytes"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.DoubleValue"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.DoubleValue"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.FloatValue"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.FloatValue"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Int64Value"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Int64Value"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.UInt64Value"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.UInt64Value"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Int32Value"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Int32Value"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.UInt32Value"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.UInt32Value"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.BoolValue"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.BoolValue"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.StringValue"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.StringValue"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.BytesValue"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.BytesValue"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderWrapperType; |
|
|
|
|
(*result)["type.googleapis.com/google.protobuf.Value"] = |
|
|
|
|
(*renderers_)["type.googleapis.com/google.protobuf.Value"] = |
|
|
|
|
&ProtoStreamObjectWriter::RenderStructValue; |
|
|
|
|
return result.release(); |
|
|
|
|
::google::protobuf::internal::OnShutdown(&DeleteRendererMap); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ProtoStreamObjectWriter::DeleteRendererMap() { |
|
|
|
|
delete ProtoStreamObjectWriter::renderers_; |
|
|
|
|
renderers_ = NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ProtoStreamObjectWriter::TypeRenderer* |
|
|
|
|
ProtoStreamObjectWriter::FindTypeRenderer(const string& type_url) { |
|
|
|
|
static hash_map<string, TypeRenderer>* renderers = CreateRendererMap(); |
|
|
|
|
return FindOrNull(*renderers, type_url); |
|
|
|
|
::google::protobuf::GoogleOnceInit(&writer_renderers_init_, &InitRendererMap); |
|
|
|
|
return FindOrNull(*renderers_, type_url); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ProtoStreamObjectWriter::ProtoElement::ElementType |
|
|
|
|