home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 October
/
Chip_1997-10_cd.bin
/
tema
/
sybase
/
powerj
/
hpp.z
/
WDATAVRF.HPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-06-10
|
21KB
|
786 lines
#ifndef _WDATAVRF_HPP_INCLUDED
#define _WDATAVRF_HPP_INCLUDED
//------------------------------------------------------------------------
//
// WDataValueReference
//
// This class represents data values and is only of interest to
// implementors of new data access models (i.e. subclasses of WDataSource).
//
//
// How reference objects are created:
//
// The WDVFactory class knows how to create objects of a given type.
// To create an object you thus call WDVFactory::Allocate, passing
// in the ID of the type you are interested in creating. You can also
// optionally pass in a pointer to an existing WDataValueReference
// object, which will then be used to initialize the new object.
//
// To create the new objects, WDVFactory stores prototype objects
// internally, and then calls the Clone method on the appropriate
// prototype object.
//
//------------------------------------------------------------------------
#ifndef _WOBJECT_HPP_INCLUDED
#include "wobject.hpp"
#endif
#ifndef _WEVENT_HPP_INCLUDED
#include "wevent.hpp"
#endif
#ifndef _WDATAOBJ_HPP_INCLUDED
#include "wdataobj.hpp"
#endif
#ifndef _WVECTOR_HPP_INCLUDED
#include "wvector.hpp"
#endif
#define WDV_CONVERSION_METHODS \
\
virtual WBool GetCHAR( WString & s, WDataValue *val ) const; \
virtual WBool SetCHAR( const WString & string, WDataValue *val ); \
virtual WBool GetSSHORT( SWORD & s, WDataValue *val ) const; \
virtual WBool SetSSHORT( SWORD s, WDataValue *val ); \
virtual WBool GetUSHORT( UWORD & u, WDataValue *val ) const;\
virtual WBool SetUSHORT( UWORD u, WDataValue *val );\
virtual WBool GetSLONG( SDWORD & s, WDataValue *val ) const;\
virtual WBool SetSLONG( SDWORD s, WDataValue *val );\
virtual WBool GetULONG( UDWORD & u, WDataValue *val ) const;\
virtual WBool SetULONG( UDWORD u, WDataValue *val );\
virtual WBool GetFLOAT( SFLOAT & s, WDataValue *val ) const;\
virtual WBool SetFLOAT( SFLOAT f, WDataValue *val );\
virtual WBool GetDOUBLE( SDOUBLE & d, WDataValue *val ) const;\
virtual WBool SetDOUBLE( SDOUBLE d, WDataValue *val );\
virtual WBool GetBIT( UCHAR & c, WDataValue *val ) const;\
virtual WBool SetBIT( UCHAR c, WDataValue *val );\
virtual WBool GetSTINYINT( SCHAR & c, WDataValue *val ) const;\
virtual WBool SetSTINYINT( SCHAR c, WDataValue *val );\
virtual WBool GetUTINYINT( UCHAR & c, WDataValue *val ) const;\
virtual WBool SetUTINYINT( UCHAR c, WDataValue *val );\
virtual WBool GetBINARY( WBuffer & b, WDataValue *val ) const;\
virtual WBool SetBINARY( const WBuffer & buf, WDataValue *val );\
virtual WBool GetBOOKMARK( BOOKMARK & m, WDataValue *val ) const;\
virtual WBool SetBOOKMARK( BOOKMARK mark, WDataValue *val ); \
virtual WBool CopyInto( const WDataValueReference & ref ); \
virtual WBool Clear();
//
// WDataValueReference -- Abstract class for reference-counted
// values.
//
class WCMCLASS WDataValueReference : public WReferenceObject {
friend class WDVFactory;
private:
WDataValueReference( const WDataValueReference & tr );
WDataValueReference & operator=( const WDataValueReference & tr );
protected:
WDataValueReference();
public:
virtual ~WDataValueReference();
virtual WLong Reference();
virtual WLong Unreference();
virtual WLong Reference( WDataValue *val );
virtual WLong Unreference( WDataValue *val );
virtual WNativeDataType GetType() const = 0;
virtual WBool SetType( WNativeDataType type,
WDataValue *val );
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const = 0;
virtual WInt GetSize() const = 0;
virtual WBool SetSize( WInt newSize );
virtual WInt GetLength() const;
virtual WBool SetLength( WInt newLength );
virtual void *GetData() const = 0;
virtual WBool SetData( void *data, WBool copyOld=FALSE );
virtual WBool Clear();
virtual WBool AcquireDataResponsibility();
virtual WBool DetachReferences( WDataValue *exceptFor );
virtual int operator==( const WDataValueReference & other ) const;
virtual int operator<( const WDataValueReference & other ) const;
virtual int operator<=( const WDataValueReference & other ) const;
virtual int operator!=( const WDataValueReference & other ) const;
virtual int operator>( const WDataValueReference & other ) const;
virtual int operator>=( const WDataValueReference & other ) const;
WColumnDataType GetColumnType() const { return _columnType; }
WBool SetColumnType( WColumnDataType t ) { _columnType = t; return TRUE; }
virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
// The following methods all have default implementations
// that return an error. Override as appropriate.
WDV_CONVERSION_METHODS
protected:
enum {
WDVSLong = 0x01,
WDVULong = 0x02,
WDVDouble = 0x04,
WDVChar = 0x08
};
WDataValueReference **GetRef( WDataValue *val ) const;
wllist_header _refList;
WColumnDataType _columnType;
};
//
// WDVFloatRef
//
class WCMCLASS WDVFloatRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVFloatRef( const WDVFloatRef & );
WDVFloatRef & operator=( const WDVFloatRef & );
protected:
WDVFloatRef();
public:
~WDVFloatRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WFloat _float;
WFloat *_pFloat;
};
//
// WDVDoubleRef
//
class WCMCLASS WDVDoubleRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVDoubleRef( const WDVDoubleRef & );
WDVDoubleRef & operator=( const WDVDoubleRef & );
protected:
WDVDoubleRef();
public:
~WDVDoubleRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WDouble _double;
WDouble *_pDouble;
};
//
// WDVCharRef
//
class WCMCLASS WDVCharRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVCharRef( const WDVCharRef & );
WDVCharRef & operator=( const WDVCharRef & );
protected:
WDVCharRef();
public:
~WDVCharRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual WBool SetSize( WInt newSize );
virtual WInt GetLength() const;
virtual WBool SetLength( WInt newLength );
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
virtual WBool AcquireDataResponsibility();
virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
WDV_CONVERSION_METHODS
protected:
#define WDVCharBufSize 128
WAnsiChar *_pString;
WAnsiChar *_string;
WULong _size; // including nullchar
WAnsiChar _defaultBuffer[ WDVCharBufSize ];
};
//
// WDVBinaryRef
//
class WCMCLASS WDVBinaryRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVBinaryRef( const WDVBinaryRef & );
WDVBinaryRef & operator=( const WDVBinaryRef & );
protected:
WDVBinaryRef();
public:
~WDVBinaryRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual WBool SetSize( WInt newSize );
virtual WInt GetLength() const;
virtual WBool SetLength( WInt newLength );
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
virtual WBool AcquireDataResponsibility();
WDV_CONVERSION_METHODS
protected:
WByte *_pData;
WByte *_data;
WULong _size;
WULong _length;
};
//
// WDVSLongRef
//
class WCMCLASS WDVSLongRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVSLongRef( const WDVSLongRef & );
WDVSLongRef & operator=( const WDVSLongRef & );
protected:
WDVSLongRef();
public:
~WDVSLongRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WLong _long;
WLong *_pLong;
};
//
// WDVULongRef
//
class WCMCLASS WDVULongRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVULongRef( const WDVULongRef & );
WDVULongRef & operator=( const WDVULongRef & );
protected:
WDVULongRef();
public:
~WDVULongRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WULong _ulong;
WULong *_pULong;
};
//
// WDVSShortRef
//
class WCMCLASS WDVSShortRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVSShortRef( const WDVSShortRef & );
WDVSShortRef & operator=( const WDVSShortRef & );
protected:
WDVSShortRef();
public:
~WDVSShortRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WShort _short;
WShort *_pShort;
};
//
// WDVSTinyIntRef
//
class WCMCLASS WDVSTinyIntRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVSTinyIntRef( const WDVSTinyIntRef & );
WDVSTinyIntRef & operator=( const WDVSTinyIntRef & );
protected:
WDVSTinyIntRef();
public:
~WDVSTinyIntRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
signed char _schar;
signed char *_pSChar;
};
//
// WDVUShortRef
//
class WCMCLASS WDVUShortRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVUShortRef( const WDVUShortRef & );
WDVUShortRef & operator=( const WDVUShortRef & );
protected:
WDVUShortRef();
public:
~WDVUShortRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
WUShort _ushort;
WUShort *_pUShort;
};
//
// WDVUTinyIntRef
//
class WCMCLASS WDVUTinyIntRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVUTinyIntRef( const WDVUTinyIntRef & );
WDVUTinyIntRef & operator=( const WDVUTinyIntRef & );
protected:
WDVUTinyIntRef();
public:
~WDVUTinyIntRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
WDV_CONVERSION_METHODS
protected:
unsigned char _uchar;
unsigned char *_pUChar;
};
//
// WDVBitRef
//
class WCMCLASS WDVBitRef : public WDVUTinyIntRef {
friend class WDVFactory;
private:
WDVBitRef( const WDVBitRef & );
WDVBitRef & operator=( const WDVBitRef & );
protected:
WDVBitRef();
public:
~WDVBitRef();
virtual WNativeDataType GetType() const;
};
//
// WDVDateRef
//
class WCMCLASS WDVDateRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVDateRef( const WDVDateRef & );
WDVDateRef & operator=( const WDVDateRef & );
protected:
WDVDateRef();
public:
~WDVDateRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
virtual WBool CopyInto( const WDataValueReference & ref );
virtual WBool Clear();
virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
virtual WBool SetCHAR( const WString & string, WDataValue *val );
virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
protected:
DATE_STRUCT _date;
DATE_STRUCT *_pDate;
};
//
// WDVTimeRef
//
class WCMCLASS WDVTimeRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVTimeRef( const WDVTimeRef & );
WDVTimeRef & operator=( const WDVTimeRef & );
protected:
WDVTimeRef();
public:
~WDVTimeRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
virtual WBool CopyInto( const WDataValueReference & ref );
virtual WBool Clear();
virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
virtual WBool SetCHAR( const WString & string, WDataValue *val );
virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
protected:
TIME_STRUCT _time;
TIME_STRUCT *_pTime;
};
//
// WDVTimeStampRef
//
class WCMCLASS WDVTimeStampRef : public WDataValueReference {
friend class WDVFactory;
private:
WDVTimeStampRef( const WDVTimeStampRef & );
WDVTimeStampRef & operator=( const WDVTimeStampRef & );
protected:
WDVTimeStampRef();
public:
~WDVTimeStampRef();
virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
WDataValue *master=NULL ) const;
virtual WNativeDataType GetType() const;
virtual WInt GetSize() const;
virtual void *GetData() const;
virtual WBool SetData( void *newData, WBool copyOld=FALSE );
virtual WBool CopyInto( const WDataValueReference & ref );
virtual WBool Clear();
virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
virtual WBool SetCHAR( const WString & string, WDataValue *val );
virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
protected:
TIMESTAMP_STRUCT _timeStamp;
TIMESTAMP_STRUCT *_pTimeStamp;
};
extern template WVector<WDataValueReference>;
//
// WDVFactory
//
class WCMCLASS WDVFactory : public WObject {
protected:
WDVFactory();
~WDVFactory();
void Init();
public:
static WDVFactory *GetFactoryObject();
static WDataValueReference *Allocate( WNativeDataType type,
WDataValueReference *ref=NULL,
WDataValue *master=NULL );
static WDataValueReference *Allocate( const WChar *name,
WDataValueReference *ref=NULL,
WDataValue *master=NULL );
static WBool AddPrototype( WDataValueReference *prototype );
protected:
WVector<WDataValueReference> _prototypes;
WBool _init;
private:
static WDVFactory *_theObject;
};
#endif