Compound objects can be externalised and internalised. The only assumption is that all component objects (and their component objects) must be capable of being externalised and internalised.
In this example, a compound object, an instance of the
CCompound
class, is externalised to, and internalised from, a
single stream. The class is defined as:
class CCompound : public CBase
{
public :
void ExternalizeL(RWriteStream& aStream) const;
void ExternalizeL(RReadStream& aStream);
...
CClassA* iCa;
CClassB* iCb;
TClassC iTc;
};
The preferred implementation of the ExternalizeL()
function is:
void CCompound::ExternalizeL(RWriteStream& aStream) const
{
aStream << *iCa;
aStream << *iCb;
aStream << iTc;
}
The following implementation is also correct:
void CCompound::ExternalizeL(RWriteStream& aStream) const
{
iCa->ExternalizeL(aStream);
iCb->ExternalizeL(aStream);
iTc.ExternalizeL(aStream);
}
The preferred implementation of the InternalizeL()
function is:
void CCompound::InternalizeL(RReadStream& aStream)
{
aStream >> *iCa;
aStream >> *iCb;
aStream >> iTc;
}
The following implementation is also correct:
void CCompound::InternalizeL(RReadStream& aStream)
{
iCa->InternalizeL(aStream);
iCb->InternalizeL(aStream);
iTc.InternalizeL(aStream);
}