PHString.C
//-----------------------------------------------------------------------------
// $Header: /afs/rhic/phenix/cvsroot/offline/framework/phool/PHString.C,v 1.9 2001/03/05 20:20:00 irina Exp $
//
// The PHOOL's Software
// Copyright (C) PHENIX collaboration, 1999
//
// Implementation of class PHString
//
// Author: Matthias Messer
//-----------------------------------------------------------------------------
#include "PHString.h"
#include <string.h>
#include <stdio.h>
#include "PHPointerList.h"
#include "PHPointerListIterator.h"
void PHString::copy_(const char* s)
{
delete [] string;
string = new char[strlen(s)+1];
strcpy(string, s);
}
PHString::PHString()
{
string = 0;
copy_("");
}
PHString::~PHString()
{
delete [] string;
}
PHString::PHString(const PHString& phs)
{
string = 0;
copy_(phs.string);
}
PHString::PHString(const char* s)
{
string = 0;
copy_(s);
}
PHString::PHString(int number)
{
//
// Just took UINT_MAX from limits.h to define the maximum length.
//
string = 0;
copy_("4294967295");
sprintf(string, "%d", number);
}
void PHString::setString(char * s)
{
delete [] string;
string = s;
}
PHBoolean PHString::find(const PHString& subString) const
{
if (strstr(string, subString.getString()))
return True;
else
return False;
}
PHBoolean PHString::operator== (const PHString& phs) const
{
if (strcmp(string, phs.string) == 0)
return True;
else
return False;
}
PHBoolean PHString::operator!= (const PHString& phs) const
{
if (strcmp(string, phs.string) == 0)
return False;
else
return True;
}
PHString& PHString::operator= (const PHString& phs)
{
copy_(phs.string);
return *this;
}
PHString& PHString::operator+= (const PHString& phs)
{
char *buffer = string;
string = new char[length()+phs.length()+1];
strcpy(string, buffer);
strcat(string, phs.string);
delete [] buffer;
return *this;
}
size_t PHString::split(PHPointerList<PHString>& list, const char * seperator) const
{
char *buffer = new char[length()+1];
char *workString = buffer;
char *searchString = workString;
size_t numberOfSubStrings = 0;
PHBoolean endReached = False;
strcpy(workString, string);
list.clearAndDestroy();
while (strlen(searchString) && !endReached) {
if (strncmp(searchString, seperator, strlen(seperator)) == 0 || *(searchString+1) == '\0') {
if (*(searchString+1) != '\0')
*searchString = '\0';
else
endReached = True;
list.append(new PHString(workString));
numberOfSubStrings++;
workString = searchString + strlen(seperator);
searchString = workString-1;
}
if(endReached != True)
searchString++;
}
delete [] buffer;
return numberOfSubStrings;
}
//
// friend operators and external functions
//
PHString operator+ (const PHString& phs1, const PHString& phs2)
{
PHString newString(phs1);
newString += phs2;
return newString;
}
ostream & operator << (ostream & s, const PHString & q)
{
return s << q.getString();
}
PHString join(const PHPointerList<PHString>& list, const PHString& seperator)
{
PHPointerListIterator<PHString> iter(list);
PHString result = *(iter());
PHString *element;
while (element = iter())
result = result + seperator + *element;
return result;
}