summaryrefslogtreecommitdiff
path: root/tools/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/string.c')
-rw-r--r--tools/string.c454
1 files changed, 0 insertions, 454 deletions
diff --git a/tools/string.c b/tools/string.c
deleted file mode 100644
index 0897ece..0000000
--- a/tools/string.c
+++ /dev/null
@@ -1,454 +0,0 @@
-#include "tools/string.h"
-#ifdef TOOLBOX_REGEX
-# include "tools/regex.h"
-#endif
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <limits.h>
-#include <math.h>
-#include <errno.h>
-
-const cTBString cTBString::Null;
-
-cTBString::cTBString():
- cTBShared(),
- m_StringLen(0) {
-}
-
-cTBString::cTBString(const cTBString &src):
- cTBShared(src),
- m_StringLen(src.m_StringLen) {
-}
-
-cTBString::cTBString(const char *src) {
- Set(src);
-}
-
-cTBString::cTBString(const uchar *src) {
- Set(src);
-}
-
-cTBString::cTBString(char src) {
- Set(src);
-}
-
-cTBString::~cTBString () {
-}
-
-void cTBString::Release(uint newsize) {
- m_StringLen = newsize;
- cTBShared::Release(m_StringLen + 1);
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Clear() {
- cTBShared::Clear();
- m_StringLen = 0;
-}
-
-void cTBString::Set(const cTBString &String) {
- cTBShared::Set(String);
- m_StringLen = String.m_StringLen;
-}
-
-void cTBString::Set (const char *String) {
- m_StringLen = strlen(String);
- Allocate(m_StringLen + 1);
-
- memcpy(Buffer(), String, m_StringLen);
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Set (const uchar *String) {
- Set((const char*)String);
-}
-
-void cTBString::Set (char Character) {
- m_StringLen = 1;
- Allocate(m_StringLen + 1);
-
- Buffer()[0] = Character;
- Buffer()[1] = 0;
-}
-
-void cTBString::Fill(char Character, int Length) {
- if (Length != -1) {
- m_StringLen = Length;
- Allocate(m_StringLen + 1);
- }
- memset(Buffer(), Character, m_StringLen);
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Append(const cTBString &src) {
- Allocate(m_StringLen + src.m_StringLen + 1, true);
-
- memcpy(Buffer() + m_StringLen, src.Buffer(), src.m_StringLen);
- m_StringLen += src.m_StringLen;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Append(const char *src) {
- uint len = strlen(src);
- Allocate(m_StringLen + len + 1, true);
-
- memcpy(Buffer() + m_StringLen, src, len);
- m_StringLen += len;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Append(char src) {
- Allocate(m_StringLen + 2, true);
-
- Buffer()[m_StringLen] = src;
- ++m_StringLen;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Prepend(const cTBString &src) {
- Allocate(m_StringLen + src.m_StringLen + 1, true);
-
- memmove(Buffer() + src.m_StringLen, Buffer(), m_StringLen);
- memcpy(Buffer(), src.Buffer(), src.m_StringLen);
- m_StringLen += src.m_StringLen;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Prepend(const char *src) {
- uint len = strlen(src);
- Allocate(m_StringLen + len + 1, true);
-
- memmove(Buffer() + len, Buffer(), m_StringLen);
- memcpy(Buffer(), src, len);
- m_StringLen += len;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Prepend(char src) {
- Allocate(m_StringLen + 2, true);
-
- memmove(Buffer() + 1, Buffer(), m_StringLen);
- Buffer()[0] = src;
- Buffer()[++m_StringLen] = 0;
-}
-
-void cTBString::Insert(uint Index, const cTBString &String) {
- Allocate(m_StringLen + String.m_StringLen + 1, true);
-
- memmove(Buffer() + Index + String.m_StringLen, Buffer() + Index, m_StringLen - Index);
- memcpy(Buffer() + Index, String.Buffer(), String.m_StringLen);
- m_StringLen += String.m_StringLen;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Insert(uint Index, const char *String) {
- uint len = strlen(String);
- Allocate(m_StringLen + len + 1, true);
-
- memmove(Buffer() + Index + len, Buffer() + Index, m_StringLen - Index);
- memcpy(Buffer() + Index, String, len);
- m_StringLen += len;
- Buffer()[m_StringLen] = 0;
-}
-
-void cTBString::Insert(uint Index, char Character) {
- Allocate(m_StringLen + 2, true);
-
- memmove(Buffer() + Index + 1, Buffer() + Index, m_StringLen - Index);
- Buffer()[Index] = Character;
- Buffer()[++m_StringLen] = 0;
-}
-
-RETURNS(cTBString, cTBString::Left(uint count) const, ret)
- if (count > m_StringLen)
- count = m_StringLen;
-
- ret.Allocate(count + 1);
- memcpy(ret.Buffer(), Buffer(), count);
- ret.Buffer()[count] = 0;
- ret.m_StringLen = count;
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Right(uint count) const, ret)
- if (count > m_StringLen)
- count = m_StringLen;
-
- ret.Allocate(count + 1);
- memcpy(ret.Buffer(), Buffer() + m_StringLen - count, count);
- ret.Buffer()[count] = 0;
- ret.m_StringLen = count;
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Mid(int idx, int count) const, ret)
- if (idx < 0)
- idx = m_StringLen + idx;
-
- if ((count < 0) || (count > (int)m_StringLen - idx))
- count = m_StringLen - idx;
-
- ret.Allocate(count + 1);
- memcpy(ret.Buffer(), Buffer() + idx, count);
- ret.Buffer()[count] = 0;
- ret.m_StringLen = count;
-RETURN(ret)
-
-int cTBString::Find (const cTBString &String, uint Offset) const {
- if (Offset >= m_StringLen)
- return -1;
-
- char *pos = strstr(Buffer() + Offset, String.Buffer());
- if (pos) return (pos - Buffer());
- else return -1;
-}
-
-int cTBString::Find (const char *String, uint Offset) const {
- if (Offset >= m_StringLen)
- return -1;
-
- char *pos = strstr(Buffer() + Offset, String);
- if (pos) return (pos - Buffer());
- else return -1;
-}
-
-int cTBString::Find (char Character, uint Offset) const {
- if (Offset >= m_StringLen)
- return -1;
-
- char *pos = strchr(Buffer() + Offset, Character);
- if (pos) return (pos - Buffer());
- else return -1;
-}
-
-#ifdef TOOLBOX_REGEX
-bool cTBString::Find (cTBRegEx &Regex, uint Offset) const {
- return Regex.Match(Buffer(), Offset);
-}
-#endif
-
-void cTBString::Format (const char *fmt, ...) {
- int n, size = 128;
- va_list ap;
-
- char *buf = Buffer(size);
-
- while (1) {
- va_start(ap, fmt);
- n = vsnprintf(buf, size, fmt, ap);
- va_end(ap);
-
- if ((n > -1) && (n < size))
- break;
-
- if (n > -1)
- size = n + 1;
- else
- size *= 2;
-
- buf = Buffer(size);
- }
- Release(n);
-}
-
-void cTBString::Format(const cTBString &fmt, ...) {
- int n, size = 128;
- va_list ap;
-
- char *buf = Buffer(size);
-
- while (1) {
- va_start(ap, &fmt);
- n = vsnprintf(buf, size, fmt, ap);
- va_end(ap);
-
- if ((n > -1) && (n < size))
- break;
-
- if (n > -1)
- size = n + 1;
- else
- size *= 2;
-
- buf = Buffer(size);
- }
- Release(n);
-}
-
-template<cTBString::TOFUNC F>
-cTBString cTBString::ToAnything(void) const {
- const char *src;
- char *dest;
- cTBString ret;
-
- src = Buffer();
- dest = ret.Buffer(m_StringLen + 1);
-
- for (; src < Buffer() + m_StringLen; ++src, ++dest)
- *dest = F(*src);
-
- *dest = '\0';
-
- ret.Release(m_StringLen);
- return ret;
-}
-
-template<cTBString::ISFUNC F>
-bool cTBString::IsAnything(void) const {
- const char *ptr = Buffer();
-
- for (; ptr < Buffer() + m_StringLen; ++ptr)
- if (!F(*ptr)) return false;
-
- return true;
-}
-
-short cTBString::ToShort(bool *Ok) const {
- long ret;
- char *endptr;
- bool res = false;
-
- ret = strtol(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && ret >= SHRT_MIN && ret <= SHRT_MAX)
- res = true;
-
- if (Ok) *Ok = res;
- return (short)ret;
-}
-
-ushort cTBString::ToUShort(bool *Ok) const {
- ulong ret;
- char *endptr;
- bool res = false;
-
- ret = strtoul(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && ret <= USHRT_MAX)
- res = true;
-
- if (Ok) *Ok = res;
- return (ushort)ret;
-}
-
-int cTBString::ToInt(bool *Ok) const {
- long ret;
- char *endptr;
- bool res = false;
-
- ret = strtol(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && ret >= INT_MIN && ret <= INT_MAX)
- res = true;
-
- if (Ok) *Ok = res;
- return (int)ret;
-}
-
-uint cTBString::ToUInt(bool *Ok) const {
- ulong ret;
- char *endptr;
- bool res = false;
-
- ret = strtoul(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && ret <= UINT_MAX)
- res = true;
-
- if (Ok) *Ok = res;
- return (uint)ret;
-}
-
-long cTBString::ToLong(bool *Ok) const {
- long ret;
- char *endptr;
- bool res = false;
-
- errno = 0;
- ret = strtol(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && errno != ERANGE)
- res = true;
-
- if (Ok) *Ok = res;
- return (long)ret;
-}
-
-ulong cTBString::ToULong(bool *Ok) const {
- ulong ret;
- char *endptr;
- bool res = false;
-
- errno = 0;
- ret = strtoul(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && errno != ERANGE)
- res = true;
-
- if (Ok) *Ok = res;
- return (ulong)ret;
-}
-
-float cTBString::ToFloat(bool *Ok) const {
- double ret;
- char *endptr;
- bool res = false;
-
- ret = strtod(Buffer(), &endptr);
-
- if (!IsEmpty() && *endptr == '\0' && errno != ERANGE)
- res = true;
-
- if (Ok) *Ok = res;
- return (float)ret;
-}
-
-double cTBString::ToDouble(bool *Ok) const {
- double ret;
- char *endptr;
- bool res = false;
-
- errno = 0;
- ret = strtol(Buffer(), &endptr, 0);
-
- if (!IsEmpty() && *endptr == '\0' && errno != ERANGE)
- res = true;
-
- if (Ok) *Ok = res;
- return (double)ret;
-}
-
-RETURNS(cTBString, cTBString::Number(short Num), ret)
- ret.Format("%hd", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(ushort Num), ret)
- ret.Format("%hu", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(int Num), ret)
- ret.Format("%d", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(uint Num), ret)
- ret.Format("%u", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(long Num), ret)
- ret.Format("%ld", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(ulong Num), ret)
- ret.Format("%lu", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(float Num), ret)
- ret.Format("%f", Num);
-RETURN(ret)
-
-RETURNS(cTBString, cTBString::Number(double Num), ret)
- ret.Format("%f", Num);
-RETURN(ret)
-