VR-Forces 4.1.1 Class Documentation
List of all members | Classes | Public Types | Public Member Functions | Static Protected Member Functions | Protected Attributes
DtReaderWriterFactory Class Reference

Factory for creating ReaderWriter objects dynamically based on a type string. More...

Classes

struct  DtRwFunctions

Public Types

typedef DtReaderWriter *(* DtRWCreatorFcn )(const DtString &name, DtReaderWriterRegistry *parentRegistry)
typedef void(* DtRWCopyFcn )(const DtReaderWriter *source, DtReaderWriter *dest)
typedef int(* DtRwGetSizeFcn )(const DtReaderWriter *source)
typedef char *(* DtRwEncodeFcn )(const DtReaderWriter *source, char *)
typedef const char *(* DtRwDecodeFcn )(DtReaderWriter *source, const char *)
typedef std::map< DtString,
DtRwFunctions
DtRwFunctionMap

Public Member Functions

 DtReaderWriterFactory ()
virtual DtReaderWritercreateItem (const DtString &type, const DtString &name, DtReaderWriterRegistry *parentRegistry) const
 Creates a new RW type based on the type string provided, with the specified name and parent registry.
virtual bool copyReaderWriter (const DtReaderWriter *sourceRw, DtReaderWriter *destRw) const
 Uses the operator= method on the RW objects to assign sourceRw to destRw.
virtual DtReaderWritercloneReaderWriter (const DtString &name, const DtReaderWriter *sourceRw, DtReaderWriterRegistry *parentRegistry) const
 Creates a clone of the RW object to create a clone of the specified object.
void addDefaultRwCreators ()
 Non-virtual since it is called by the constructor.
template<typename T_RWType >
void registerType (const DtString &rwTypeString)
 Registers a new RW type with the factory.
template<typename T_RWType >
void registerTypeWithoutSerialization (const DtString &rwTypeString)
 Registers type without buffer serialization.
const DtRwFunctionMapfunctionMap () const
bool typeRegistered (const DtString &rwTypeString) const
 Returns true if the specific type is registered.
virtual int getSize (const DtReaderWriter *) const
virtual char * encode (const DtReaderWriter *, char *) const
 Encodes the variable bindings into the supplied buffer.
virtual const char * decode (DtReaderWriter *, const char *)
 Decodes the variable bindings from the specified buffer.

Static Protected Member Functions

template<typename T_RWType >
static DtReaderWritercreateRWType (const DtString &name, DtReaderWriterRegistry *parentRegistry)
 Templated utility function that acts as a creator for the specified reader writer type.
template<typename T_RWType >
static void copyRwType (const DtReaderWriter *sourceRw, DtReaderWriter *destRw)
 Templated utility function that copies values from one RW to another.
template<typename T_RWType >
static int getRwSize (const DtReaderWriter *sourceRw)
 Templated utility function that gets the size of the reader/writer item.
template<typename T_RWType >
static char * encodeRwType (const DtReaderWriter *sourceRw, char *buf)
 Templated utility function that encodes the reader/writer item.
template<typename T_RWType >
static const char * decodeRwType (DtReaderWriter *sourceRw, const char *buf)
 Templated utility function that decodes the reader/writer item.

Protected Attributes

DtRwFunctionMap myRwFunctionMap

Detailed Description

Factory for creating ReaderWriter objects dynamically based on a type string.

This factory also handles copying between two RW object of the same type when only pointers to the base DtReaderWriter class is passed in. This factory works somewhat differently from most other factories in VRF. Some templated methods are defined that are used in place of the more traditional create() and clone() methods. To register a new RW subclass with the factory, call registerType(). RW objects must have a valid operator= and constructor which takes a name and partent registery pointer defined into order to work with this factory.

Member Typedef Documentation

