diff options
author | Zachary Turner <zturner@google.com> | 2016-11-17 01:37:42 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-11-17 01:37:42 +0000 |
commit | 4aa8753c8103f1e1988b79325f957a587c150337 (patch) | |
tree | 9d6111d7b94f298115f955e82d1b4d7053bb332e /lldb/source/Core/UUID.cpp | |
parent | 004319554cf6044896073b8a305ba9d340ed5f94 (diff) | |
download | bcm5719-llvm-4aa8753c8103f1e1988b79325f957a587c150337.tar.gz bcm5719-llvm-4aa8753c8103f1e1988b79325f957a587c150337.zip |
Convert AutoComplete related code to StringRef.
Differential Revision: https://reviews.llvm.org/D26721
llvm-svn: 287188
Diffstat (limited to 'lldb/source/Core/UUID.cpp')
-rw-r--r-- | lldb/source/Core/UUID.cpp | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/lldb/source/Core/UUID.cpp b/lldb/source/Core/UUID.cpp index d7d4e610d48..d7ebea72fb4 100644 --- a/lldb/source/Core/UUID.cpp +++ b/lldb/source/Core/UUID.cpp @@ -126,59 +126,58 @@ static inline int xdigit_to_int(char ch) { return ch - '0'; } -size_t UUID::DecodeUUIDBytesFromCString(const char *p, ValueType &uuid_bytes, - const char **end, - uint32_t num_uuid_bytes) { +llvm::StringRef UUID::DecodeUUIDBytesFromString(llvm::StringRef p, + ValueType &uuid_bytes, + uint32_t num_uuid_bytes) { + ::memset(uuid_bytes, 0, sizeof(uuid_bytes)); size_t uuid_byte_idx = 0; - if (p) { - while (*p) { - if (isxdigit(p[0]) && isxdigit(p[1])) { - int hi_nibble = xdigit_to_int(p[0]); - int lo_nibble = xdigit_to_int(p[1]); - // Translate the two hex nibble characters into a byte - uuid_bytes[uuid_byte_idx] = (hi_nibble << 4) + lo_nibble; - - // Skip both hex digits - p += 2; - - // Increment the byte that we are decoding within the UUID value - // and break out if we are done - if (++uuid_byte_idx == num_uuid_bytes) - break; - } else if (*p == '-') { - // Skip dashes - p++; - } else { - // UUID values can only consist of hex characters and '-' chars + while (!p.empty()) { + if (isxdigit(p[0]) && isxdigit(p[1])) { + int hi_nibble = xdigit_to_int(p[0]); + int lo_nibble = xdigit_to_int(p[1]); + // Translate the two hex nibble characters into a byte + uuid_bytes[uuid_byte_idx] = (hi_nibble << 4) + lo_nibble; + + // Skip both hex digits + p = p.drop_front(2); + + // Increment the byte that we are decoding within the UUID value + // and break out if we are done + if (++uuid_byte_idx == num_uuid_bytes) break; - } + } else if (p.front() == '-') { + // Skip dashes + p = p.drop_front(); + } else { + // UUID values can only consist of hex characters and '-' chars + break; } } - if (end) - *end = p; + // Clear trailing bytes to 0. for (uint32_t i = uuid_byte_idx; i < sizeof(ValueType); i++) uuid_bytes[i] = 0; - return uuid_byte_idx; + return p; } size_t UUID::SetFromCString(const char *cstr, uint32_t num_uuid_bytes) { if (cstr == NULL) return 0; - const char *p = cstr; + llvm::StringRef orig(cstr); + llvm::StringRef p = orig; // Skip leading whitespace characters - while (isspace(*p)) - ++p; + p = p.ltrim(); - const size_t uuid_byte_idx = - UUID::DecodeUUIDBytesFromCString(p, m_uuid, &p, num_uuid_bytes); + llvm::StringRef rest = + UUID::DecodeUUIDBytesFromString(p, m_uuid, num_uuid_bytes); + size_t bytes_decoded = p.size() - rest.size(); // If we successfully decoded a UUID, return the amount of characters that // were consumed - if (uuid_byte_idx == num_uuid_bytes) { + if (bytes_decoded == num_uuid_bytes) { m_num_uuid_bytes = num_uuid_bytes; - return p - cstr; + return orig.size() - rest.size(); } // Else return zero to indicate we were not able to parse a UUID value |