Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Fred/String/StrANSI.cpp

Go to the documentation of this file.
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';       // Safety Net.
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;      // Late delete
00021   pData = sd;
00022   strcat( pData->data, src );
00023   pData->data[ newLen ] = '\0';  // Safety Net.
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   // Direct (Forward search)
00032   char* where = strchr( pData->data, c );
00033   if ( where == NULL ) return (-1);
00034 
00035   // e.g. 0xfff10 -= 0xfff00 => position 0x10
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   // Reverse (Backward search)
00044   char* where = strrchr( pData->data, c );
00045   if ( where == NULL ) return (-1);
00046 
00047   // e.g. 0xfff10 -= 0xfff00 => position 0x10
00048   long w = (long)where;
00049   w -= (long)pData->data;
00050   return w;
00051 }
00052 
00053 /* Defined in StrComp.cpp
00054 int JString::compare( const char* src ) {
00055   return strcmp( pData->data, src );
00056 }
00057 */
00058 
00059 int JString::compareIgnoreCase( const char* src ) 
00060 {
00061 // GNU C++ compiler. Bug fixed. Submitted by Dog/Wolf.
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    // return stricmp( pData->data, src );
00069 }
00070 
00071 int JString::compareUsingLocaleCollate( const char* src ) {
00072   return strcoll( pData->data, src );  // Useless, if extern "C" or "C++"
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() {  // MM/DD/YY format (not Y2K complient !)
00091    JStringData* sd = new JStringData( 9 );
00092    _strdate( sd->data );
00093    return JString( sd );
00094 }
00095 
00096 JString& JString::setDate() {  // MM/DD/YY format (not Y2K complient !)
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 // this = new JString( err );  // To Be FIXED
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() {  // HH:MM:SS  (24h)
00153    JStringData* sd = new JStringData( 8 );
00154    _strtime( sd->data );
00155    return JString( sd );
00156 }
00157 
00158 JString& JString::setTime() {  // HH:MM:SS  (24h)
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';  // Safety Net.
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';  // Safety Net.
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 } // Same as strset()
00213 
00214 JString& JString::setFillWithChar( const int ch ) {
00215   return setFillWithChar( ch, pData->length );
00216 } // Same as strset()
00217 
00218 // Fill the begin up to n with an ASCII character
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';  // Safety Net.
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';  // Safety Net.
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 // Return Where is the first charset in String
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 // Return How much of charset in String
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 // Return Where is the first String given in String
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 );  // No OffSet, Decimal
00286 }
00287 
00288 long JString::toLong( size_t base ) {
00289   return toLong( 0, base );  // No OffSet, Base chosen
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 );  // No OffSet, Decimal
00300 }
00301 
00302 ULONG JString::toULONG( size_t base ) {
00303   return toULONG( 0, base );  // No OffSet, Base chosen
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';  // Safety Net.
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';  // Safety Net.
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

Generated on Sun Oct 14 18:46:27 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001