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

C:/temp/src/j2k/Deprecated/old_18mar_diff/String/StringAt.cpp

Go to the documentation of this file.
00001 #ifndef __J2K__JString_At_CPP__
00002 #define __J2K__JString_At_CPP__
00003 
00004 #include <j2k/Fred/String/String.hpp>
00005 
00006 // TODO:  Check for effects of LOCK functions !
00007 // StrAdd also !
00008 
00009 // Use CopyBeforeWrite();
00010 
00011 JString JString::at( size_t startpos ) {
00012   if ( (long)startpos == -1 ) return JString();
00013   if ( startpos > pData->length ) return JString();
00014   const char* r = pData->data + startpos;
00015   return JString( r );
00016 }
00017 
00018 JString JString::at( const char* s, size_t startpos ) {
00019   if ( (long)startpos == -1 ) return JString();
00020   if ( startpos > pData->length ) return JString();
00021   const char* r = pData->data + startpos;
00022   return JString( strstr( r, s ) );
00023 }
00024 
00025 JString JString::at( const char* s, size_t startpos, size_t length ) {
00026   if ( (long)startpos == -1 ) return JString();
00027   if ( (long)length   == -1 ) length = pData->length;
00028   if ( startpos+length > pData->length ) return JString();
00029   const char* r = pData->data + startpos;
00030   char* r2 = strstr( r, s );
00031 
00032   JStringData* sd = new JStringData( r2, length );  
00033   
00034 /*
00035   char* c = new char[ length + 1 ];
00036   memcpy( c, r2, length );
00037   c[length] = '\0';
00038 */
00039 
00040   return JString( sd );
00041 }
00042 
00043 JString JString::at( size_t startpos, size_t length) {
00044   if ( (long)startpos == -1 ) return JString();
00045   if ( (long)length   == -1 ) length = pData->length;
00046   if ( startpos > pData->length ) return JString();
00047   const char* r = pData->data + startpos;
00048 
00049 /*
00050   char* c = new char[ length + 1 ];
00051   memcpy( c, r, length );
00052   c[length] = '\0';
00053   return JString( c );
00054 */
00055 
00056   JStringData* sd = new JStringData( r, length );  
00057   return JString( sd );
00058 
00059 /** ANDREA ***************************************************
00060 
00061   This is leaking memory. The temporary buffer you allocated
00062   will be abandoned on the free store after having been
00063   used to create the JString object.
00064 
00065   What !?
00066   Oh I see ! =)
00067 
00068 *************************************************************/
00069 }
00070 
00071 JString& JString::setAt(size_t index, char ch) {
00072   if ( (long)index == -1 ) return *this;
00073   if (index > pData->length) {
00074     index = pData->length;
00075   }
00076   CopyBeforeWrite();
00077   pData->data[index] = ch;
00078   return *this;
00079 }
00080 
00081 JString JString::rtrim( char ch ) const {
00082   // find first single character
00083   // return -1 if not found and index otherwise
00084   for( size_t l = pData->length - 1; l >= 0; l-- ) {
00085     if ( pData->data[l] == ch ) {
00086       const char* r = pData->data + l;
00087       size_t length = (size_t)(pData->length) - l;
00088 
00089       JStringData* sd = new JStringData( r, length );
00090 /*
00091       char* c = new char[ length + 1 ];
00092       memcpy( c, r, length );
00093       c[length] = '\0';
00094       return JString( c );
00095 */
00096    return JString( sd );
00097     }
00098   }
00099   return JString();
00100 }
00101 
00102 JString JString::trim( char ch ) const {
00103   // find first single character
00104   // return -1 if not found and index otherwise
00105 
00106   JStringData* sd = new JStringData( pData->length );
00107 
00108 //  char* s  = new char[ pData->length + 1 ];
00109 
00110   size_t p = 0;
00111   for( size_t l = 0; l < pData->length; l++ ) {
00112    if ( pData->data[l] != ch ) {
00113       sd->data[ p++ ] = pData->data[l];
00114     }
00115   }
00116   if ( p == 0 ) {
00117     delete sd;
00118     return JString();
00119   }
00120 
00121   sd->data[ p ] = '\0';
00122   return JString( sd );
00123 }
00124 
00125 JString JString::trimCharset( const char* charset ) const {
00126   // find first single character
00127   // return -1 if not found and index otherwise
00128 
00129   JStringData* sd = new JStringData( pData->length );
00130   // char* s   = new char[ pData->length + 1 ];
00131 
00132   size_t p  = 0;
00133   size_t l  = 0;
00134   size_t m  = 0;
00135   size_t mc = strlen( charset );
00136   BOOL   found = FALSE;
00137 
00138   for( l = 0; l < pData->length; l++ ) {
00139    found = FALSE;
00140    for( m = 0; m < mc; m++ ) {
00141      if ( pData->data[l] == charset[m] ) { 
00142        found == TRUE; 
00143        m = mc; 
00144      }
00145    }
00146 
00147    if ( found == FALSE ) {
00148       sd->data[ p++ ] = pData->data[l];
00149     }
00150   }
00151 
00152   if ( p == 0 ) {
00153     delete sd;
00154     return JString();
00155   }
00156 
00157   sd->data[ p ] = '\0';
00158   return JString( sd );
00159 }
00160 
00161 JString JString::keepCharset( const char* charset ) const {
00162   // find first single character
00163   // return -1 if not found and index otherwise
00164   JStringData* sd = new JStringData( pData->length );
00165 
00166   // char* s   = new char[ pData->length + 1 ];
00167 
00168   size_t p  = 0;
00169   size_t l  = 0;
00170   size_t m  = 0;
00171   size_t mc = strlen( charset );
00172   BOOL   found = FALSE;
00173 
00174   for( l = 0; l < pData->length; l++ ) {
00175    found = FALSE;
00176    for( m = 0; m < mc; m++ ) {
00177      if ( pData->data[l] == charset[m] ) { 
00178        found == TRUE; 
00179        m = mc; 
00180      }
00181    }
00182 
00183    if ( found == TRUE ) {  // Only change from trim
00184       sd->data[ p++ ] = pData->data[l];
00185     }
00186   }
00187 
00188   if ( p == 0 ) {
00189     delete sd;
00190     return JString();
00191   }
00192 
00193   sd->data[ p ] = '\0';
00194   return JString( sd );
00195 }
00196 
00197 #endif

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