// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // // $Id: G4String.icc,v 1.11 2008/12/08 14:16:05 gcosmo Exp $ // GEANT4 tag $Name: geant4-09-02-ref-02 $ // // //--------------------------------------------------------------- // GEANT 4 class implementation file // // G4String //--------------------------------------------------------------- // ************************************************************** // G4SubString // ************************************************************** G4SubString::G4SubString(const G4SubString&s) : mystring(s.mystring), mystart(s.mystart), extent(s.extent) { } G4SubString::G4SubString(G4String& str, str_size s, str_size e) : mystring(&str),mystart(s),extent(e) { } G4SubString& G4SubString::operator=(const G4String&s) { G4String str(s); return operator=(str); } G4SubString& G4SubString::operator=(const G4SubString&s) { mystring->replace(mystart,extent,s.mystring->data(),s.length()); extent=s.length(); return *this; } G4SubString& G4SubString::operator=(const char*s) { mystring->replace(mystart,extent,s,strlen(s)); extent=strlen(s); return *this; } char& G4SubString::operator()(str_size i) { return mystring->operator[](mystart+i); } char G4SubString::operator()(str_size i) const { return mystring->operator[](mystart+i); } char& G4SubString::operator[](str_size i) { return mystring->operator[](mystart+i); } char G4SubString::operator[](str_size i) const { return mystring->operator[](mystart+i); } G4int G4SubString::operator!() const { return extent==0 ? 1 : 0; } G4bool G4SubString::operator==(G4String s) const { return mystring->substr(mystart,extent) == s ? true:false; } G4bool G4SubString::operator==(const char* s) const { return mystring->substr(mystart,extent) == std::string(s) ? true:false; } G4bool G4SubString::operator!=(G4String s) const { return mystring->substr(mystart,extent) != std::string(s) ? true:false; } G4bool G4SubString::operator!=(const char* s) const { return mystring->substr(mystart,extent) != std::string(s) ? true:false; } str_size G4SubString::length() const { return extent; } str_size G4SubString::start() const { return mystart; } G4bool G4SubString::isNull() const { return extent==0 ? true : false; } // ************************************************************** // G4String // ************************************************************** G4String::G4String () {} G4String::G4String ( const char * astring ) : std_string ( astring ) {} G4String::G4String ( const char * astring, str_size len ) : std_string ( astring, len ) {} G4String::G4String ( char c ) { char str[2]; str[0]=c; str[1]='\0'; std_string::operator=(str); } G4String::G4String ( const G4String& s ) : std_string(s) {} G4String::G4String ( const G4SubString& s ) : std_string(*(s.mystring),s.mystart,s.extent) {} G4String::G4String ( const std::string &s ) : std_string(s) {} G4String& G4String::operator=(const G4String& s) { if (&s == this) { return *this; } std_string::operator=(s); return *this; } G4String& G4String::operator=(const std::string &s) { std_string::operator=(s); return *this; } G4String& G4String::operator=(const char* s) { std_string::operator=(s); return *this; } // "cmp" optional parameter is NOT implemented ! // N.B.: The hash value returned is generally DIFFERENT from the // one returned by the original RW function. // Users should not rely on the specific return value. // char G4String::operator () (str_size i) const { return operator[](i); } char& G4String::operator () (str_size i) { return std_string::operator[](i); } G4String& G4String::operator+=(const G4SubString&s) { G4String tmp(s); std_string::operator+=(tmp); return *this; } G4String& G4String::operator+=(const char*s) { std_string::operator+=(s); return *this; } G4String& G4String::operator+=(const std::string &s) { std_string::operator+=(s); return *this; } G4String& G4String::operator+=(const char &c) { std_string::operator+=(c); return *this; } G4bool G4String::operator==(const G4String &s) const { const std_string *a=this; const std_string *b=&s; return *a==*b; } G4bool G4String::operator==(const char* s) const { const std_string *a=this; const std_string b=s; return *a==b; } G4bool G4String::operator!=(const G4String &s) const { const std_string *a=this; const std_string *b=&s; return *a!=*b; } G4bool G4String::operator!=(const char* s) const { const std_string *a=this; const std_string b=s; return *a!=b; } G4String::operator const char*() const { return c_str(); } G4int G4String::strcasecompare(const char* s1, const char* s2) const { char* buf1 = new char[strlen(s1)+1]; char* buf2 = new char[strlen(s2)+1]; for (str_size i=0; i<=strlen(s1); i++) { buf1[i] = tolower(char(s1[i])); } for (str_size j=0; j<=strlen(s2); j++) { buf2[j] = tolower(char(s2[j])); } G4int res = strcmp(buf1, buf2); delete [] buf1; delete [] buf2; return res; } G4int G4String::compareTo(const char* s, caseCompare mode) { if(mode==exact) { return strcmp(c_str(),s); } else { return strcasecompare(c_str(),s); } } G4int G4String::compareTo(const G4String& s, caseCompare mode) { if(mode==exact) { return strcmp(c_str(),s.c_str()); } else { return strcasecompare(c_str(),s.c_str()); } } G4String& G4String::prepend (const char* str) { insert(0,str); return *this; } G4String& G4String::append(const G4String& s) { std_string::operator+=(s); return *this; } std::istream& G4String::readLine (std::istream& s, G4bool skipWhite) { char tmp[1024]; if ( skipWhite ) { s >> std::ws; s.getline(tmp,1024); *this=tmp; } else { s.getline(tmp,1024); *this=tmp; } return s; } G4String& G4String::replace (unsigned int start, unsigned int nbytes, const char* buff, unsigned int n2 ) { std_string::replace ( start, nbytes, buff, n2 ); return *this; } G4String& G4String::replace(str_size pos, str_size n, const char* s) { std_string::replace(pos,n,s); return *this; } G4String& G4String::remove(str_size n) { if(n=0;j--) { if (std_string::operator[](j) != c) { break; } } retVal = substr(0,j+1); } break; case both: { for(i=0;i=0;k--) { if (tmp.std_string::operator[](k) != c) { break; } } retVal = tmp.substr(0,k+1); } break; default: break; } return retVal; } void G4String::toLower () { for (str_size i=0; i