/*
* Seven Kingdoms: Ancient Adversaries
*
* Copyright 1997,1998 Enlight Software Ltd.
*
* 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, see .
*
*/
//Filename : OSTR.CPP
//Description : Object String
#include
#include
#include
//------- Define static variable --------//
static char work_buf[MAX_STR_LEN+1];
//-------- Begin of constructor/destructor functions --------//
String::String()
{
str_buf[0] = NULL;
}
String::String( char *s )
{
strncpy(str_buf, s, MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
}
String::String( String& s )
{
memcpy(str_buf, s.str_buf, MAX_STR_LEN+1 );
}
//---------- End of constructor/destructor functions --------//
//------- Begin of function String::substr --------//
//
// pos = the start position of the sub string you want
// start from 0, 0-aligned
// [int] len = the length of the sub string
// (default : till the end of the string
//
char* String::substr(int pos, int len)
{
work_buf[0] = NULL;
int strLen = strlen(str_buf);
if(pos >= strLen) // check for boundary errors
return work_buf;
if( len <= 0 )
len = strLen - pos;
else
{
if(len > strLen - pos)
return work_buf;
}
strncpy( work_buf, str_buf+pos, len );
work_buf[len] = NULL;
return work_buf;
}
//------- End of function String::substr ------------//
//------- Begin of function String::upper/lower -------//
char* String::upper()
{
memcpy( work_buf, str_buf, len()+1 );
strupr( work_buf );
return work_buf;
}
char* String::lower(void)
{
memcpy( work_buf, str_buf, len()+1 );
strlwr( work_buf );
return work_buf;
}
//--------- End of function String::upper/lower --------//
//-------- Begin of function String::at ---------------//
//
// searchStr = the string you want to search for
//
// return : >= 0 the position of the search str in the string
// = -1 if not found
//
int String::at(char* searchStr)
{
int pos;
char *tmp;
if( (tmp = strstr(str_buf, searchStr)) != NULL)
pos = (int)(tmp-str_buf);
else
pos = -1;
return pos;
}
//---------- End of function String::at ---------------//
//-------- Begin of operator= functions -----------//
String& String::operator=(String& s)
{
memcpy(str_buf, s.str_buf, MAX_STR_LEN+1 );
return *this;
}
String& String::operator=(char *s)
{
strncpy(str_buf, s, MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
return *this;
}
String& String::operator=(long value)
{
strncpy(str_buf, m.format(value), MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
return *this;
}
//---------- End of operator= functions -----------//
//-------- Begin of operator+= functions -----------//
String& String::operator+=(String& s)
{
strncat( str_buf, s.str_buf, MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
return *this;
}
String& String::operator+=(char *s)
{
strncat( str_buf, s, MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
return *this;
}
String& String::operator+=(long value)
{
strncat( str_buf, m.format(value), MAX_STR_LEN );
str_buf[MAX_STR_LEN] = NULL;
return *this;
}
//---------- End of operator+= functions -----------//
//-------- Begin of operator*= functions -----------//
String& String::operator*=(int n)
{
memcpy( work_buf, str_buf, len()+1 );
for(int i=1; i