Saving and Loading the Object Description
Now come the input/output member functions that we have declared in the class synopsis using the
copy and read Member Functions
IlvPredefinedIOMembers(ShadowEllipse); |
This macro must be used in the implementation file, outside any function definition block, just like
It is equivalent to:
IlvGraphic* ShadowEllipse::read(IlvInputFile& input, IlvPalette* palette) { return new ShadowEllipse(input, palette); } IlvGraphic* ShadowEllipse::copy() const { return new ShadowEllipse(*this); } |
The static member function read calls the class reading constructor and returns the new instance. The macro
ShadowEllipse::ShadowEllipse(IlvInputFile& f, IlvPalette* pal) : IlvSimpleGraphic(f, pal), _rect(), _thickness(0) { int thickness; f.getStream() >> _rect >> thickness; _thickness = (IlvDim)thickness; _invertedPalette = 0; computeInvertedPalette(); } |
The above constructor calls the superclass reading constructor, which reads the
superclass-specific information from the stream object. Then the subclass can read its own information.
The member function copy creates a copy of the IlvShadowEllipse class, calling the class copy constructor:
ShadowEllipse::ShadowEllipse(const ShadowEllipse& source) : IlvSimpleGraphic(source), _rect(source._rect), _thickness(source._thickness) { _invertedPalette = source._invertedPalette; _invertedPalette->lock(); } |
write Member Function
The member function write writes the dimensions of the rectangle and the thickness of the shadow to the given ostream output stream:
void ShadowEllipse::write(IlvOutputFile& f) const { f.getStream() << _rect << IlvSpc() << (int)_thickness; } |
This write method is special because the IlvSimpleGraphic superclass has no information to write. It is better to call the superclass write method to be consistent with the read method, if the superclass has information to write. Here is an example of a usual write method:
void IlvRoundRectangle::write(IlvOutputFile& os) const { IlvRectangle::write(os); os.getStream() << IlvSpc() << _radius; } |
IlvRegisterClass Macro
IlvRegisterClass(ShadowEllipse, IlvSimpleGraphic); |
Outside of the body of any function, we have to register the class IlvShadowEllipse as a subclass of the class IlvSimpleGraphic.