Imported Upstream version 3.8.0
[platform/upstream/protobuf.git] / src / google / protobuf / util / internal / utility.cc
index b8d917c..98d5eff 100644 (file)
 #include <google/protobuf/stubs/map_util.h>
 #include <google/protobuf/stubs/mathlimits.h>
 
+#include <google/protobuf/port_def.inc>
+
 namespace google {
 namespace protobuf {
 namespace util {
 namespace converter {
 
 bool GetBoolOptionOrDefault(
-    const google::protobuf::RepeatedPtrField<google::protobuf::Option>& options,
-    const string& option_name, bool default_value) {
+    const RepeatedPtrField<google::protobuf::Option>& options,
+    const std::string& option_name, bool default_value) {
   const google::protobuf::Option* opt = FindOptionOrNull(options, option_name);
   if (opt == nullptr) {
     return default_value;
@@ -59,8 +61,8 @@ bool GetBoolOptionOrDefault(
 }
 
 int64 GetInt64OptionOrDefault(
-    const google::protobuf::RepeatedPtrField<google::protobuf::Option>& options,
-    const string& option_name, int64 default_value) {
+    const RepeatedPtrField<google::protobuf::Option>& options,
+    const std::string& option_name, int64 default_value) {
   const google::protobuf::Option* opt = FindOptionOrNull(options, option_name);
   if (opt == nullptr) {
     return default_value;
@@ -69,8 +71,8 @@ int64 GetInt64OptionOrDefault(
 }
 
 double GetDoubleOptionOrDefault(
-    const google::protobuf::RepeatedPtrField<google::protobuf::Option>& options,
-    const string& option_name, double default_value) {
+    const RepeatedPtrField<google::protobuf::Option>& options,
+    const std::string& option_name, double default_value) {
   const google::protobuf::Option* opt = FindOptionOrNull(options, option_name);
   if (opt == nullptr) {
     return default_value;
@@ -78,9 +80,9 @@ double GetDoubleOptionOrDefault(
   return GetDoubleFromAny(opt->value());
 }
 
-string GetStringOptionOrDefault(
-    const google::protobuf::RepeatedPtrField<google::protobuf::Option>& options,
-    const string& option_name, const string& default_value) {
+std::string GetStringOptionOrDefault(
+    const RepeatedPtrField<google::protobuf::Option>& options,
+    const std::string& option_name, const std::string& default_value) {
   const google::protobuf::Option* opt = FindOptionOrNull(options, option_name);
   if (opt == nullptr) {
     return default_value;
@@ -89,7 +91,7 @@ string GetStringOptionOrDefault(
 }
 
 template <typename T>
-void ParseFromAny(const string& data, T* result) {
+void ParseFromAny(const std::string& data, T* result) {
   result->ParseFromString(data);
 }
 
@@ -113,7 +115,7 @@ double GetDoubleFromAny(const google::protobuf::Any& any) {
   return i.value();
 }
 
-string GetStringFromAny(const google::protobuf::Any& any) {
+std::string GetStringFromAny(const google::protobuf::Any& any) {
   google::protobuf::StringValue s;
   ParseFromAny(any.value(), &s);
   return s.value();
@@ -131,13 +133,13 @@ const StringPiece GetTypeWithoutUrl(StringPiece type_url) {
   }
 }
 
-const string GetFullTypeWithUrl(StringPiece simple_type) {
+const std::string GetFullTypeWithUrl(StringPiece simple_type) {
   return StrCat(kTypeServiceBaseUrl, "/", simple_type);
 }
 
 const google::protobuf::Option* FindOptionOrNull(
-    const google::protobuf::RepeatedPtrField<google::protobuf::Option>& options,
-    const string& option_name) {
+    const RepeatedPtrField<google::protobuf::Option>& options,
+    const std::string& option_name) {
   for (int i = 0; i < options.size(); ++i) {
     const google::protobuf::Option& opt = options.Get(i);
     if (opt.name() == option_name) {
@@ -217,7 +219,7 @@ const google::protobuf::EnumValue* FindEnumValueByNameWithoutUnderscoreOrNull(
   if (enum_type != nullptr) {
     for (int i = 0; i < enum_type->enumvalue_size(); ++i) {
       const google::protobuf::EnumValue& enum_value = enum_type->enumvalue(i);
-      string enum_name_without_underscore = enum_value.name();
+      std::string enum_name_without_underscore = enum_value.name();
 
       // Remove underscore from the name.
       enum_name_without_underscore.erase(
@@ -225,7 +227,7 @@ const google::protobuf::EnumValue* FindEnumValueByNameWithoutUnderscoreOrNull(
                       enum_name_without_underscore.end(), '_'),
           enum_name_without_underscore.end());
       // Make the name uppercase.
-      for (string::iterator it = enum_name_without_underscore.begin();
+      for (std::string::iterator it = enum_name_without_underscore.begin();
            it != enum_name_without_underscore.end(); ++it) {
         *it = ascii_toupper(*it);
       }
@@ -238,19 +240,19 @@ const google::protobuf::EnumValue* FindEnumValueByNameWithoutUnderscoreOrNull(
   return nullptr;
 }
 
-string EnumValueNameToLowerCamelCase(const StringPiece input) {
-  string input_string(input);
+std::string EnumValueNameToLowerCamelCase(const StringPiece input) {
+  std::string input_string(input);
   std::transform(input_string.begin(), input_string.end(), input_string.begin(),
                  ::tolower);
   return ToCamelCase(input_string);
 }
 
-string ToCamelCase(const StringPiece input) {
+std::string ToCamelCase(const StringPiece input) {
   bool capitalize_next = false;
   bool was_cap = true;
   bool is_cap = false;
   bool first_word = true;
-  string result;
+  std::string result;
   result.reserve(input.size());
 
   for (size_t i = 0; i < input.size(); ++i, was_cap = is_cap) {
@@ -288,10 +290,10 @@ string ToCamelCase(const StringPiece input) {
   return result;
 }
 
-string ToSnakeCase(StringPiece input) {
+std::string ToSnakeCase(StringPiece input) {
   bool was_not_underscore = false;  // Initialize to false for case 1 (below)
   bool was_not_cap = false;
-  string result;
+  std::string result;
   result.reserve(input.size() << 1);
 
   for (size_t i = 0; i < input.size(); ++i) {
@@ -324,8 +326,8 @@ string ToSnakeCase(StringPiece input) {
   return result;
 }
 
-std::set<string>* well_known_types_ = NULL;
-GOOGLE_PROTOBUF_DECLARE_ONCE(well_known_types_init_);
+std::set<std::string>* well_known_types_ = NULL;
+PROTOBUF_NAMESPACE_ID::internal::once_flag well_known_types_init_;
 const char* well_known_types_name_array_[] = {
     "google.protobuf.Timestamp",   "google.protobuf.Duration",
     "google.protobuf.DoubleValue", "google.protobuf.FloatValue",
@@ -337,19 +339,20 @@ const char* well_known_types_name_array_[] = {
 void DeleteWellKnownTypes() { delete well_known_types_; }
 
 void InitWellKnownTypes() {
-  well_known_types_ = new std::set<string>;
+  well_known_types_ = new std::set<std::string>;
   for (int i = 0; i < GOOGLE_ARRAYSIZE(well_known_types_name_array_); ++i) {
     well_known_types_->insert(well_known_types_name_array_[i]);
   }
   google::protobuf::internal::OnShutdown(&DeleteWellKnownTypes);
 }
 
-bool IsWellKnownType(const string& type_name) {
-  InitWellKnownTypes();
+bool IsWellKnownType(const std::string& type_name) {
+  PROTOBUF_NAMESPACE_ID::internal::call_once(well_known_types_init_,
+                                             InitWellKnownTypes);
   return ContainsKey(*well_known_types_, type_name);
 }
 
-bool IsValidBoolString(const string& bool_string) {
+bool IsValidBoolString(const std::string& bool_string) {
   return bool_string == "true" || bool_string == "false" ||
          bool_string == "1" || bool_string == "0";
 }
@@ -372,7 +375,7 @@ bool IsMessageSetWireFormat(const google::protobuf::Type& type) {
              "google.protobuf.MessageOptions.message_set_wire_format", false);
 }
 
-string DoubleAsString(double value) {
+std::string DoubleAsString(double value) {
   if (MathLimits<double>::IsPosInf(value)) return "Infinity";
   if (MathLimits<double>::IsNegInf(value)) return "-Infinity";
   if (MathLimits<double>::IsNaN(value)) return "NaN";
@@ -380,7 +383,7 @@ string DoubleAsString(double value) {
   return SimpleDtoa(value);
 }
 
-string FloatAsString(float value) {
+std::string FloatAsString(float value) {
   if (MathLimits<float>::IsFinite(value)) return SimpleFtoa(value);
   return DoubleAsString(value);
 }
@@ -405,13 +408,6 @@ bool SafeStrToFloat(StringPiece str, float* value) {
   return true;
 }
 
-bool StringStartsWith(StringPiece text, StringPiece prefix) {
-  return text.starts_with(prefix);
-}
-
-bool StringEndsWith(StringPiece text, StringPiece suffix) {
-  return text.ends_with(suffix);
-}
 }  // namespace converter
 }  // namespace util
 }  // namespace protobuf