51 const char* data()
const {
return data_; }
52 char* data() {
return data_; }
56 uint32_t length()
const {
return length_; }
59 const char* c_str()
const {
64 std::string toString()
const {
65 return std::string(data_, length_);
69 bool equals(
const char* str,
size_t len)
const {
70 if (len != length_)
return false;
71 return memcmp(data_, str, len) == 0;
74 bool equals(
const char* str)
const {
75 return equals(str, std::char_traits<char>::length(str));
78 bool equals(
const std::string& str)
const {
79 return equals(str.c_str(), str.length());
83 return equals(sv.data(), sv.size());
87 static size_t hash(
const char* data,
size_t len) {
90 for (
size_t i = 0; i < len; ++i) {
91 h = ((h << 5) + h) + static_cast<unsigned char>(data[i]);
99 return hash(data_, length_);
104 bool starts_with(
const char* prefix)
const {
105 size_t prefix_len = strlen(prefix);
106 if (
static_cast<size_t>(length_) < prefix_len)
return false;
107 return memcmp(data_, prefix, prefix_len) == 0;
110 bool starts_with(
const std::string& prefix)
const {
111 return starts_with(prefix.c_str());
115 bool ends_with(
const char* suffix)
const {
116 size_t suffix_len = strlen(suffix);
117 if (
static_cast<size_t>(length_) < suffix_len)
return false;
118 return memcmp(data_ + length_ - suffix_len, suffix, suffix_len) == 0;
121 bool ends_with(
const std::string& suffix)
const {
122 return ends_with(suffix.c_str());
126 friend class IdentifierTable;