/**
** File ......... cstring.cpp
** Published .... 2004-05-16
** Author ....... grymse@alhem.net
**/
/*
Copyright (C) 2004 Anders Hedstrom
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#undef cstring
#include "color.h"
#include "cstring.h"
// vs won't compile when I write out 'std::string' everywhere - blah
using std::string;
cstring::cstring()
:string()
,m_cstr(NULL)
,m_ucstr(NULL)
{
}
cstring::cstring(const std::string& p)
:string(p)
,m_cstr(NULL)
,m_ucstr(NULL)
{
}
cstring::~cstring()
{
if (m_cstr)
delete m_cstr;
if (m_ucstr)
delete m_ucstr;
}
const char *cstring::c_str()
{
size_t n = size();
std::string tmp;
for (size_t i = 0; i < n; i++)
{
if ((*this)[i] == '&')
{
i++;
switch ((*this)[i])
{
case 'n':
tmp += CNRM;
break;
case 'r':
tmp += CRED;
break;
case 'g':
tmp += CGRN;
break;
case 'y':
tmp += CYEL;
break;
case 'b':
tmp += CBLU;
break;
case 'm':
tmp += CMAG;
break;
case 'c':
tmp += CCYN;
break;
case 'w':
tmp += CWHT;
break;
case 'l':
tmp += CBLK;
break;
case 'R':
tmp += BRED;
break;
case 'G':
tmp += BGRN;
break;
case 'Y':
tmp += BYEL;
break;
case 'B':
tmp += BBLU;
break;
case 'M':
tmp += BMAG;
break;
case 'C':
tmp += BCYN;
break;
case 'W':
tmp += BWHT;
break;
case 'L':
tmp += BBLK;
break;
case 'e':
tmp += BKRED;
break;
case 'k':
tmp += BKGRN;
break;
case 'p':
tmp += BKYEL;
break;
case 'u':
tmp += BKBLU;
break;
case 'a':
tmp += BKMAG;
break;
case 'f':
tmp += BKCYN;
break;
case 'h':
tmp += BKWHT;
break;
case 'i':
tmp += BKBLK;
break;
case 'U':
tmp += UNDER;
break;
case 'F':
tmp += FLASH;
break;
case '&':
tmp += (*this)[i];
break;
default:
i--;
tmp += (*this)[i];
break;
} // switch ((*this)[i])
}
else
if ((*this)[i] == '\n')
{
tmp += '\r';
tmp += (*this)[i];
}
else
{
tmp += (*this)[i];
}
}
if (m_cstr)
delete m_cstr;
m_cstr = new char[tmp.size() + 1];
memcpy(m_cstr,tmp.c_str(),tmp.size());
m_cstr[tmp.size()] = 0;
return m_cstr;
}
const char *cstring::uc_str()
{
size_t n = size();
std::string tmp;
for (size_t i = 0; i < n; i++)
{
if ((*this)[i] == '&')
{
i++;
switch ((*this)[i])
{
case 'n':
break;
case 'r':
break;
case 'g':
break;
case 'y':
break;
case 'b':
break;
case 'm':
break;
case 'c':
break;
case 'w':
break;
case 'l':
break;
case 'R':
break;
case 'G':
break;
case 'Y':
break;
case 'B':
break;
case 'M':
break;
case 'C':
break;
case 'W':
break;
case 'L':
break;
case 'e':
break;
case 'k':
break;
case 'p':
break;
case 'u':
break;
case 'a':
break;
case 'f':
break;
case 'h':
break;
case 'i':
break;
case 'U':
break;
case 'F':
break;
case '&':
tmp += (*this)[i];
break;
default:
i--;
tmp += (*this)[i];
break;
} // switch ((*this)[i])
}
else
{
tmp += (*this)[i];
}
}
if (m_ucstr)
delete m_ucstr;
m_ucstr = new char[tmp.size() + 1];
memcpy(m_ucstr,tmp.c_str(),tmp.size());
m_ucstr[tmp.size()] = 0;
return m_ucstr;
}
bool cstring::operator==(const std::string& str)
{
return !strcmp(uc_str(),str.c_str());
}
bool cstring::operator==(cstring& str)
{
return !strcmp(uc_str(),str.uc_str());
}
bool cstring::operator==(const char *p)
{
return !strcmp(uc_str(),p);
}
//const cstring&
void cstring::operator=(const char *p)
{
// return
string::operator=(p);
}
void cstring::operator+=(const char *p)
{
string::operator+=(p);
}
void cstring::operator+=(const std::string& p)
{
string::operator+=(p);
}