Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Deprecated/old_18mar_diff/String/StrData.cpp

Go to the documentation of this file.
00001 #ifndef __J2K__JString_Data_CPP__
00002 #define __J2K__JString_Data_CPP__
00003 
00004 #include <j2k/Fred/String/StrData.hpp>
00005 
00006 ////////////////////////////////////////////////////////////////////////////
00007 /// Utilities and function helper                                        ///
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 );  // Exit if memory not allocated.
00023     data[length] = '\0';
00024     memcpy( data, s, length );
00025 
00026     assert( data[length]     == '\0' );
00027     assert( data[bufferSize] == '\0' );
00028 
00029 /** ANDREA ***************************************************
00030 
00031   Completely useless assignment. If you're really paranoid at
00032   least change it to assert(data[lenght]=='\0').
00033 
00034   ok.
00035   done.
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 );  // Exit if memory not allocated.
00048 
00049     // Clear memory with NULLs
00050     memset( data, fill, nRepeat );
00051     memset( data + nRepeat, 0, bufferSize - nRepeat );
00052 
00053     data[nRepeat]    = '\0';
00054     data[bufferSize] = '\0';
00055 
00056     /*
00057     size_t i = 0;
00058     for( ; i < nRepeat; i++) { 
00059       data[i] = fill;
00060     }
00061     for( i = nRepeat; i <= bufferSize; i++) { 
00062       data[i] = '\0';
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   // Clear memory with NULLs
00080   /*
00081   for( size_t i = 0; i < bufferSize; i++) { 
00082     data[i] = fill;
00083   }
00084   */
00085 
00086   data[bufferSize] = '\0';
00087 
00088   if ( fill != '\0' ) {
00089     length = bufferSize;
00090   } else {
00091     length = 0;
00092   }
00093 
00094 /** ANDREA ***************************************************
00095 
00096   Why not using memset ? 
00097 
00098   ughhh, didn't know that.
00099   I see in Watcom C++ Ref that it exist really,
00100   will it be faster?
00101 
00102   Now, I know and it's very cool to use it ! =]
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

Generated on Sun Oct 14 18:46:27 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001