D:/Zythum/DinoKod/Common/Str.h

00001 //---------------------------------------------------------------------------------------------
00002 //      This file is a part of "DinoKod".
00003 //      Copyright © 2003 Dino Productions. All Rights Reserved.
00004 //      
00005 //      File                    : Str.cpp
00006 //      Author                  : Sebastien LEIX        sebastien.leix@wanadoo.fr
00007 //      Date                    : 25/05/2002
00008 //      Modification    :
00009 //
00010 //---------------------------------------------------------------------------------------------
00011 #ifndef __STR_H__
00012 #define __STR_H__
00013 
00014 #include "Common/CommonDll.h"
00015 #include <stdio.h>
00016 #include <string.h>
00017 #include <stdlib.h>
00018 #include <stdarg.h>
00019 #include "Common/Types.h"
00020 #include "Common/Assert.h"
00021 
00022 //---------------------------------------------------------------------------------------------------------------------
00023 class COMMON_API KStr
00024 {
00025 private:
00026         char*           m_pString;
00027         u32                     m_Length;
00028 
00029 public:
00030         KStr()
00031         {
00032                 m_pString       = strdup( "" );
00033                 m_Length        = (u32)strlen( m_pString );
00034         }
00035 
00036         KStr( KStr& sString )
00037         {
00038                 m_pString       = strdup( sString.GetpString() );
00039                 m_Length        = (u32)strlen( m_pString );
00040         }
00041 
00042         KStr( char* pString )
00043         {
00044                 KASSERT( pString );
00045                 m_pString       = strdup( pString );
00046                 m_Length        = (u32)strlen( m_pString );
00047         }
00048 
00049         KStr( const char* pString )
00050         {
00051                 KASSERT( pString );
00052                 m_pString       = strdup( pString );
00053                 m_Length        = (u32)strlen( m_pString );
00054         }
00055 
00056         KStr( s32 Value )
00057         {
00058                 char    pBuffer[20];
00059                 sprintf( pBuffer, "%i", (int)Value );
00060                 m_pString       = strdup( pBuffer );
00061                 m_Length        = (u32)strlen( m_pString );
00062         }
00063 
00064         KStr( float Value )
00065         {
00066                 char    pBuffer[20];
00067                 sprintf( pBuffer, "%f", Value );
00068                 m_pString       = strdup( pBuffer );
00069                 m_Length        = (u32)strlen( m_pString );
00070         }
00071 
00072         KStr( char* pString, const char* pFormat, ... );
00073 
00074         ~KStr()
00075         {
00076                 Free();
00077         }
00078 
00079 
00080 
00081         char*           GetpString()            { return m_pString;     }
00082         u32                     GetLength()                     { return m_Length;      }
00083 
00084         void            SetpString( char* pString )
00085         {
00086                 Free();
00087                 m_pString       = strdup( pString ? pString : "" );
00088                 m_Length        = (u32)strlen( m_pString );
00089         }
00090 
00091         void            Free()
00092         {
00093                 if( m_pString )
00094                 {
00095                         SafeFreep( m_pString );
00096                         m_Length = 0;
00097                 }
00098         }
00099 
00100         //
00101         //      =
00102         //
00103         KStr&   operator =( KStr& Str )
00104         {
00105                 SetpString( Str.GetpString() );
00106                 return *this;
00107         }
00108 
00109         KStr&   operator =( char* pString )
00110         {
00111                 SetpString( pString );
00112                 return *this;
00113         }
00114 
00115         KStr&   operator =( const char* pString )
00116         {
00117                 SetpString( (char*)pString );
00118                 return *this;
00119         }
00120 
00121         KStr&   operator =( s32 Value )
00122         {
00123                 char    pBuffer[20];
00124                 sprintf( pBuffer, "%i", (int)Value );
00125                 m_pString       = strdup( pBuffer );
00126                 m_Length        = (u32)strlen( m_pString );
00127                 return *this;
00128         }
00129 
00130         KStr&   operator =( float Value )
00131         {
00132                 char    pBuffer[20];
00133                 sprintf( pBuffer, "%f", Value );
00134                 m_pString       = strdup( pBuffer );
00135                 m_Length        = (u32)strlen( m_pString );
00136                 return *this;
00137         }
00138 
00139         //
00140         //      +=
00141         //
00142         KStr&   operator +=( KStr& Str )
00143         {
00144                 char*   pTemp;
00145 
00146                 pTemp = (char*)malloc( GetLength() + Str.GetLength() + 1 );
00147                 strcpy( pTemp, m_pString );
00148                 strcat( pTemp, Str.GetpString() );
00149                 SetpString( pTemp );
00150                 free( pTemp );
00151                 return *this;
00152         }
00153 
00154         KStr&   operator +=( char* pString )
00155         {
00156                 char*   pTemp;
00157 
00158                 pTemp = (char*)malloc( GetLength() + strlen( pString ) + 1 );
00159                 strcpy( pTemp, m_pString );
00160                 strcat( pTemp, pString );
00161                 SetpString( pTemp );
00162                 free( pTemp );
00163                 return *this;
00164         }
00165 
00166         KStr&   operator +=( char Char )
00167         {
00168                 char*   pTemp;
00169 
00170                 pTemp = (char*)malloc( GetLength() + 2 );
00171                 strcpy( pTemp, m_pString );
00172                 pTemp[GetLength() + 1] = '\0';
00173                 pTemp[GetLength()] = Char;
00174                 SetpString( pTemp );
00175                 free( pTemp );
00176                 return *this;
00177         }
00178 
00179         KStr&   operator +=( const char* pString )
00180         {
00181                 char*   pTemp;
00182 
00183                 pTemp = (char*)malloc( GetLength() + strlen( pString ) + 1 );
00184                 strcpy( pTemp, m_pString );
00185                 strcat( pTemp, pString );
00186                 SetpString( pTemp );
00187                 free( pTemp );
00188                 return *this;
00189         }
00190 
00191         KStr    operator +( const char* pString )
00192         {
00193                 KStr    sResult( m_pString );
00194                 sResult += pString;
00195 
00196                 return sResult;
00197         }
00198 
00199         KStr&   operator +=( s32 Value )
00200         {
00201                 char    pBuffer[20];
00202                 char*   pTemp;
00203                 sprintf( pBuffer, "%i", (int)Value );
00204                 pTemp = (char*)malloc( GetLength() + strlen( pBuffer ) +1 );
00205                 strcpy( pTemp, m_pString );
00206                 strcat( pTemp, pBuffer );
00207                 SetpString( pTemp );
00208                 free( pTemp );
00209                 return *this;
00210         }
00211 
00212         KStr&   operator +=( float Value )
00213         {
00214                 char    pBuffer[20];
00215                 char*   pTemp;
00216                 sprintf( pBuffer, "%f", Value );
00217                 pTemp = (char*)malloc( GetLength() + strlen( pBuffer ) +1 );
00218                 strcpy( pTemp, m_pString );
00219                 strcat( pTemp, pBuffer );
00220                 SetpString( pTemp );
00221                 free( pTemp );
00222                 return *this;
00223         }
00224 
00225         char&   operator []( u32 Index )
00226         {
00227                 KASSERT( Index < m_Length );
00228                 return m_pString[Index];
00229         }
00230 
00231         operator const char*()
00232         {
00233                 return m_pString;
00234         }
00235 
00236         operator char*()
00237         {
00238                 return m_pString;
00239         }
00240         //
00241         //      ==
00242         //
00243         bool    operator ==( KStr& Str )
00244         {
00245                 return (stricmp( m_pString, Str.GetpString() ) == 0);
00246         }
00247 
00248         bool    operator !=( KStr& Str )
00249         {
00250                 return (stricmp( m_pString, Str.GetpString() ) != 0);
00251         }
00252 };
00253 
00254 #endif //       __STR_H__

Generated on Sun Mar 25 20:02:11 2007 for Zythum Project by  doxygen 1.5.1-p1