00001
00002
00003
00004
00005
00006
00007
00008
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__