From 323e12f1f9ab33df15dcfed210e807561d98fa8c Mon Sep 17 00:00:00 2001 From: Alexis211 Date: Sun, 18 Oct 2009 15:27:34 +0200 Subject: Re-organized everything --- Source/Library/Common/BasicString.class.cpp | 175 ++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 Source/Library/Common/BasicString.class.cpp (limited to 'Source/Library/Common/BasicString.class.cpp') diff --git a/Source/Library/Common/BasicString.class.cpp b/Source/Library/Common/BasicString.class.cpp new file mode 100644 index 0000000..ceab60b --- /dev/null +++ b/Source/Library/Common/BasicString.class.cpp @@ -0,0 +1,175 @@ +#include + +#define FREE if (m_string != 0) delete m_string; +#define ALLOC m_string = new T[m_length]; +#define VRFY if (m_length == 0) { m_string = NULL; return; } + +using namespace CMem; + +template +BasicString::BasicString() { + m_string = NULL; + m_length = 0; +} + +template +BasicString::BasicString(const T* string, u32int length) { + m_string = NULL; + affect(string, length); +} + +template +BasicString::BasicString(const BasicString &other) { + m_string = NULL; + affect(other); +} + +template +BasicString::BasicString(const T value, u32int count) { + m_string = NULL; + affect(value, count); +} + +template +BasicString::~BasicString() { + FREE; +} + +template +void BasicString::affect(const BasicString &other) { + FREE; + m_length = other.m_length; + VRFY; + ALLOC; + memcpy((u8int*)m_string, (u8int*)(other.m_string), m_length * sizeof(T)); +} + +template +void BasicString::affect(const T* string, u32int length) { + FREE; + m_length = length; + VRFY; + ALLOC; + memcpy((u8int*)string, (u8int*)string, m_length * sizeof(T)); +} + +template +void BasicString::affect(const T value, u32int count) { + FREE; + m_length = count; + VRFY; + ALLOC; + for (u32int i = 0; i < count; i++) { + m_string[i] = value; + } +} + +template +bool BasicString::compare(const BasicString &other) const { + if (m_length != other.m_length) return false; + for (u32int i = 0; i < m_length; i++) { + if (m_string[i] != other.m_string[i]) return false; + } + return true; +} + +template +bool BasicString::compare(const T* string, u32int length) const { + if (m_length != length) return false; + for (u32int i = 0; i < m_length; i++) { + if (m_string[i] != string[i]) return false; + } + return true; +} + +template +BasicString &BasicString::append(const BasicString &other) { + T* newdata = new T[m_length + other.m_length]; + for (u32int i = 0; i < m_length; i++) { + newdata[i] = m_string[i]; + } + for (u32int i = 0; i < other.m_length; i++) { + newdata[i + m_length] = other.m_string[i]; + } + FREE; + m_string = newdata; + m_length += other.m_length; + return *this; +} + +template +BasicString &BasicString::append(const T* string, u32int length) { + T* newdata = new T[m_length + length]; + for (u32int i = 0; i < m_length; i++) { + newdata[i] = m_string[i]; + } + for (u32int i = 0; i < length; i++) { + newdata[i + m_length] = string[i]; + } + FREE; + m_string = newdata; + m_length += length; + return *this; +} + +template +BasicString &BasicString::append(const T other) { + T* newdata = new T[m_length + 1]; + for (u32int i = 0; i < m_length; i++) { + newdata[i] = m_string[i]; + } + FREE; + m_string = newdata; + m_string[m_length] = other; + m_length++; + return *this; +} + +template +BasicString BasicString::concat(const BasicString &other) const { + BasicString ret(*this); + return (ret.append(other)); +} + +template +BasicString BasicString::concat(const T* string, u32int length) const { + BasicString ret(*this); + return (ret.append(string, length)); +} + +template +BasicString BasicString::concat(const T other) const { + BasicString ret(*this); + return (ret.append(other)); +} + +template +void BasicString::clear() { + FREE; + m_string = 0; + m_length = 0; +} + +template +Vector< BasicString > BasicString::split(T sep) const { + Vector< BasicString > ret; + ret.push(BasicString()); + for (u32int i = 0; i < m_length; i++) { + if (m_string[i] == sep) { + ret.push(BasicString()); + } else { + ret.back().append(m_string[i]); + } + } + return ret; +} + +template +BasicString BasicString::substr(s32int start, u32int size) { + if (start < 0) start = m_length - start; + BasicString ret; + ret.m_string = new T[size + 1]; + ret.m_length = size; + memcpy((u8int*)ret.m_string, (u8int*)(&m_string[start]), size * sizeof(T)); + return ret; +} -- cgit v1.2.3