00001 #ifndef __J2K__JString_Data_CPP__
00002 #define __J2K__JString_Data_CPP__
00003
00004 #include <j2k/Fred/String/StrData.hpp>
00005
00006
00007
00008
00009 void JStringData::Init(const char* s, size_t nBuffer) {
00010 if ( s == NULL || *s == '\0' ) {
00011 InitBuffer( nBuffer, '\0' );
00012 } else {
00013 length = strlen( s );
00014
00015 if (nBuffer > length) {
00016 bufferSize = nBuffer;
00017 } else {
00018 bufferSize = length;
00019 }
00020
00021 data = new char[ bufferSize + 1 ];
00022 assert( data != NULL );
00023 data[length] = '\0';
00024 memcpy( data, s, length );
00025
00026 assert( data[length] == '\0' );
00027 assert( data[bufferSize] == '\0' );
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 }
00039 }
00040
00041 void JStringData::InitBuffer( size_t nRepeat, char fill ) {
00042 if ( nRepeat > 0 ) {
00043 if ( bufferSize < nRepeat ) {
00044 bufferSize = nRepeat;
00045 }
00046 data = new char[ bufferSize + 1];
00047 assert( data != NULL );
00048
00049
00050 memset( data, fill, nRepeat );
00051 memset( data + nRepeat, 0, bufferSize - nRepeat );
00052
00053 data[nRepeat] = '\0';
00054 data[bufferSize] = '\0';
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 } else {
00066 bufferSize = 0;
00067 data = NULL;
00068 }
00069 }
00070
00071 void JStringData::Clear( char fill ) {
00072 if ( data == NULL ) return;
00073
00074
00075 memset( data, fill, bufferSize );
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 data[bufferSize] = '\0';
00087
00088 if ( fill != '\0' ) {
00089 length = bufferSize;
00090 } else {
00091 length = 0;
00092 }
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 }
00107
00108 const JStringData& JStringData::operator=(const JStringData& sd) {
00109 nbRefs = 1;
00110 Init( sd.data, sd.bufferSize );
00111 return *this;
00112 }
00113
00114 #endif