#include "CharArray.h" #include "utils.h" CharArray::CharArray() : _buf(nullptr), _size(0){} CharArray::CharArray(const char *s) : CharArray() { this->operator=(s); } CharArray::CharArray(const CharArray &s) : CharArray() { this->operator=(s); } CharArray::CharArray(size_t i) { _size = i; _buf = new char[i](); /* Zero initialize */ } CharArray::~CharArray() { delete[] _buf; } CharArray::operator char *() { return _buf; } CharArray::operator const char *() const { return _buf; } const char *CharArray::c_str() const { return _buf; } size_t CharArray::length() const { return strlen(_buf); } size_t CharArray::size() const { return _size; } CharArray &CharArray::operator=(const CharArray &s) { delete[] _buf; _size = s._size; _buf = new char[_size]; memcpy(_buf, s._buf, _size); return *this; } CharArray &CharArray::operator=(const char *s) { delete[] _buf; _buf = strdup2(s, &_size); return *this; } CharArray &CharArray::operator=(CharArray &&s) { delete[] _buf; _size = s._size; _buf = s._buf; s._buf = nullptr; s._size = 0; return *this; } bool CharArray::operator==(const char *s) const { if (_buf == nullptr || s == nullptr) return false; return strcmp(_buf, s) == 0; } bool CharArray::operator==(char *s) const { return *this == (const char *) s; } bool CharArray::operator!=(const char *s) const { return !(*this == s); } int CharArray::compare(const char *s) const { return strcmp(_buf, s); } int CharArray::compare(const char *s, size_t len) const { return strncmp(_buf, s, len); } bool CharArray::contains(const char *s) const { return s == nullptr ? false : strstr(_buf, s) != nullptr; } bool CharArray::starts_with(const char *s) const { return s == nullptr ? false : compare(s, strlen(s)) == 0; } bool CharArray::empty() const { return _buf == nullptr || _buf[0] == '\0'; }