typedef DtReaderWriter*(* DtReaderWriterFactory::DtRWCreatorFcn)(const DtString &name, DtReaderWriterRegistry *parentRegistry)
typedef void(* DtReaderWriterFactory::DtRWCopyFcn)(const DtReaderWriter *source, DtReaderWriter *dest)
typedef int(* DtReaderWriterFactory::DtRwGetSizeFcn)(const DtReaderWriter *source)
typedef char*(* DtReaderWriterFactory::DtRwEncodeFcn)(const DtReaderWriter *source, char *)
typedef const char*(* DtReaderWriterFactory::DtRwDecodeFcn)(DtReaderWriter *source, const char *)

Constructor & Destructor Documentation

DtReaderWriterFactory::DtReaderWriterFactory ( )

Member Function Documentation

virtual DtReaderWriter* DtReaderWriterFactory::createItem ( const DtString type,
const DtString name,
DtReaderWriterRegistry parentRegistry 
) const
virtual

Creates a new RW type based on the type string provided, with the specified name and parent registry.

Returns a pointer to this new object. The factory does not do any memory management for this new objects.

virtual bool DtReaderWriterFactory::copyReaderWriter ( const DtReaderWriter sourceRw,
DtReaderWriter destRw 
) const
virtual

Uses the operator= method on the RW objects to assign sourceRw to destRw.

The objects are first casted to their actual RW object classes based on the readerWriterType() string that is returned from each. Both objects must return the same readerWriterType().

virtual DtReaderWriter* DtReaderWriterFactory::cloneReaderWriter ( const DtString name,
const DtReaderWriter sourceRw,
DtReaderWriterRegistry parentRegistry 
) const
virtual

Creates a clone of the RW object to create a clone of the specified object.

The object will first be cast to its actual type, based on the readerWriterType() returned by the object. Uses the constructor and operator= of the object. (Does not use the copy constructor)

void DtReaderWriterFactory::addDefaultRwCreators ( )

Non-virtual since it is called by the constructor.

Registers all the default VRF RW object types with the factory.

template<typename T_RWType >
void DtReaderWriterFactory::registerType ( const DtString rwTypeString)

Registers a new RW type with the factory.

This is a templated method, and must be called with the form: registerType<DtRwInt>(DtRwIntType); The basic RW type strings are defined in rwTypes.h.

template<typename T_RWType >
void DtReaderWriterFactory::registerTypeWithoutSerialization ( const DtString rwTypeString)

Registers type without buffer serialization.

const DtRwFunctionMap& DtReaderWriterFactory::functionMap ( ) const
bool DtReaderWriterFactory::typeRegistered ( const DtString rwTypeString) const

Returns true if the specific type is registered.

virtual int DtReaderWriterFactory::getSize ( const DtReaderWriter ) const
virtual
virtual char* DtReaderWriterFactory::encode ( const DtReaderWriter ,
char *   
) const
virtual

Encodes the variable bindings into the supplied buffer.

virtual const char* DtReaderWriterFactory::decode ( DtReaderWriter ,
const char *   
)
virtual

Decodes the variable bindings from the specified buffer.

template<typename T_RWType >
static DtReaderWriter* DtReaderWriterFactory::createRWType ( const DtString name,
DtReaderWriterRegistry parentRegistry 
)
staticprotected

Templated utility function that acts as a creator for the specified reader writer type.

template<typename T_RWType >
static void DtReaderWriterFactory::copyRwType ( const DtReaderWriter sourceRw,
DtReaderWriter destRw 
)
staticprotected

Templated utility function that copies values from one RW to another.

template<typename T_RWType >
static int DtReaderWriterFactory::getRwSize ( const DtReaderWriter sourceRw)
staticprotected

Templated utility function that gets the size of the reader/writer item.

template<typename T_RWType >
static char* DtReaderWriterFactory::encodeRwType ( const DtReaderWriter sourceRw,
char *  buf 
)
staticprotected

Templated utility function that encodes the reader/writer item.

template<typename T_RWType >
static const char* DtReaderWriterFactory::decodeRwType ( DtReaderWriter sourceRw,
const char *  buf 
)
staticprotected

Templated utility function that decodes the reader/writer item.

Member Data Documentation

DtRwFunctionMap DtReaderWriterFactory::myRwFunctionMap
protected

The documentation for this class was generated from the following file:

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)