25#include "type_helper.h"
27template <google::protobuf::FieldDescriptor::Type t>
28void insertType(dccl::internal::TypeHelper::TypeMap* type_map)
30 type_map->emplace(t, std::shared_ptr<dccl::internal::FromProtoTypeBase>(
34template <google::protobuf::FieldDescriptor::CppType t>
35void insert(dccl::internal::TypeHelper::CppTypeMap* cpptype_map)
37 cpptype_map->emplace(t, std::shared_ptr<dccl::internal::FromProtoCppTypeBase>(
44void dccl::internal::TypeHelper::initialize()
46 using namespace google::protobuf;
47 using std::shared_ptr;
49 type_map_.emplace(
static_cast<FieldDescriptor::Type
>(0), std::make_shared<FromProtoTypeBase>());
50 insertType<FieldDescriptor::TYPE_DOUBLE>(&type_map_);
51 insertType<FieldDescriptor::TYPE_FLOAT>(&type_map_);
52 insertType<FieldDescriptor::TYPE_UINT64>(&type_map_);
53 insertType<FieldDescriptor::TYPE_UINT32>(&type_map_);
54 insertType<FieldDescriptor::TYPE_FIXED64>(&type_map_);
55 insertType<FieldDescriptor::TYPE_FIXED32>(&type_map_);
56 insertType<FieldDescriptor::TYPE_INT64>(&type_map_);
57 insertType<FieldDescriptor::TYPE_INT32>(&type_map_);
58 insertType<FieldDescriptor::TYPE_SFIXED32>(&type_map_);
59 insertType<FieldDescriptor::TYPE_SFIXED64>(&type_map_);
60 insertType<FieldDescriptor::TYPE_SINT32>(&type_map_);
61 insertType<FieldDescriptor::TYPE_SINT64>(&type_map_);
62 insertType<FieldDescriptor::TYPE_BOOL>(&type_map_);
63 insertType<FieldDescriptor::TYPE_STRING>(&type_map_);
64 insertType<FieldDescriptor::TYPE_BYTES>(&type_map_);
65 insertType<FieldDescriptor::TYPE_MESSAGE>(&type_map_);
66 insertType<FieldDescriptor::TYPE_GROUP>(&type_map_);
67 insertType<FieldDescriptor::TYPE_ENUM>(&type_map_);
69 cpptype_map_.emplace(
static_cast<FieldDescriptor::CppType
>(0),
70 std::make_shared<FromProtoCppTypeBase>());
72 insert<FieldDescriptor::CPPTYPE_DOUBLE>(&cpptype_map_);
73 insert<FieldDescriptor::CPPTYPE_FLOAT>(&cpptype_map_);
74 insert<FieldDescriptor::CPPTYPE_UINT64>(&cpptype_map_);
75 insert<FieldDescriptor::CPPTYPE_UINT32>(&cpptype_map_);
76 insert<FieldDescriptor::CPPTYPE_INT64>(&cpptype_map_);
77 insert<FieldDescriptor::CPPTYPE_INT32>(&cpptype_map_);
78 insert<FieldDescriptor::CPPTYPE_BOOL>(&cpptype_map_);
79 insert<FieldDescriptor::CPPTYPE_STRING>(&cpptype_map_);
80 insert<FieldDescriptor::CPPTYPE_MESSAGE>(&cpptype_map_);
81 insert<FieldDescriptor::CPPTYPE_ENUM>(&cpptype_map_);
84std::shared_ptr<dccl::internal::FromProtoCppTypeBase>
85dccl::internal::TypeHelper::find(google::protobuf::FieldDescriptor::CppType cpptype,
86 const std::string& type_name )
const
88 if (!type_name.empty())
90 auto it = custom_message_map_.find(type_name);
91 if (it != custom_message_map_.end())
95 auto it = cpptype_map_.find(cpptype);
96 if (it != cpptype_map_.end())
99 return std::shared_ptr<FromProtoCppTypeBase>();
102std::shared_ptr<dccl::internal::FromProtoTypeBase>
103dccl::internal::TypeHelper::find(google::protobuf::FieldDescriptor::Type type)
const
105 auto it = type_map_.find(type);
106 if (it != type_map_.end())
109 return std::shared_ptr<FromProtoTypeBase>();