00001 #ifndef __J2K__JString_At_CPP__
00002 #define __J2K__JString_At_CPP__
00003
00004 #include <j2k/Fred/String/String.hpp>
00005
00006
00007
00008
00009
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
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
00051
00052
00053
00054
00055
00056
00057
00058
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
00075
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
00084
00085
00086
00087
00088 return JString( sd );
00089 }
00090 }
00091 return JString();
00092 }
00093
00094 JString JString::trim( char ch ) const {
00095
00096
00097
00098 JStringData* sd = new JStringData( pData->length );
00099
00100
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
00119
00120
00121 JStringData* sd = new JStringData( pData->length );
00122
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
00155
00156 JStringData* sd = new JStringData( pData->length );
00157
00158
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 ) {
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