Index: third_party/protobuf/src/google/protobuf/stubs/stringpiece.h |
diff --git a/third_party/protobuf/src/google/protobuf/stubs/stringpiece.h b/third_party/protobuf/src/google/protobuf/stubs/stringpiece.h |
index ec3ffd5b06f0a9cb6300faa2255064aacce62497..9167165940d24e88cc29be0fe4de98a8579205ac 100644 |
--- a/third_party/protobuf/src/google/protobuf/stubs/stringpiece.h |
+++ b/third_party/protobuf/src/google/protobuf/stubs/stringpiece.h |
@@ -435,6 +435,44 @@ inline bool operator>=(StringPiece x, StringPiece y) { |
// allow StringPiece to be logged |
extern std::ostream& operator<<(std::ostream& o, StringPiece piece); |
+namespace internal { |
+// StringPiece is not a POD and can not be used in an union (pre C++11). We |
+// need a POD version of it. |
+struct StringPiecePod { |
+ // Create from a StringPiece. |
+ static StringPiecePod CreateFromStringPiece(StringPiece str) { |
+ StringPiecePod pod; |
+ pod.data_ = str.data(); |
+ pod.size_ = str.size(); |
+ return pod; |
+ } |
+ |
+ // Cast to StringPiece. |
+ operator StringPiece() const { return StringPiece(data_, size_); } |
+ |
+ bool operator==(const char* value) const { |
+ return StringPiece(data_, size_) == StringPiece(value); |
+ } |
+ |
+ char operator[](stringpiece_ssize_type i) const { |
+ assert(0 <= i); |
+ assert(i < size_); |
+ return data_[i]; |
+ } |
+ |
+ const char* data() const { return data_; } |
+ |
+ stringpiece_ssize_type size() const { |
+ return size_; |
+ } |
+ |
+ std::string ToString() const { return std::string(data_, size_); } |
+ private: |
+ const char* data_; |
+ stringpiece_ssize_type size_; |
+}; |
+ |
+} // namespace internal |
} // namespace protobuf |
} // namespace google |