VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes
DtReaderWriterFactory Class Reference

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

Inheritance diagram for DtReaderWriterFactory:
Inheritance graph
[legend]

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 bool(* DtRwCompareFcn )(const DtReaderWriter *lhs, const DtReaderWriter *rhs)
 
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 (bool registerDefaults=true)
 
virtual const std::set
< DtString > & 
xmlTypes () const
 Returns all the xml types. More...
 
virtual DtString mapXmlToRwType (const DtString &xmlType) const
 Maps the xml type to reader/writer type. More...
 
virtual DtString mapRwToXmlType (const DtString &rwType) const
 Maps the reader/writer type to xml type. More...
 
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. More...
 
virtual bool copyReaderWriter (const DtReaderWriter *sourceRw, DtReaderWriter *destRw) const
 Uses the operator= method on the RW objects to assign sourceRw to destRw. More...
 
virtual bool compareReaderWriter (const DtReaderWriter *sourceRw, const DtReaderWriter *destRw) const
 Uses the operator== method on the RW objects to check for equality. More...
 
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. More...
 
void addDefaultRwCreators ()
 Non-virtual since it is called by the constructor. More...
 
template<typename T_RWType >
void registerType (const DtString &rwTypeString)
 Registers a new RW type with the factory. More...
 
template<typename T_RWType >
void registerNumericType (const DtString &rwTypeString)
 Registers a new RW numeric type with the factory. More...
 
template<typename T_RWType >
void registerTypeWithoutSerialization (const DtString &rwTypeString)
 Registers type without buffer serialization. More...
 
const DtRwFunctionMapfunctionMap () const
 
bool typeRegistered (const DtString &rwTypeString) const
 Returns true if the specific type is registered. More...
 
virtual int getSize (const DtReaderWriter *) const
 
virtual charencode (const DtReaderWriter *, char *) const
 Encodes the variable bindings into the supplied buffer. More...
 
virtual const chardecode (DtReaderWriter *, const char *)
 Decodes the variable bindings from the specified buffer. More...
 

Protected Types

typedef std::map< DtString,
DtString
StringMap
 

Protected Member Functions

virtual void mapRwToXml (const DtString &rwType, const DtString &xmlType)
 Maps rw to xml type. If xml type already exists mapping is ignored. More...
 

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. More...
 
template<typename T_RWType >
static void copyRwType (const DtReaderWriter *sourceRw, DtReaderWriter *destRw)
 Templated utility function that copies values from one RW to another. More...
 
template<typename T_RWType >
static void copyNumericRwType (const DtReaderWriter *sourceRw, DtReaderWriter *destRw)
 Templated utility function that copies numeric values from one RW to another. More...
 
template<typename T_RWType >
static bool compareRwType (const DtReaderWriter *sourceRw, const DtReaderWriter *destRw)
 Templated utility function that copies values from one RW to another. More...
 
template<typename T_RWType >
static int getRwSize (const DtReaderWriter *sourceRw)
 Templated utility function that gets the size of the reader/writer item. More...
 
template<typename T_RWType >
static charencodeRwType (const DtReaderWriter *sourceRw, char *buf)
 Templated utility function that encodes the reader/writer item. More...
 
template<typename T_RWType >
static const chardecodeRwType (DtReaderWriter *sourceRw, const char *buf)
 Templated utility function that decodes the reader/writer item. More...
 

Protected Attributes

DtRwFunctionMap myRwFunctionMap
 
StringMap myRwToXmlType
 
StringMap myXmlToRwType
 
std::set< DtStringmyXmlTypes
 

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 parent registry 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 bool(* DtReaderWriterFactory::DtRwCompareFcn)(const DtReaderWriter *lhs, const DtReaderWriter *rhs)
typedef char*(* DtReaderWriterFactory::DtRwEncodeFcn)(const DtReaderWriter *source, char *)
typedef const char*(* DtReaderWriterFactory::DtRwDecodeFcn)(DtReaderWriter *source, const char *)
typedef std::map<DtString, DtString> DtReaderWriterFactory::StringMap
protected

Constructor & Destructor Documentation

DtReaderWriterFactory::DtReaderWriterFactory ( bool  registerDefaults = true)

Member Function Documentation

virtual const std::set<DtString>& DtReaderWriterFactory::xmlTypes ( ) const
virtual

Returns all the xml types.

virtual DtString DtReaderWriterFactory::mapXmlToRwType ( const DtString xmlType) const
virtual

Maps the xml type to reader/writer type.

virtual DtString DtReaderWriterFactory::mapRwToXmlType ( const DtString rwType) const
virtual

Maps the reader/writer type to xml type.

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.

Referenced by DtVrfXmlUtils::CreateRwObject(), and DtVariableParameterReaderWriter< _Container >::createRwStructure().

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 bool DtReaderWriterFactory::compareReaderWriter ( const DtReaderWriter sourceRw,
const DtReaderWriter destRw 
) const
virtual

Uses the operator== method on the RW objects to check for equality.

Referenced by DtUiTableWidgetItem::data().

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)

Referenced by DtVariableParameterReaderWriter< _Container >::DtVariableParameterReaderWriter().

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::registerNumericType ( const DtString rwTypeString)

Registers a new RW numeric 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.

Numeric types will allow integers/reals to be assigned to each other whereas the struct register above will not

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.

virtual void DtReaderWriterFactory::mapRwToXml ( const DtString rwType,
const DtString xmlType 
)
protectedvirtual

Maps rw to xml type. If xml type already exists mapping is ignored.

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 void DtReaderWriterFactory::copyNumericRwType ( const DtReaderWriter sourceRw,
DtReaderWriter destRw 
)
staticprotected

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

template<typename T_RWType >
static bool DtReaderWriterFactory::compareRwType ( const DtReaderWriter sourceRw,
const 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
StringMap DtReaderWriterFactory::myRwToXmlType
protected
StringMap DtReaderWriterFactory::myXmlToRwType
protected
std::set<DtString> DtReaderWriterFactory::myXmlTypes
protected

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

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)