LTP GCOV extension - code coverage report
Current view: directory - src/cpp/prod/tool - String.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 90
Code covered: 86.7 % Executed lines: 78

       1                 : //=============================================================================
       2                 : // File <$/src/cpp/prod/tool/String.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //=============================================================================
      21                 : 
      22                 : // Portability
      23                 : #include "yaorb/config.h"
      24                 : #include "src/cpp/prod/port/port_stdc.h"
      25                 : #include "src/cpp/prod/port/port_unistd.h"
      26                 : 
      27                 : #include <stdio.h>
      28                 : 
      29                 : #include "src/cpp/prod/tool/String.h"
      30                 : #include "src/cpp/prod/tool/Assert.h"
      31                 : 
      32                 : static const char * const emptyCharString = "" ;
      33                 : static const char endOfString = '\0' ;
      34                 : 
      35          141254 : String::String()
      36          141254 : : _len(0), _str(NULL)
      37                 : {
      38          141254 :    _len = 1 ;
      39          141254 :    _str = new char[_len] ;
      40          141254 :    _str[0] = endOfString ;
      41                 : }
      42                 : 
      43             345 : String::String(char c)
      44             345 : : _len(0), _str(NULL)
      45                 : {
      46             345 :    _len = 2 ;
      47             345 :    _str = new char[_len] ;
      48             345 :    _str[0] = c ;
      49             345 :    _str[1] = endOfString ;
      50                 : }
      51                 : 
      52             186 : String::String(const int aSize)
      53             186 : : _len(0), _str(NULL)
      54                 : {
      55                 :    ASSERT(aSize >= 0) ;
      56                 : 
      57             186 :    _len = aSize + 1 ;
      58             186 :    _str = new char[_len] ;
      59             186 :    _str[0] = endOfString ;
      60                 : }
      61                 : 
      62           95621 : String::String(const char* aCharString)
      63           95621 : : _len(0), _str(NULL)
      64                 : {
      65           95621 :    if (aCharString == NULL)
      66                 :    {
      67               0 :       aCharString = emptyCharString ;
      68                 :    }
      69                 : 
      70           95621 :    _len = strlen(aCharString) + 1 ;
      71           95621 :    _str = new char[_len] ;
      72           95621 :    strcpy(_str, aCharString) ;
      73                 : }
      74                 : 
      75           45281 : String::String(const String& aString)
      76           45281 : : _len(0), _str(NULL)
      77                 : {
      78           45281 :    _len = aString._len ;
      79           45281 :    _str = new char[_len] ;
      80                 : 
      81           45281 :    strcpy(_str, aString._str) ;
      82                 : }
      83                 : 
      84          248714 : String::~String()
      85                 : {
      86          248714 :    delete [] _str ;
      87           19353 : }
      88                 : 
      89             467 : int String::length() const
      90                 : {
      91             467 :    return strlen(_str) ;
      92                 : }
      93                 : 
      94           15612 : String & String::operator =(const char* aCharString)
      95                 : {
      96           15612 :    if (aCharString == NULL)
      97                 :    {
      98               0 :       aCharString = emptyCharString ;
      99                 :    }
     100                 : 
     101           15612 :    int newLen = strlen(aCharString) + 1 ;   
     102           15612 :    if (_len < newLen)
     103                 :    {
     104            2538 :       delete [] _str ;
     105                 :       
     106            2538 :       _len = newLen ;
     107            2538 :       _str = new char[_len] ;
     108                 :    }
     109                 :    
     110           15612 :    strcpy(_str, aCharString) ;
     111                 : 
     112                 :    return *this ;
     113                 : }
     114                 : 
     115          146204 : String & String::operator =(const String& aString)
     116                 : {
     117          146204 :    int newLen = strlen(aString._str) + 1 ;
     118          146204 :    if (_len < newLen)
     119                 :    {
     120          124283 :       delete [] _str ;
     121                 :       
     122          124283 :       _len = newLen ;
     123          124283 :       _str = new char[_len] ;
     124                 :    }
     125                 :    
     126          146204 :    strcpy(_str, aString._str) ;
     127                 : 
     128                 :    return *this ;
     129                 : }
     130                 : 
     131           44966 : void String::operator +=(const char* aCharString)
     132                 : {   
     133           44966 :    if (aCharString == NULL)
     134                 :    {
     135               0 :       aCharString = emptyCharString ;
     136                 :    }
     137                 :    
     138           44966 :    int newLen = strlen(_str) + strlen(aCharString) + 1 ;
     139           44966 :    if (_len < newLen)
     140                 :    {
     141           44617 :       char* newStr = new char[newLen] ;
     142           44617 :       strcpy(newStr, _str) ;
     143           44617 :       delete [] _str ;
     144           44617 :       _str = newStr ;
     145           44617 :       _len = newLen ;
     146                 :    }
     147                 : 
     148           44966 :    strcat(_str, aCharString) ;
     149                 : }
     150                 : 
     151           64619 : void String::operator +=(const String& aString)
     152                 : {
     153           64619 :    int newLen = strlen(_str) + strlen(aString._str) + 1 ;
     154                 : 
     155           64619 :    if (_len < newLen)
     156                 :    {
     157           60843 :       char* newStr = new char[newLen] ;
     158           60843 :       strcpy(newStr, _str) ;
     159           60843 :       delete [] _str ;
     160           60843 :       _str = newStr ;
     161           60843 :       _len =newLen ;
     162                 :    }
     163                 : 
     164           64619 :    strcat(_str, aString._str) ;
     165                 : }
     166                 : 
     167          443146 : int String::operator ==(const char* aCharString) const
     168                 : {
     169          443146 :    if (aCharString == NULL)
     170                 :    {
     171               0 :       aCharString = emptyCharString ;
     172                 :    }
     173                 : 
     174          443146 :    return ((strcmp(_str, aCharString)==0) ? true : false) ;
     175                 : }
     176                 : 
     177          702980 : int String::operator ==(const String& aString) const
     178                 : {
     179          702980 :    return ((strcmp(_str, aString._str)==0) ? true : false) ;
     180                 : }
     181                 : 
     182          232516 : String::operator const char* () const
     183                 : {
     184                 :    return _str ;
     185                 : }
     186                 : 
     187               0 : int String::compare(const char* aCharString) const
     188                 : {
     189               0 :    if (aCharString == NULL)
     190                 :    {
     191               0 :       aCharString = emptyCharString ;
     192                 :    }
     193                 : 
     194               0 :    return (strcmp(_str, aCharString)) ;
     195                 : }
     196                 : 
     197               0 : int String::compare(const String& aString) const
     198                 : {
     199               0 :    return (strcmp(_str, aString._str)) ;
     200                 : }
     201                 : 
     202              28 : int String::Hash(const char* str)
     203                 : {
     204              28 :    if (str == NULL)
     205                 :    {
     206                 :       return 0 ;
     207                 :    }
     208                 : 
     209                 :    int hash = 0 ;
     210              28 :    int len = strlen(str) ;
     211                 :    char c = 0 ;
     212                 :    int shift_c = 0 ;
     213                 :    int dec = 0 ;
     214                 :    int index = 0 ;
     215                 : 
     216             482 :    for (index = 0 ;
     217                 :         index < len ;
     218                 :         index ++)
     219                 :    {
     220                 :       c = str[index] ;
     221                 :       shift_c = c << dec ;
     222             454 :       hash ^= shift_c ;
     223             454 :       dec = (dec + 1) % 24 ;
     224                 :    }
     225                 : 
     226                 : // fprintf(stderr, "String::Hash(%s) = %d\n", str, hash) ;
     227                 : 
     228                 :    return hash ;
     229                 : }
     230                 : 
     231               0 : int String::Hash(void) const
     232                 : {
     233               0 :    return String::Hash(_str) ;
     234                 : }
     235                 : 

Generated by: LTP GCOV extension version 1.4