mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2024-11-28 10:24:20 +01:00
e19413dd5b
--HG-- rename : sourcemm/IPluginManager.h => core/IPluginManager.h rename : sourcemm/ISmmAPI.h => core/ISmmAPI.h rename : sourcemm/ISmmPlugin.h => core/ISmmPlugin.h rename : sourcemm/ISmmPluginExt.h => core/ISmmPluginExt.h rename : sourcemm/LICENSE.txt => core/LICENSE.txt rename : sourcemm/Makefile => core/Makefile rename : sourcemm/changelog.txt => core/changelog.txt rename : sourcemm/episode1/console.cpp => core/episode1/console.cpp rename : sourcemm/episode1/console.h => core/episode1/console.h rename : sourcemm/episode1/convar_smm.h => core/episode1/convar_smm.h rename : sourcemm/episode1/msvc8/sourcemm.sln => core/episode1/msvc8/sourcemm.sln rename : sourcemm/episode1/msvc8/sourcemm.vcproj => core/episode1/msvc8/sourcemm.vcproj rename : sourcemm/episode1/provider_ep1.cpp => core/episode1/provider_ep1.cpp rename : sourcemm/episode1/provider_ep1.h => core/episode1/provider_ep1.h rename : sourcemm/episode1/vsp_listener.cpp => core/episode1/vsp_listener.cpp rename : sourcemm/episode1/vsp_listener.h => core/episode1/vsp_listener.h rename : sourcemm/metamod.cpp => core/metamod.cpp rename : sourcemm/metamod.h => core/metamod.h rename : sourcemm/metamod_console.cpp => core/metamod_console.cpp rename : sourcemm/metamod_console.h => core/metamod_console.h rename : sourcemm/metamod_oslink.cpp => core/metamod_oslink.cpp rename : sourcemm/metamod_oslink.h => core/metamod_oslink.h rename : sourcemm/metamod_plugins.cpp => core/metamod_plugins.cpp rename : sourcemm/metamod_plugins.h => core/metamod_plugins.h rename : sourcemm/metamod_provider.h => core/metamod_provider.h rename : sourcemm/metamod_util.cpp => core/metamod_util.cpp rename : sourcemm/metamod_util.h => core/metamod_util.h rename : sourcemm/episode2/console.cpp => core/provider/console.cpp rename : sourcemm/episode2/console.h => core/provider/console.h rename : sourcemm/episode2/msvc8/sourcemm.sln => core/provider/msvc8/sourcemm.sln rename : sourcemm/episode2/msvc8/sourcemm.vcproj => core/provider/msvc8/sourcemm.vcproj rename : sourcemm/episode2/msvc9/sourcemm.sln => core/provider/msvc9/sourcemm.sln rename : sourcemm/episode2/msvc9/sourcemm.vcproj => core/provider/msvc9/sourcemm.vcproj rename : sourcemm/episode2/provider_ep2.cpp => core/provider/provider_ep2.cpp rename : sourcemm/episode2/provider_ep2.h => core/provider/provider_ep2.h rename : sourcemm/episode2/vsp_listener.cpp => core/provider/vsp_listener.cpp rename : sourcemm/episode2/vsp_listener.h => core/provider/vsp_listener.h rename : sourcehook/FastDelegate.h => core/sourcehook/FastDelegate.h rename : sourcehook/generate/FastDelegate.h => core/sourcehook/generate/FastDelegate.h rename : sourcehook/generate/FastDelegate.hxx => core/sourcehook/generate/FastDelegate.hxx rename : sourcehook/generate/generate => core/sourcehook/generate/generate rename : sourcehook/generate/generate.bat => core/sourcehook/generate/generate.bat rename : sourcehook/generate/sh_memfuncinfo.h => core/sourcehook/generate/sh_memfuncinfo.h rename : sourcehook/generate/sh_memfuncinfo.hxx => core/sourcehook/generate/sh_memfuncinfo.hxx rename : sourcehook/generate/shworker.bin => core/sourcehook/generate/shworker.bin rename : sourcehook/generate/shworker.exe => core/sourcehook/generate/shworker.exe rename : sourcehook/generate/shworker/Makefile => core/sourcehook/generate/shworker/Makefile rename : sourcehook/generate/shworker/fd_hopter.cpp => core/sourcehook/generate/shworker/fd_hopter.cpp rename : sourcehook/generate/shworker/msvc7/shworker.vcproj => core/sourcehook/generate/shworker/msvc7/shworker.vcproj rename : sourcehook/generate/shworker/msvc8/shworker.vcproj => core/sourcehook/generate/shworker/msvc8/shworker.vcproj rename : sourcehook/generate/shworker/shworker.cpp => core/sourcehook/generate/shworker/shworker.cpp rename : sourcehook/generate/sourcehook.h => core/sourcehook/generate/sourcehook.h rename : sourcehook/generate/sourcehook.hxx => core/sourcehook/generate/sourcehook.hxx rename : sourcehook/sh_list.h => core/sourcehook/sh_list.h rename : sourcehook/sh_memfuncinfo.h => core/sourcehook/sh_memfuncinfo.h rename : sourcehook/sh_memory.h => core/sourcehook/sh_memory.h rename : sourcehook/sh_pagealloc.h => core/sourcehook/sh_pagealloc.h rename : sourcehook/sh_stack.h => core/sourcehook/sh_stack.h rename : sourcehook/sh_string.h => core/sourcehook/sh_string.h rename : sourcehook/sh_tinyhash.h => core/sourcehook/sh_tinyhash.h rename : sourcehook/sh_vector.h => core/sourcehook/sh_vector.h rename : sourcehook/sourcehook.cpp => core/sourcehook/sourcehook.cpp rename : sourcehook/sourcehook.h => core/sourcehook/sourcehook.h rename : sourcehook/sourcehook_hookmangen.cpp => core/sourcehook/sourcehook_hookmangen.cpp rename : sourcehook/sourcehook_hookmangen.h => core/sourcehook/sourcehook_hookmangen.h rename : sourcehook/sourcehook_hookmangen_x86.h => core/sourcehook/sourcehook_hookmangen_x86.h rename : sourcehook/sourcehook_impl.h => core/sourcehook/sourcehook_impl.h rename : sourcehook/sourcehook_impl_chook.h => core/sourcehook/sourcehook_impl_chook.h rename : sourcehook/sourcehook_impl_chookidman.h => core/sourcehook/sourcehook_impl_chookidman.h rename : sourcehook/sourcehook_impl_chookmaninfo.h => core/sourcehook/sourcehook_impl_chookmaninfo.h rename : sourcehook/sourcehook_impl_ciface.h => core/sourcehook/sourcehook_impl_ciface.h rename : sourcehook/sourcehook_impl_cproto.h => core/sourcehook/sourcehook_impl_cproto.h rename : sourcehook/sourcehook_impl_cvfnptr.h => core/sourcehook/sourcehook_impl_cvfnptr.h rename : sourcehook/sourcehook_pibuilder.h => core/sourcehook/sourcehook_pibuilder.h rename : sourcehook/test/Makefile => core/sourcehook/test/Makefile rename : sourcehook/test/generate.bat => core/sourcehook/test/generate.bat rename : sourcehook/test/main.cpp => core/sourcehook/test/main.cpp rename : sourcehook/test/msvc7/test.vcproj => core/sourcehook/test/msvc7/test.vcproj rename : sourcehook/test/msvc8/test.vcproj => core/sourcehook/test/msvc8/test.vcproj rename : sourcehook/test/sourcehook_test.h => core/sourcehook/test/sourcehook_test.h rename : sourcehook/test/test1.cpp => core/sourcehook/test/test1.cpp rename : sourcehook/test/test2.cpp => core/sourcehook/test/test2.cpp rename : sourcehook/test/test3.cpp => core/sourcehook/test/test3.cpp rename : sourcehook/test/test4.cpp => core/sourcehook/test/test4.cpp rename : sourcehook/test/testbail.cpp => core/sourcehook/test/testbail.cpp rename : sourcehook/test/testbail.h => core/sourcehook/test/testbail.h rename : sourcehook/test/testbail2.cpp => core/sourcehook/test/testbail2.cpp rename : sourcehook/test/testevents.h => core/sourcehook/test/testevents.h rename : sourcehook/test/testhookmangen.cpp => core/sourcehook/test/testhookmangen.cpp rename : sourcehook/test/testhookmangen.h => core/sourcehook/test/testhookmangen.h rename : sourcehook/test/testhookmangen.hxx => core/sourcehook/test/testhookmangen.hxx rename : sourcehook/test/testlist.cpp => core/sourcehook/test/testlist.cpp rename : sourcehook/test/testmanual.cpp => core/sourcehook/test/testmanual.cpp rename : sourcehook/test/testmulti.cpp => core/sourcehook/test/testmulti.cpp rename : sourcehook/test/testrecall.cpp => core/sourcehook/test/testrecall.cpp rename : sourcehook/test/testreentr.cpp => core/sourcehook/test/testreentr.cpp rename : sourcehook/test/testref.cpp => core/sourcehook/test/testref.cpp rename : sourcehook/test/testrefret.cpp => core/sourcehook/test/testrefret.cpp rename : sourcehook/test/testvphooks.cpp => core/sourcehook/test/testvphooks.cpp rename : sourcemm/svn_version.h => core/svn_version.h rename : sourcemm/svn_version.tpl => core/svn_version.tpl rename : sourcemm/version.rc => core/version.rc
402 lines
5.2 KiB
C++
Executable File
402 lines
5.2 KiB
C++
Executable File
/* ======== SourceMM ========
|
|
* Copyright (C) 2004-2008 Metamod:Source Development Team
|
|
* No warranties of any kind
|
|
*
|
|
* License: zlib/libpng
|
|
*
|
|
* Author(s): David "BAILOPAN" Anderson
|
|
* ============================
|
|
*/
|
|
|
|
/* AMX Mod X
|
|
*
|
|
* by the AMX Mod X Development Team
|
|
*/
|
|
|
|
#ifndef _INCLUDE_CSTRING_H
|
|
#define _INCLUDE_CSTRING_H
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
namespace SourceHook
|
|
{
|
|
class String
|
|
{
|
|
public:
|
|
String()
|
|
{
|
|
v = NULL;
|
|
a_size = 0;
|
|
//assign("");
|
|
}
|
|
|
|
~String()
|
|
{
|
|
if (v)
|
|
delete [] v;
|
|
}
|
|
|
|
String(const char *src)
|
|
{
|
|
v = NULL;
|
|
a_size = 0;
|
|
assign(src);
|
|
}
|
|
|
|
String(const String &src)
|
|
{
|
|
v = NULL;
|
|
a_size = 0;
|
|
assign(src.c_str());
|
|
}
|
|
|
|
bool operator ==(const String &other)
|
|
{
|
|
return (compare(other.c_str()) == 0);
|
|
}
|
|
|
|
bool operator ==(const char *other)
|
|
{
|
|
return (compare(other) == 0);
|
|
}
|
|
|
|
const char *c_str() { return v?v:""; }
|
|
|
|
const char *c_str() const { return v?v:""; }
|
|
|
|
void append(const char *t)
|
|
{
|
|
Grow(size() + strlen(t) + 1);
|
|
strcat(v, t);
|
|
}
|
|
|
|
void append(const char c)
|
|
{
|
|
size_t len = size();
|
|
Grow(len + 2);
|
|
v[len] = c;
|
|
v[len + 1] = '\0';
|
|
}
|
|
|
|
void append(String &d)
|
|
{
|
|
append(d.c_str());
|
|
}
|
|
|
|
void assign(const String &src)
|
|
{
|
|
assign(src.c_str());
|
|
}
|
|
|
|
void assign(const char *d)
|
|
{
|
|
if (!d)
|
|
{
|
|
clear();
|
|
} else {
|
|
Grow(strlen(d) + 1, false);
|
|
strcpy(v, d);
|
|
}
|
|
}
|
|
|
|
void clear()
|
|
{
|
|
if (v)
|
|
v[0] = '\0';
|
|
}
|
|
|
|
int compare (const char *d) const
|
|
{
|
|
if (!v)
|
|
return strcmp("", d);
|
|
else
|
|
return strcmp(v, d);
|
|
}
|
|
|
|
//Added this for amxx inclusion
|
|
bool empty() const
|
|
{
|
|
if (!v)
|
|
return true;
|
|
|
|
if (v[0] == '\0')
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
size_t size() const
|
|
{
|
|
if (v)
|
|
return strlen(v);
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
int find(const char c, int index = 0) const
|
|
{
|
|
int len = static_cast<int>(size());
|
|
if (len < 1)
|
|
return npos;
|
|
if (index >= len || index < 0)
|
|
return npos;
|
|
int i = 0;
|
|
for (i=index; i<len; i++)
|
|
{
|
|
if (v[i] == c)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return npos;
|
|
}
|
|
|
|
int find_last_of(const char c, int index = npos) const
|
|
{
|
|
int len = static_cast<int>(size());
|
|
if (len < 1)
|
|
return npos;
|
|
if (index >= len || index < npos)
|
|
return npos;
|
|
int i;
|
|
if (index == npos)
|
|
i = len - 1;
|
|
else
|
|
i = index;
|
|
|
|
for (; i>=0; i--)
|
|
{
|
|
if (v[i] == c)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return npos;
|
|
}
|
|
|
|
bool is_space(int c) const
|
|
{
|
|
if (c == '\f' || c == '\n' ||
|
|
c == '\t' || c == '\r' ||
|
|
c == '\v' || c == ' ')
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void trim()
|
|
{
|
|
if (!v)
|
|
return;
|
|
|
|
unsigned int i = 0;
|
|
unsigned int j = 0;
|
|
size_t len = strlen(v);
|
|
|
|
if (len == 1)
|
|
{
|
|
if (is_space(v[i]))
|
|
{
|
|
clear();
|
|
return;
|
|
}
|
|
}
|
|
|
|
unsigned char c0 = v[0];
|
|
|
|
if (is_space(c0))
|
|
{
|
|
for (i=0; i<len; i++)
|
|
{
|
|
if (!is_space(v[i]) || (is_space(v[i]) && ((unsigned char)i==len-1)))
|
|
{
|
|
erase(0, i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
len = strlen(v);
|
|
|
|
if (len < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (is_space(v[len-1]))
|
|
{
|
|
for (i=len-1; i>=0; i--)
|
|
{
|
|
if (!is_space(v[i])
|
|
|| (is_space(v[i]) && i==0))
|
|
{
|
|
erase(i+1, j);
|
|
break;
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
|
|
if (len == 1)
|
|
{
|
|
if (is_space(v[0]))
|
|
{
|
|
clear();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void erase(unsigned int start, int num = npos)
|
|
{
|
|
if (!v)
|
|
return;
|
|
unsigned int i = 0;
|
|
size_t len = size();
|
|
//check for bounds
|
|
if (num == npos || start+num > len-start)
|
|
num = len - start;
|
|
//do the erasing
|
|
bool copyflag = false;
|
|
for (i=0; i<len; i++)
|
|
{
|
|
if (i>=start && i<start+num)
|
|
{
|
|
if (i+num < len)
|
|
{
|
|
v[i] = v[i+num];
|
|
} else {
|
|
v[i] = 0;
|
|
}
|
|
copyflag = true;
|
|
} else if (copyflag) {
|
|
if (i+num < len)
|
|
{
|
|
v[i] = v[i+num];
|
|
} else {
|
|
v[i] = 0;
|
|
}
|
|
}
|
|
}
|
|
len -= num;
|
|
v[len] = 0;
|
|
}
|
|
|
|
String substr(unsigned int index, int num = npos) const
|
|
{
|
|
if (!v)
|
|
{
|
|
String b("");
|
|
return b;
|
|
}
|
|
|
|
String ns;
|
|
|
|
size_t len = size();
|
|
|
|
if (index >= len || !v)
|
|
return ns;
|
|
|
|
if (num == npos)
|
|
{
|
|
num = len - index;
|
|
} else if (index+num >= len) {
|
|
num = len - index;
|
|
}
|
|
|
|
unsigned int i = 0;
|
|
unsigned int nslen = num + 2;
|
|
|
|
ns.Grow(nslen);
|
|
|
|
for (i=index; i<index+num; i++)
|
|
ns.append(v[i]);
|
|
|
|
return ns;
|
|
}
|
|
|
|
void toLower()
|
|
{
|
|
if (!v)
|
|
return;
|
|
unsigned int i = 0;
|
|
size_t len = strlen(v);
|
|
for (i=0; i<len; i++)
|
|
{
|
|
if (v[i] >= 65 && v[i] <= 90)
|
|
v[i] &= ~(1<<5);
|
|
}
|
|
}
|
|
|
|
String & operator = (const String &src)
|
|
{
|
|
assign(src);
|
|
return *this;
|
|
}
|
|
|
|
String & operator = (const char *src)
|
|
{
|
|
assign(src);
|
|
return *this;
|
|
|
|
}
|
|
|
|
char operator [] (unsigned int index) const
|
|
{
|
|
if (index > size() || !v)
|
|
{
|
|
return -1;
|
|
} else {
|
|
return v[index];
|
|
}
|
|
}
|
|
|
|
int at(int a) const
|
|
{
|
|
if (a < 0 || a >= (int)size() || !v)
|
|
return -1;
|
|
|
|
return v[a];
|
|
}
|
|
|
|
bool at(int at, char c)
|
|
{
|
|
if (at < 0 || at >= (int)size() || !v)
|
|
return false;
|
|
|
|
v[at] = c;
|
|
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
void Grow(unsigned int d, bool copy=true)
|
|
{
|
|
if (d <= a_size)
|
|
return;
|
|
char *n = new char[d + 1];
|
|
if (copy && v)
|
|
strcpy(n, v);
|
|
if (v)
|
|
delete [] v;
|
|
else
|
|
strcpy(n, "");
|
|
v = n;
|
|
a_size = d + 1;
|
|
}
|
|
|
|
char *v;
|
|
unsigned int a_size;
|
|
public:
|
|
static const int npos = -1;
|
|
};
|
|
|
|
}; //NAMESPACE
|
|
|
|
#endif //_INCLUDE_CSTRING_H
|