From: Jean-Louis F. <jfa...@gm...> - 2010-08-16 21:48:23
|
Hi, I saw those lines in RexxArray::toString : RexxMutableBuffer *mutbuffer = ((RexxMutableBufferClass*) TheMutableBufferClass)->newRexx(NULL, 0); ProtectedObject p1(mutbuffer); mutbuffer->append(_stringValue); newString = mutbuffer->makeString(); Q1 : I don't understand the implementation of RexxMutableBufferClass::newRexx. There is a new with placement, but why allocate at the memory location of 'this' ? According to the lines above, 'this' is TheMutableBufferClass. /* allocate the new object */ newBuffer = new ((RexxClass *)this) RexxMutableBuffer(bufferLength, defaultSize); newBuffer->dataLength = string->getLength(); /* copy the content */ newBuffer->data->copyData(0, string->getStringData(), string->getLength()); Q2 : Why do we have bufferLength and dataLength in RexxMutableBuffer ? Those attributes are already available in the encapsulated RexxBuffer : data->bufferSize and data->dataLength Q3 : RexxBuffer and RexxString have some helpers to create instances from C++ : new_buffer and new_string But nothing similar for RexxMutableBuffer. Any reason ? Q4 : In programming guide, I see that NewBufferString lets create a RexxBufferStringObject which is a mutable String object. It's implemented by a RexxString, not by a RexxMutableBuffer. Any reason ? Is it because RexxMutableBuffer would need ProtectedObject which is not available from API, I think ? Jean-Louis |