| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include <glog/logging.h>
- #include "Orm/MessageField.h"
- namespace Egametang {
- MessageField::MessageField(
- const google::protobuf::Message& message,
- const google::protobuf::FieldDescriptor* field):
- message(message), field(field)
- {
- }
- MessageField::~MessageField()
- {
- }
- std::string MessageField::ValueToString()
- {
- const google::protobuf::Reflection* reflection = message.GetReflection();
- google::protobuf::FieldDescriptor::Type type = field->type();
- std::string valueStr = "";
- switch (type)
- {
- case google::protobuf::FieldDescriptor::TYPE_BOOL:
- {
- bool value = reflection->GetBool(message, field);
- valueStr = value? "1" : "0";
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_DOUBLE:
- {
- double value = reflection->GetDouble(message, field);
- valueStr = boost::lexical_cast<std::string>(value);
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_INT32:
- {
- int32 value = reflection->GetInt32(message, field);
- valueStr = boost::lexical_cast<std::string>(value);
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_INT64:
- {
- int64 value = reflection->GetInt64(message, field);
- valueStr = boost::lexical_cast<std::string>(value);
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_UINT32:
- {
- uint32 value = reflection->GetUInt32(message, field);
- valueStr = boost::lexical_cast<std::string>(value);
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_UINT64:
- {
- uint64 value = reflection->GetUInt64(message, field);
- valueStr = boost::lexical_cast<std::string>(value);
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_STRING:
- {
- valueStr = "'" + reflection->GetString(message, field) + "'";
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_BYTES:
- {
- valueStr = "'" + reflection->GetString(message, field) + "'";
- break;
- }
- case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
- {
- google::protobuf::Message& message = reflection->GetMessage(message, field);
- valueStr = "'" + message.SerializeAsString() + "'";
- break;
- }
- default:
- {
- LOG(FATAL) << "no such type";
- break;
- }
- }
- return valueStr;
- }
- } // namespace Egametang
|