diff options
Diffstat (limited to 'src/views/SkEvent.cpp')
-rw-r--r-- | src/views/SkEvent.cpp | 85 |
1 files changed, 13 insertions, 72 deletions
diff --git a/src/views/SkEvent.cpp b/src/views/SkEvent.cpp index c2b800fe9e..6ead33ec7f 100644 --- a/src/views/SkEvent.cpp +++ b/src/views/SkEvent.cpp @@ -7,103 +7,44 @@ #include "SkEvent.h" -void SkEvent::initialize(const char* type, size_t typeLen) { +void SkEvent::initialize(const char* type) { fType = nullptr; - setType(type, typeLen); + setType(type); f32 = 0; } SkEvent::SkEvent() { - initialize("", 0); + initialize(""); } SkEvent::SkEvent(const SkEvent& src) { *this = src; - if (((size_t) fType & 1) == 0) - setType(src.fType); -} - -SkEvent::SkEvent(const SkString& type) -{ - initialize(type.c_str(), type.size()); + setType(src.fType); } SkEvent::SkEvent(const char type[]) { SkASSERT(type); - initialize(type, strlen(type)); + initialize(type); } SkEvent::~SkEvent() { - if (((size_t) fType & 1) == 0) - sk_free((void*) fType); -} - -static size_t makeCharArray(char* buffer, size_t compact) -{ - size_t bits = (size_t) compact >> 1; - memcpy(buffer, &bits, sizeof(compact)); - buffer[sizeof(compact)] = 0; - return strlen(buffer); + sk_free(fType); } -void SkEvent::getType(SkString* str) const +bool SkEvent::isType(const char type[]) const { - if (str) - { - if ((size_t) fType & 1) // not a pointer - { - char chars[sizeof(size_t) + 1]; - size_t len = makeCharArray(chars, (size_t) fType); - str->set(chars, len); - } - else - str->set(fType); - } -} - -bool SkEvent::isType(const SkString& str) const -{ - return this->isType(str.c_str(), str.size()); -} - -bool SkEvent::isType(const char type[], size_t typeLen) const -{ - if (typeLen == 0) - typeLen = strlen(type); - if ((size_t) fType & 1) { // not a pointer - char chars[sizeof(size_t) + 1]; - size_t len = makeCharArray(chars, (size_t) fType); - return len == typeLen && strncmp(chars, type, typeLen) == 0; - } + size_t typeLen = strlen(type); return strncmp(fType, type, typeLen) == 0 && fType[typeLen] == 0; } -void SkEvent::setType(const char type[], size_t typeLen) -{ - if (typeLen == 0) - typeLen = strlen(type); - if (typeLen <= sizeof(fType)) { - size_t slot = 0; - memcpy(&slot, type, typeLen); - if (slot << 1 >> 1 != slot) - goto useCharStar; - slot <<= 1; - slot |= 1; - fType = (char*) slot; - } else { -useCharStar: - fType = (char*) sk_malloc_throw(typeLen + 1); - SkASSERT(((size_t) fType & 1) == 0); - memcpy(fType, type, typeLen); - fType[typeLen] = 0; - } -} - -void SkEvent::setType(const SkString& type) +void SkEvent::setType(const char type[]) { - setType(type.c_str()); + size_t typeLen = strlen(type); + fType = (char*) sk_malloc_throw(typeLen + 1); + memcpy(fType, type, typeLen); + fType[typeLen] = 0; } |