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( 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
00036
00037
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
00051
00052
00053
00054
00055
00056 JStringData* sd = new JStringData( r, length );
00057 return JString( sd );
00058
00059
00060
00061
00062
00063
00064
00065
00066
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
00083
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
00092
00093
00094
00095
00096 return JString( sd );
00097 }
00098 }
00099 return JString();
00100 }
00101
00102 JString JString::trim( char ch ) const {
00103
00104
00105
00106 JStringData* sd = new JStringData( pData->length );
00107
00108
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
00127
00128
00129 JStringData* sd = new JStringData( pData->length );
00130
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
00163
00164 JStringData* sd = new JStringData( pData->length );
00165
00166
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 ) {
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