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