167 lines
4.1 KiB
C++
167 lines
4.1 KiB
C++
#include "MString.h"
|
|
#include "Log.h"
|
|
#include <stdlib.h>
|
|
#include <iomanip>
|
|
|
|
namespace coreutils {
|
|
|
|
MString::MString() {
|
|
data = NULL;
|
|
length = 0;
|
|
cursor = NULL;
|
|
}
|
|
|
|
MString::MString(const char *data) {
|
|
setSize(strlen(data));
|
|
memcpy(this->data, data, length);
|
|
cursor = this->data;
|
|
}
|
|
|
|
MString::MString(char *data, size_t length) {
|
|
setSize(length);
|
|
memcpy(this->data, data, length);
|
|
cursor = this->data;
|
|
}
|
|
|
|
MString::MString(const char *data, size_t length) {
|
|
setSize(length);
|
|
memcpy(this->data, data, length);
|
|
cursor = this->data;
|
|
}
|
|
|
|
MString::MString(const MString &mstring) {
|
|
setSize(mstring.length);
|
|
memcpy(data, mstring.data, mstring.length);
|
|
cursor = data;
|
|
// Log(LOG_DEBUG_2) << "MString Copy Constructor: ";
|
|
}
|
|
|
|
MString::MString(ZString &zstring) {
|
|
setSize(zstring.getLength());
|
|
memcpy(data, zstring.getData(), zstring.getLength());
|
|
cursor = data;
|
|
}
|
|
|
|
MString::MString(ZString zstring) {
|
|
setSize(zstring.getLength());
|
|
memcpy(data, zstring.getData(), zstring.getLength());
|
|
cursor = data;
|
|
}
|
|
|
|
MString::MString(std::string data) {
|
|
setSize(data.length());
|
|
memcpy(this->data, (char *)data.c_str(), data.length());
|
|
cursor = this->data;
|
|
}
|
|
|
|
MString::~MString() {
|
|
if(data)
|
|
free(data);
|
|
}
|
|
|
|
// MString& MString::operator=(coreutils::ZString& value) {
|
|
// if(*this == value)
|
|
// return *this;
|
|
// int len = length;
|
|
// setSize(length + value.getLength());
|
|
// memcpy(data + len, value.getData(), value.getLength());
|
|
// return *this;
|
|
// }
|
|
|
|
// MString& MString::operator=(coreutils::ZString& value) {
|
|
// if(*this == value)
|
|
// return *this;
|
|
// int len = length;
|
|
// setSize(length + value.getLength());
|
|
// memcpy(data + len, value.getData(), value.getLength());
|
|
// return *this;
|
|
// }
|
|
|
|
MString& MString::operator=(coreutils::ZString value) {
|
|
if(*this == value)
|
|
return *this;
|
|
int len = length;
|
|
setSize(length + value.getLength());
|
|
memcpy(data + len, value.getData(), value.getLength());
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::operator=(const char *value) {
|
|
int len = strlen(value);
|
|
setSize(len);
|
|
memcpy(data, value, len);
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::operator=(char value) {
|
|
int len = 1;
|
|
setSize(1);
|
|
*data = value;
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::operator<<(const char *value) {
|
|
int temp = length;
|
|
int len = strlen(value);
|
|
setSize(len + length);
|
|
memcpy(data + temp, value, len);
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::operator<<(const int value) {
|
|
std::stringstream temp;
|
|
temp << value;
|
|
*this << temp.str();
|
|
return *this;
|
|
}
|
|
|
|
// MString& MString::operator<<(coreutils::ZString &zstring) {
|
|
// int temp = length;
|
|
// int len = length + zstring.getLength();
|
|
// setSize(len);
|
|
// memcpy(data + temp, zstring.getData(), zstring.getLength());
|
|
// return *this;
|
|
// }
|
|
|
|
MString& MString::operator<<(coreutils::ZString zstring) {
|
|
int temp = length;
|
|
int len = length + zstring.getLength();
|
|
setSize(len);
|
|
memcpy(data + temp, zstring.getData(), zstring.getLength());
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::operator<<(std::string value) {
|
|
int temp = length;
|
|
int len = length + value.length();
|
|
setSize(len);
|
|
memcpy(data + temp, value.c_str(), value.length());
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::write(char ch) {
|
|
setSize(length + 1);
|
|
*(data + length - 1) = ch;
|
|
return *this;
|
|
}
|
|
|
|
MString& MString::write(ZString &value) {
|
|
int len = length;
|
|
setSize(length + value.getLength());
|
|
memcpy(data + len, value.getData(), value.getLength());
|
|
return *this;
|
|
}
|
|
|
|
void MString::setSize(int size) {
|
|
int cursorOffset = cursor - data;
|
|
int newBufferSize = ((size / 256) + 1) * 256;
|
|
if(bufferSize != newBufferSize) {
|
|
bufferSize = newBufferSize;
|
|
data = (char *)realloc(data, bufferSize);
|
|
cursor = data + cursorOffset;
|
|
}
|
|
length = size;
|
|
}
|
|
|
|
}
|