/*========================================================================= GSTRING.CPP Author: Gary Liddon @ Farehame Created: 4th April 1997 Purpose: Generic string class Copyright (c) 1997 Gary Liddon ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ /* Std Lib ------- */ #include "string.h" /* Glib ---- */ /* Local ----- */ #include "gstring.hpp" /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Positional Vars --------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ using namespace std; /*---------------------------------------------------------------------- Vars ---- */ /*---------------------------------------------------------------------- Function: GString::GString() Notes: Blank constructor ---------------------------------------------------------------------- */ GString::GString() { Init(); } /*---------------------------------------------------------------------- Function: GString::~GString() Notes: Destructor ---------------------------------------------------------------------- */ GString::~GString() { Dump(); } /*---------------------------------------------------------------------- Function: GString::GString(GString const & Gs) Notes: Copy constructor ---------------------------------------------------------------------- */ GString::GString(GString const & Gs) { Init(); (*this)=Gs; } /*---------------------------------------------------------------------- Function: GString & GString::operator+(GString const & Gs) Notes: Add one string to another ---------------------------------------------------------------------- */ GString GString::operator+(GString const & Gs) { GString RetStr; if (Gs.Len()) { if (Len()) { char * NewStr; if (!(NewStr=new char[Gs.Len()+Len()+1])) Error(ERM_OUTOFMEM); strcpy(NewStr,*this); strcat(NewStr,Gs); RetStr=NewStr; delete NewStr; } else RetStr=Gs; } else RetStr=*this; return(RetStr); } /*---------------------------------------------------------------------- Function: Notes: ---------------------------------------------------------------------- */ GString & GString::operator+=(GString const & Str) { *this=operator+(Str); return(*this); } /*---------------------------------------------------------------------- Function: int GString::Len(void) Notes: Get the length ---------------------------------------------------------------------- */ int GString::Len(void) const { if (Text) return(strlen(Text)); else return(0); } /*---------------------------------------------------------------------- ---------------------------------------------------------------------- */ bool GString::operator<(GString const & Str) const { char defaultString[]=""; char const * stringOne; char const * stringTwo; if (Empty()) stringOne=defaultString; else stringOne=*this; if (Str,Empty()) stringTwo=defaultString; else stringTwo=Str; return(strcmp(stringOne,stringTwo) < 0 ); } /*---------------------------------------------------------------------- Function: void GString::AssignStr(char const *NewStr) Notes: Set this objs string ---------------------------------------------------------------------- */ void GString::AssignStr(char const *NewStr) { /* Chuck string we're copying from into a temp str in case the text being copied from is ours */ char * ReplaceStr=NULL; if (NewStr) { if (!(ReplaceStr=new char[strlen(NewStr)+1])) Error(ERM_OUTOFMEM); strcpy(ReplaceStr,NewStr); } Dump(); Text=ReplaceStr; } /*---------------------------------------------------------------------- Function: void GString::Init(void) Notes: Init this str ---------------------------------------------------------------------- */ void GString::Init(void) { Text=NULL; } /*---------------------------------------------------------------------- Function: void GString::Init(void) Notes: Init this str ---------------------------------------------------------------------- */ void GString::Filter(char const * CharsToFilterOut,char ReplacementChar) { if (Text) { for (unsigned int f=0;f= strlen(SearchString)) { GString NewString; int RepLen; bool LastMatch; RepLen=strlen(ReplaceString); for (unsigned int Checks=0;Checks <= strlen(Text)-strlen(SearchString);Checks++) { bool Failed; Failed=false; for (unsigned int f=0;f 0) NewString+=GString(&Text[Checks]); *this=NewString; } } /*---------------------------------------------------------------------- Function: void GString::Dump(void) Notes: Dump all the data ---------------------------------------------------------------------- */ void GString::Dump(void) { if (Text) delete Text; Init(); } /*---------------------------------------------------------------------- Function: void GString::Dump(void) Notes: Dump all the data ---------------------------------------------------------------------- */ void GString::Lower(void) { if (!Empty()) strlwr(Text); } /*---------------------------------------------------------------------- Function: void GString::Dump(void) Notes: Dump all the data ---------------------------------------------------------------------- */ void GString::Upper(void) { if (!Empty()) strupr(Text); } /*---------------------------------------------------------------------- Function: void GString::Dump(void) Notes: Dump all the data ---------------------------------------------------------------------- */ bool GString::operator==(GString const & Gs) const { if (Empty() && Gs.Empty()) return(true); if (Empty() || Gs.Empty()) return(false); return(strcmp(Gs,Text)==0); } /*---------------------------------------------------------------------- Function: void GString::Dump(void) Notes: Dump all the data ---------------------------------------------------------------------- */ ostream & operator<<(ostream & Out,GString const & G) { if (!G.Empty()) Out<