Merge pull request #2254 from chaoran:master

PiperOrigin-RevId: 248759825
This commit is contained in:
Gennadiy Civil
2019-05-17 15:05:43 -04:00
3 changed files with 63 additions and 75 deletions

View File

@@ -1556,6 +1556,65 @@ TEST(PrintOneofTest, Basic) {
PrintToString(Type(NonPrintable{})));
}
#endif // GTEST_HAS_ABSL
namespace {
class string_ref;
/**
* This is a synthetic pointer to a fixed size string.
*/
class string_ptr {
public:
string_ptr(const char* data, size_t size) : data_(data), size_(size) {}
string_ptr& operator++() noexcept {
data_ += size_;
return *this;
}
string_ref operator*() const noexcept;
private:
const char* data_;
size_t size_;
};
/**
* This is a synthetic reference of a fixed size string.
*/
class string_ref {
public:
string_ref(const char* data, size_t size) : data_(data), size_(size) {}
string_ptr operator&() const noexcept { return {data_, size_}; } // NOLINT
bool operator==(const char* s) const noexcept {
if (size_ > 0 && data_[size_ - 1] != 0) {
return std::string(data_, size_) == std::string(s);
} else {
return std::string(data_) == std::string(s);
}
}
private:
const char* data_;
size_t size_;
};
string_ref string_ptr::operator*() const noexcept { return {data_, size_}; }
TEST(string_ref, compare) {
const char* s = "alex\0davidjohn\0";
string_ptr ptr(s, 5);
EXPECT_EQ(*ptr, "alex");
EXPECT_TRUE(*ptr == "alex");
++ptr;
EXPECT_EQ(*ptr, "david");
EXPECT_TRUE(*ptr == "david");
++ptr;
EXPECT_EQ(*ptr, "john");
}
} // namespace
} // namespace gtest_printers_test
} // namespace testing