22 #include "type_helper.h"
24 dccl::internal::TypeHelper::TypeMap dccl::internal::TypeHelper::type_map_;
25 dccl::internal::TypeHelper::CppTypeMap dccl::internal::TypeHelper::cpptype_map_;
26 dccl::internal::TypeHelper::CustomMessageMap dccl::internal::TypeHelper::custom_message_map_;
31 template<google::protobuf::FieldDescriptor::Type t>
32 void insertType(dccl::internal::TypeHelper::TypeMap* type_map)
35 template<google::protobuf::FieldDescriptor::CppType t>
36 void insert(dccl::internal::TypeHelper::CppTypeMap* cpptype_map)
43 void dccl::internal::TypeHelper::initialize()
45 using namespace google::protobuf;
46 using boost::shared_ptr;
49 type_map_.insert(make_pair(
static_cast<FieldDescriptor::Type
>(0),
50 shared_ptr<FromProtoTypeBase>(
new FromProtoTypeBase)));
51 insertType<FieldDescriptor::TYPE_DOUBLE>(&type_map_);
52 insertType<FieldDescriptor::TYPE_FLOAT>(&type_map_);
53 insertType<FieldDescriptor::TYPE_UINT64>(&type_map_);
54 insertType<FieldDescriptor::TYPE_UINT32>(&type_map_);
55 insertType<FieldDescriptor::TYPE_FIXED64>(&type_map_);
56 insertType<FieldDescriptor::TYPE_FIXED32>(&type_map_);
57 insertType<FieldDescriptor::TYPE_INT64>(&type_map_);
58 insertType<FieldDescriptor::TYPE_INT32>(&type_map_);
59 insertType<FieldDescriptor::TYPE_SFIXED32>(&type_map_);
60 insertType<FieldDescriptor::TYPE_SFIXED64>(&type_map_);
61 insertType<FieldDescriptor::TYPE_SINT32>(&type_map_);
62 insertType<FieldDescriptor::TYPE_SINT64>(&type_map_);
63 insertType<FieldDescriptor::TYPE_BOOL>(&type_map_);
64 insertType<FieldDescriptor::TYPE_STRING>(&type_map_);
65 insertType<FieldDescriptor::TYPE_BYTES>(&type_map_);
66 insertType<FieldDescriptor::TYPE_MESSAGE>(&type_map_);
67 insertType<FieldDescriptor::TYPE_GROUP>(&type_map_);
68 insertType<FieldDescriptor::TYPE_ENUM>(&type_map_);
71 cpptype_map_.insert(make_pair(
static_cast<FieldDescriptor::CppType
>(0),
72 shared_ptr<FromProtoCppTypeBase>(
new FromProtoCppTypeBase)));
74 insert<FieldDescriptor::CPPTYPE_DOUBLE>(&cpptype_map_);
75 insert<FieldDescriptor::CPPTYPE_FLOAT>(&cpptype_map_);
76 insert<FieldDescriptor::CPPTYPE_UINT64>(&cpptype_map_);
77 insert<FieldDescriptor::CPPTYPE_UINT32>(&cpptype_map_);
78 insert<FieldDescriptor::CPPTYPE_INT64>(&cpptype_map_);
79 insert<FieldDescriptor::CPPTYPE_INT32>(&cpptype_map_);
80 insert<FieldDescriptor::CPPTYPE_BOOL>(&cpptype_map_);
81 insert<FieldDescriptor::CPPTYPE_STRING>(&cpptype_map_);
82 insert<FieldDescriptor::CPPTYPE_MESSAGE>(&cpptype_map_);
83 insert<FieldDescriptor::CPPTYPE_ENUM>(&cpptype_map_);
87 boost::shared_ptr<dccl::internal::FromProtoCppTypeBase> dccl::internal::TypeHelper::find(google::protobuf::FieldDescriptor::CppType cpptype,
const std::string& type_name )
89 if(!type_name.empty())
91 CustomMessageMap::iterator it = custom_message_map_.find(type_name);
92 if(it != custom_message_map_.end())
96 CppTypeMap::iterator it = cpptype_map_.find(cpptype);
97 if(it != cpptype_map_.end())
100 return boost::shared_ptr<FromProtoCppTypeBase>();
104 boost::shared_ptr<dccl::internal::FromProtoTypeBase> dccl::internal::TypeHelper::find(google::protobuf::FieldDescriptor::Type type)
106 TypeMap::iterator it = type_map_.find(type);
107 if(it != type_map_.end())
110 return boost::shared_ptr<FromProtoTypeBase>();