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