00001 #ifndef __J2K__JSubString_CPP__
00002 #define __J2K__JSubString_CPP__
00003
00004 #include <j2k/Fred/String/String.hpp>
00005 #include <j2k/Fred/String/SubString.hpp>
00006
00007 class JString;
00008
00009 class JSubString {
00010 private:
00011 JSubString()
00012 : startpos( 0 ), length( 0 ), pData( strNull ) { }
00013
00014 JSubString( JString* p )
00015 : startpos( 0 ), length( 0 ), pData( strNull )
00016 {
00017 if ( p != NULL ) {
00018 pData = p;
00019 pData->Inc();
00020 length = p->length;
00021 }
00022 }
00023
00024 JSubString( JString* p, ULONG start )
00025 : startpos( 0 ), length( 0 ), pData( strNull )
00026 {
00027 if ( p != NULL ) {
00028 pData = p;
00029 pData->Inc();
00030 length = p->length;
00031 startpos = start;
00032 }
00033 }
00034
00035 JSubString( JString* p, ULONG start, ULONG len )
00036 : startpos( 0 ), length( 0 ), pData( strNull )
00037 {
00038 if ( p != NULL ) {
00039 pData = p;
00040 pData->Inc();
00041 startpos = start;
00042
00043 ULONG l = p->length;
00044 if ( l >= len ) {
00045 length = len;
00046 } else {
00047 length = l;
00048 }
00049 }
00050 }
00051
00052 JSubString( const JSubString& src )
00053 : pData( src.pData ), startpos( src.startpos ), length( src.length )
00054 {
00055 pData->Inc();
00056 }
00057
00058 public:
00059
00060
00061 const JSubString& JSubString::operator=( const JString& src )
00062 {
00063 }
00064
00065 JString JSubString::operator=( const JSubString& src )
00066 {
00067 ULONG sz = src.length + pData->length;
00068 JStringData* sd = pData;
00069
00070 pData = new JStringData( sd->data, sz );
00071
00072 char* d = pData->data + startpos;
00073 char* s = src.pData->data + src.startpos;
00074
00075 memcpy( d, s, src.length );
00076
00077 d += src.length;
00078 s = sd->data + startpos + length;
00079
00080
00081 memcpy( d, s,
00082
00083 sd->Dec();
00084 }
00085
00086 JString operator JString ()
00087 {
00088 return JString( pData );
00089 }
00090
00091 private:
00092 JStringData* pData;
00093 ULONG startpos;
00094 ULONG length;
00095
00096 friend JString;
00097 };
00098
00099 #endif