00001 #ifndef __J2K__JString_ANSI_CPP__
00002 #define __J2K__JString_ANSI_CPP__
00003
00004 #include <j2k/Fred/String/String.hpp>
00005 #include <j2k/Fred/String/Str-fn.hpp>
00006
00007 char* JString::getConcatenate( const char* src )
00008 {
00009 ULONG newLen = pData->length + strlen( src ) + 1;
00010 char* buffer = new char[ newLen ];
00011 strcpy( buffer, pData->data );
00012 strcat( buffer, src );
00013 buffer[ newLen ] = '\0';
00014 return buffer;
00015 }
00016
00017 JString& JString::setConcatenate( const char* src )
00018 {
00019 if ( src == NULL ) return *this;
00020 ULONG newLen = pData->length + strlen(src);
00021 JStringData* sd = new JStringData( pData->data, newLen );
00022 JStringData* bsd = pData;
00023 pData = sd;
00024 strcat( pData->data, src );
00025 pData->data[ newLen ] = '\0';
00026 pData->length = strlen( sd->data );
00027 bsd->Dec();
00028 return ( *this );
00029 }
00030
00031 long JString::firstCharFound( const int c ) {
00032 if ( pData->data == NULL ) return (-1);
00033
00034 char* where = strchr( pData->data, c );
00035 if ( where == NULL ) return (-1);
00036
00037
00038 long w = (long)where;
00039 w -= (long)pData->data;
00040 return w;
00041 }
00042
00043 long JString::lastCharFound( const int c ) {
00044 if ( pData->data == NULL) return (-1);
00045
00046 char* where = strrchr( pData->data, c );
00047 if ( where == NULL ) return (-1);
00048
00049
00050 long w = (long)where;
00051 w -= (long)pData->data;
00052 return w;
00053 }
00054
00055 int JString::compare( const char* src ) {
00056 return strcmp( pData->data, src );
00057 }
00058
00059 int JString::compareIgnoreCase( const char* src ) {
00060
00061 #if defined(__sun) || defined(__SUN__)
00062 return strcasecmp( pData->data, src );
00063 #else
00064 return strcmpi( pData->data, src );
00065 #endif
00066
00067
00068 }
00069
00070 int JString::compareUsingLocaleCollate( const char* src ) {
00071 return strcoll( pData->data, src );
00072 }
00073
00074 char* JString::copy() {
00075 char* dst = new char[ pData->length + 1 ];
00076 return strcpy( dst, pData->data );
00077 }
00078
00079 JString JString::getCopy() {
00080 JStringData* sd = new JStringData( pData->length );
00081 strcpy( sd->data, pData->data );
00082 return JString( sd );
00083 }
00084
00085 ULONG JString::getNbCharNotFromCharSet( const char* charset ) {
00086 return strcspn( pData->data, charset );
00087 }
00088
00089 JString JString::getDate() {
00090 JStringData* sd = new JStringData( 9 );
00091 _strdate( sd->data );
00092 return JString( sd );
00093 }
00094
00095 JString& JString::setDate() {
00096 JStringData* sd = new JStringData( 9 );
00097 _strdate( sd->data );
00098 pData->Dec();
00099 pData = sd;
00100 return ( *this );
00101 }
00102
00103 JString& JString::setTime( ULONG maxSize, const char* format,
00104 const struct tm* currTime )
00105 {
00106 JStringData* sd = new JStringData( maxSize );
00107 strftime( sd->data, maxSize, format, currTime );
00108 pData->Dec();
00109 pData = sd;
00110 return ( *this );
00111 }
00112
00113 char* JString::duplicate() {
00114 return strdup( pData->data );
00115 }
00116
00117 JString JString::duplicateString() {
00118 return JString( strdup( pData->data ) );
00119 }
00120
00121 JString JString::getError( int errnb ) {
00122 char* err = strerror( errnb );
00123 return JString( err );
00124 }
00125
00126 JString& JString::setError( int errnb ) {
00127 char* err = strerror( errnb );
00128
00129 return ( *this );
00130 }
00131
00132 JString JString::getTimeFormat( ULONG maxSize, const char* format, const struct tm* currTime )
00133 {
00134 JStringData* sd = new JStringData( maxSize );
00135 strftime( sd->data, maxSize, format, currTime );
00136 return JString( sd );
00137 }
00138
00139 JString& JString::setTimeFormat( ULONG maxSize, const char* format, const struct tm* currTime )
00140 {
00141 JStringData* sd = new JStringData( maxSize );
00142 strftime( sd->data, maxSize, format, currTime );
00143 pData->Dec();
00144 pData = sd;
00145 return ( *this );
00146 }
00147
00148 JString JString::getTime() {
00149 JStringData* sd = new JStringData( 8 );
00150 _strtime( sd->data );
00151 return JString( sd );
00152 }
00153
00154 JString& JString::setTime() {
00155 JStringData* sd = new JStringData( 8 );
00156 _strtime( sd->data );
00157 pData->Dec();
00158 pData = sd;
00159 return ( *this );
00160 }
00161
00162 char* JString::getConcatenateWithLimits( const char* src, ULONG n ) {
00163 ULONG newLen = pData->length + n + 1;
00164 char* buffer = new char[ newLen ];
00165 strcpy( buffer, pData->data );
00166 strncat( buffer, src, n );
00167 buffer[ newLen ] = '\0';
00168 return buffer;
00169 }
00170
00171 JString& JString::setConcatenateWithLimits( const char* src, ULONG n ) {
00172 if ( src == NULL ) return *this;
00173 ULONG newLen = pData->length + n;
00174 JStringData* sd = new JStringData( pData->data, newLen );
00175 pData->Dec();
00176 pData = sd;
00177 strncat( pData->data, src, n );
00178 pData->data[ newLen ] = '\0';
00179 pData->length = strlen( sd->data );
00180 return ( *this );
00181 }
00182
00183 int JString::compareWithLimits( const char* src, ULONG n ) {
00184 return strncmp( pData->data, src, n );
00185 }
00186
00187 int JString::compareIgnoreCaseWithLimits( const char* src, ULONG n ) {
00188 #if defined(__sun) || defined(__SUN__)
00189 return strncasecmp( pData->data, src, n );
00190 #else
00191 return strnicmp( pData->data, src, n );
00192 #endif
00193 }
00194
00195 char* JString::copyWithLimits( ULONG n ) {
00196 char* dst = new char[ pData->length + 1 ];
00197 return strncpy( dst, pData->data, n );
00198 }
00199
00200 JString JString::getCopyWithLimits( ULONG n ) {
00201 JStringData* sd = new JStringData( pData->length );
00202 strncpy( sd->data, pData->data, n );
00203 return JString( sd );
00204 }
00205
00206 char* JString::getFillWithChar( const int ch ) {
00207 return getFillWithChar( ch, pData->length );
00208 }
00209
00210 JString& JString::setFillWithChar( const int ch ) {
00211 return setFillWithChar( ch, pData->length );
00212 }
00213
00214
00215 char* JString::getFillWithChar( const int ch, ULONG n ) {
00216 ULONG newLen = pData->length + 1;
00217 char* buffer = new char[ newLen ];
00218 strcpy( buffer, pData->data );
00219 strnset( buffer, ch, n );
00220 buffer[ newLen ] = '\0';
00221 return buffer;
00222 }
00223
00224 JString& JString::setFillWithChar( const int ch, ULONG n ) {
00225 ULONG newLen = pData->length;
00226 JStringData* sd = new JStringData( pData->data, newLen );
00227 pData->Dec();
00228 pData = sd;
00229 strnset( pData->data, ch, n );
00230 pData->data[ newLen ] = '\0';
00231 pData->length = strlen( sd->data );
00232 return ( *this );
00233 }
00234
00235 long JString::locateCharSet( const char* charset ) {
00236 return locateCharSet( charset, 0 );
00237 }
00238
00239
00240 long JString::locateCharSet( const char* charset, ULONG startAt ) {
00241 if ( startAt >= pData->length ) return -1;
00242 char* p = pData->data + startAt;
00243 char* f = strpbrk( p, charset );
00244 return (long)( f - pData->data );
00245 }
00246
00247 ULONG JString::findCharset( const char* charset ) {
00248 return findCharset( charset, 0 );
00249 }
00250
00251
00252 ULONG JString::findCharset( const char* charset, ULONG startAt ) {
00253 if ( startAt >= pData->length ) return 0;
00254 char* p = pData->data + startAt;
00255 return strspn( p, charset );
00256 }
00257
00258 long JString::findString( const char* s ) {
00259 return findString( s, 0 );
00260 }
00261
00262
00263 long JString::findString( const char* s, ULONG startAt ) {
00264 if ( startAt >= pData->length ) return 0;
00265 char* p = pData->data + startAt;
00266 char* f = strstr( p, s );
00267 return (long)( f - pData->data );
00268 }
00269
00270 double JString::toDouble() {
00271 return toDouble( 0 );
00272 }
00273
00274 double JString::toDouble( ULONG startAt ) {
00275 if ( startAt >= pData->length ) return 0;
00276 char* p = pData->data + startAt;
00277 return strtod( p, NULL );
00278 }
00279
00280 long JString::toLong() {
00281 return toLong( 0, 10 );
00282 }
00283
00284 long JString::toLong( ULONG base ) {
00285 return toLong( 0, base );
00286 }
00287
00288 long JString::toLong( ULONG startAt, ULONG base ) {
00289 if ( startAt >= pData->length ) return 0;
00290 char* p = pData->data + startAt;
00291 return strtol( p, NULL, base );
00292 }
00293
00294 ULONG JString::toULONG() {
00295 return toULONG( 0, 10 );
00296 }
00297
00298 ULONG JString::toULONG( ULONG base ) {
00299 return toULONG( 0, base );
00300 }
00301
00302 ULONG JString::toULONG( ULONG startAt, ULONG base ) {
00303 if ( startAt >= pData->length ) return 0;
00304 char* p = pData->data + startAt;
00305 return strtoul( p, NULL, base );
00306 }
00307
00308 char* JString::getTransform( const char* src, ULONG n )
00309 {
00310 ULONG newLen = pData->length + n + 1;
00311 char* buffer = new char[ newLen ];
00312 strcpy( buffer, pData->data );
00313 strxfrm( buffer, src, n );
00314 buffer[ newLen ] = '\0';
00315 return buffer;
00316 }
00317
00318 JString& JString::setTransform( const char* src, ULONG n )
00319 {
00320 ULONG newLen = pData->length + n;
00321 JStringData* sd = new JStringData( pData->data, newLen );
00322 pData->Dec();
00323 pData = sd;
00324 strxfrm( pData->data, src, n );
00325 pData->data[ newLen ] = '\0';
00326 pData->length = strlen( sd->data );
00327 return ( *this );
00328 }
00329
00330 char* JString::getTokens( const char* delims, ULONG startAt )
00331 {
00332 if ( startAt >= pData->length ) return NULL;
00333 char* p = pData->data + startAt;
00334 char* buffer = strdup( p );
00335 char* f = strtok( buffer, delims );
00336 return f;
00337 }
00338
00339 char* JString::getMoreTokens( const char* delims ) {
00340 return strtok( NULL, delims );
00341 }
00342
00343 JString JString::getStringTokens( const char* delims, ULONG startAt )
00344 {
00345 if ( startAt >= pData->length ) return JString();
00346 char* p = pData->data + startAt;
00347 char* buffer = strdup( p );
00348 char* f = strtok( buffer, delims );
00349 return JString( f );
00350 }
00351
00352 JString JString::getMoreStringTokens( const char* delims ) {
00353 return JString( strtok( NULL, delims ) );
00354 }
00355
00356 #endif