Improved blind data support
class.
Synopsis
class AlBlindData
public:
AlBlindData(AlObject *obj, int userID,
size_t size);
AlBlindData(int userID, size_t size);
virtual
~AlBlindData();
virtual
statusCode create();
virtual
statusCode deleteData();
virtual
bool isValid() const;
protected:
void
convert(int&);
void
convert(float&);
void
convert(short&);
void
convert(double&);
void
setEndian();
void
*getData() const;
Description
This class provides an
improved blind data support. AlBlindData is a base class for OpenAlias
plug-ins and OpenModel applications which need to maintain blind
data (that is, data which Alias does not know about in a platform
independent form). This class supersedes the existing blind data
support (AlDagNode::blindData for example).
The previous implementation
for blind data did not provide any support for moving data between
platforms which have different endian representations (for example
Irix and NT). This class provides a nearly invisible solution to
this problem. As such the previous implementation is obsolete and
will be removed in a future release of the API.
AlBlindData::AlBlindData(int
userID, size_t userSize)
Description
Constructor for referencing
blind data on an AlUniverse. If data with the userID already exists
this wrapper will reference it, otherwise it will initialized for
a call to the create() method.
Arguments
<
userID - user ID of the data desired.
<
userSize - number of bytes in the block of data.
AlBlindData::AlBlindData(AlObject
*parent, int userID, size_t userSize)
Description
Constructor for referencing
blind data on an AlObject. Only those object types which support
blind data will successfully initialize this wrapper. If data with
the userID already exists this wrapper will reference it, otherwise
it will initialized for a call to the create() method.
Arguments
<
parent - AlObject to attach blind data to.
<
userID - user ID of the data desired.
<
userSize - number of bytes in the block of data.
AlBlindData::~AlBlindData()
Description
Delete the AlBlindData
object. This does not affect the blind data.
bool AlBlindData::isValid()
const
Description
This method returns true
if it is possible to read or write to the blind data. Accessing
the blind data when this method returns false can lead to unexpected
results including segmentation violations.
statusCode AlBlindData::deleteData()
Description
This method deletes the
blind data referenced by this wrapper.
Note Under
no circumstances should you delete the data yourself.
Return Codes
sSuccess - the data was
successfully deleted.
sInvalidObject - the
wrapper does not reference a valid object.
statusCode AlBlindData::create()
Description
Create an instance of
the blind data on the object and of the size set when the AlBlindData object
was instantiated. If this object already references blind data
this method fails.
Return Codes
sAlreadyCreated - this
object already references blind data.
sInvalidObject - the
parent object was invalidated or cannot accept blind data.
sObjectAlreadyPresent
- blind data of the same user ID but different size exists. This likely
happens when attempting to reference old style blind data.
sInsufficientMemory -
insufficient memory to creat the blind data.
sSuccess - the blind
data was successfully created.
void *AlBlindData::getData()
const
Description
This protected method
returns a pointer to the data referenced by this wrapper. The validity
of the data should be checked with isValid() before the data is
accessed. The AlBlindData object maintains ownership of the data
and you are provided a pointer to the data only for the purposes
of reading and writing to it. You may not free this pointer. The
only way to delete the data is with the deleteData() method above.
void AlBlindData::convert(int&
val)
Description
This method ensures that
the integer is properly converted from whatever endian representation
the integer was saved in to the representation appropriate for the
current platform. This method is called in the constructor of classes
derived from this one.
void AlBlindData::convert(int&
val)
Description
This method ensures that
the integer is properly converted from whatever endian representation
the integer was saved in to the representation appropriate for the
current platform. This method is called in the constructor of classes
derived from this one.
void AlBlindData::convert(float&
val)
Description
This method ensures that
the float is properly converted from whatever endian representation
the float was saved in to the representation appropriate for the
current platform. This method is called in the constructor of classes
derived from this one.
void AlBlindData::convert(double&
val)
Description
This method ensures that
the double is properly converted from whatever endian representation
the double was saved in to the representation appropriate for the
current platform. This method is called in the constructor of classes
derived from this one.
void AlBlindData::setEndian()
Description
This method sets the
endian flag of the wrapper appropriately for the current platform. This
method must be the last one called in constructors of classes derived
from this one.