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 const char* r2 = (const char*)strstr( r, s );
00031
00032 JStringData* sd = new JStringData( r2, length );
00033
00034 return JString( sd );
00035 }
00036
00037 JString JString::at( size_t startpos, size_t length) {
00038 if ( (long)startpos == -1 ) return JString();
00039 if ( (long)length == -1 ) length = pData->length;
00040 if ( startpos > pData->length ) return JString();
00041 const char* r = pData->data + startpos;
00042
00043 JStringData* sd = new JStringData( r, length );
00044 return JString( sd );
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 }
00058
00059 JString& JString::setAt(size_t index, char ch) {
00060 if ( (long)index == -1 ) return *this;
00061 if (index > pData->length) {
00062 index = pData->length;
00063 }
00064 CopyBeforeWrite();
00065 pData->data[index] = ch;
00066 return *this;
00067 }
00068
00069 JString JString::rtrim( char ch ) const {
00070
00071
00072 for( long l = (long)(pData->length - 1); l >= 0; l-- ) {
00073 if ( pData->data[l] == ch ) {
00074 const char* r = pData->data + l;
00075 size_t length = (size_t)(pData->length) - l;
00076
00077 JStringData* sd = new JStringData( r, length );
00078
00079
00080
00081
00082
00083
00084 return JString( sd );
00085 }
00086 }
00087 return JString();
00088 }
00089
00090 JString JString::trim( char ch ) const {
00091
00092
00093
00094 JStringData* sd = new JStringData( pData->length );
00095
00096
00097
00098 size_t p = 0;
00099 for( size_t l = 0; l < pData->length; l++ ) {
00100 if ( pData->data[l] != ch ) {
00101 sd->data[ p++ ] = pData->data[l];
00102 }
00103 }
00104 if ( p == 0 ) {
00105 delete sd;
00106 return JString();
00107 }
00108
00109 sd->data[ p ] = '\0';
00110 return JString( sd );
00111 }
00112
00113 JString JString::trimCharset( const char* charset ) const {
00114
00115
00116
00117 JStringData* sd = new JStringData( pData->length );
00118
00119
00120 size_t p = 0;
00121 size_t l = 0;
00122 size_t m = 0;
00123 size_t mc = strlen( charset );
00124 BOOL found = FALSE;
00125
00126 for( l = 0; l < pData->length; l++ ) {
00127 found = FALSE;
00128 for( m = 0; m < mc; m++ ) {
00129 if ( pData->data[l] == charset[m] ) {
00130 found == TRUE;
00131 m = mc;
00132 }
00133 }
00134
00135 if ( found == FALSE ) {
00136 sd->data[ p++ ] = pData->data[l];
00137 }
00138 }
00139
00140 if ( p == 0 ) {
00141 delete sd;
00142 return JString();
00143 }
00144
00145 sd->data[ p ] = '\0';
00146 return JString( sd );
00147 }
00148
00149 JString JString::keepCharset( const char* charset ) const {
00150
00151
00152 JStringData* sd = new JStringData( pData->length );
00153
00154
00155
00156 size_t p = 0;
00157 size_t l = 0;
00158 size_t m = 0;
00159 size_t mc = strlen( charset );
00160 BOOL found = FALSE;
00161
00162 for( l = 0; l < pData->length; l++ ) {
00163 found = FALSE;
00164 for( m = 0; m < mc; m++ ) {
00165 if ( pData->data[l] == charset[m] ) {
00166 found == TRUE;
00167 m = mc;
00168 }
00169 }
00170
00171 if ( found == TRUE ) {
00172 sd->data[ p++ ] = pData->data[l];
00173 }
00174 }
00175
00176 if ( p == 0 ) {
00177 delete sd;
00178 return JString();
00179 }
00180
00181 sd->data[ p ] = '\0';
00182 return JString( sd );
00183 }
00184
00185 #endif