Back to index

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; 
} 

Back to index