diff options
Diffstat (limited to 'akregator/src/mk4storage/metakit/src/handler.h')
-rw-r--r-- | akregator/src/mk4storage/metakit/src/handler.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/akregator/src/mk4storage/metakit/src/handler.h b/akregator/src/mk4storage/metakit/src/handler.h new file mode 100644 index 000000000..6003f625d --- /dev/null +++ b/akregator/src/mk4storage/metakit/src/handler.h @@ -0,0 +1,150 @@ +// handler.h -- +// $Id$ +// This is part of Metakit, the homepage is http://www.equi4.com/metakit/ + +/** @file + * Definition of the main handler classes + */ + +#ifndef __HANDLER_H__ +#define __HANDLER_H__ + +///////////////////////////////////////////////////////////////////////////// +// Declarations in this file + + class c4_Handler; // data representation handler + +// class c4_Sequence; + class c4_HandlerSeq; // a sequence built from handlers + + class c4_Column; // not defined here + class c4_Field; // not defined here + class c4_Persist; // not defined here + class c4_SaveContext; // not defined here + +///////////////////////////////////////////////////////////////////////////// + +class c4_Handler +{ + c4_Property _property; + +public: + c4_Handler (const c4_Property& _prop); + //: Constructor (this is an abstract base class). + virtual ~c4_Handler (); + + virtual void Define(int, const t4_byte**); + //: Called when the corresponding table has been fully defined. + virtual void FlipBytes(); + //: Called to reverse the internal byte order of foreign data. + virtual void Commit(c4_SaveContext& ar_); + //: Commit the associated column(s) to file. + virtual void OldDefine(char, c4_Persist&); + + const c4_Property& Property() const; + //: Returns the property associated with this handler. + int PropId() const; + //: Returns the id of the property associated with this handler. + + void ClearBytes(c4_Bytes& buf_) const; + //: Returns the default value for items of this type. + + virtual int ItemSize(int index_) = 0; + //: Return width of specified data item. + void GetBytes(int index_, c4_Bytes& buf_, bool copySmall_ =false); + //: Used for backward compatibility, should probably be replaced. + virtual const void* Get(int index_, int& length_) = 0; + //: Retrieves the data item at the specified index. + virtual void Set(int index_, const c4_Bytes& buf_) = 0; + //: Stores a new data item at the specified index. + + int Compare(int index_, const c4_Bytes& buf_); + //: Compares an entry with a specified data item. + + virtual void Insert(int index_, const c4_Bytes& buf_, int count_) = 0; + //: Inserts 1 or more data items at the specified index. + virtual void Remove(int index_, int count_) = 0; + //: Removes 1 or more data items at the specified index. + void Move(int from_, int to_); + //: Move a data item to another position. + + virtual c4_Column* GetNthMemoCol(int index_, bool alloc_ =false); + //: Special access to underlying data of memo entries + + virtual bool IsPersistent() const; + //: True if this handler might do I/O to satisfy fetches + + virtual void Unmapped(); + //: Make sure this handler stops using file mappings + + virtual bool HasSubview(int index_); + //: True if this subview has materialized into an object +}; + +///////////////////////////////////////////////////////////////////////////// + +class c4_HandlerSeq : public c4_Sequence +{ + c4_PtrArray _handlers; + c4_Persist* _persist; + c4_Field* _field; + c4_HandlerSeq* _parent; + int _numRows; + +public: + c4_HandlerSeq (c4_Persist*); + c4_HandlerSeq (c4_HandlerSeq& owner_, c4_Handler* handler_); + + virtual int NumRows() const; + virtual void SetNumRows(int); + + virtual int NumHandlers() const; + virtual c4_Handler& NthHandler(int) const; + virtual const c4_Sequence* HandlerContext(int) const; + virtual int AddHandler(c4_Handler*); + + void DefineRoot(); + void Restructure(c4_Field&, bool remove_); + void DetachFromParent(); + void DetachFromStorage(bool full_); + void DetermineSpaceUsage(); + + c4_Field& Definition() const; + const char* Description(); + c4_HandlerSeq& Parent() const; + virtual c4_Persist* Persist() const; + + c4_Field& Field(int) const; + int NumFields() const; + char ColumnType(int index_) const; + bool IsNested(int) const; + + void Prepare(const t4_byte** ptr_, bool selfDesc_); + void OldPrepare(); + + void FlipAllBytes(); + void ExchangeEntries(int srcPos_, c4_HandlerSeq& dst_, int dstPos_); + + c4_HandlerSeq& SubEntry(int, int) const; + + c4_Field* FindField(const c4_Handler* handler_); + + void UnmappedAll(); + + static void BuildMeta(int, int, c4_View&, const c4_Field&); + +protected: + virtual c4_Handler* CreateHandler(const c4_Property&); + + virtual ~c4_HandlerSeq (); +}; + +///////////////////////////////////////////////////////////////////////////// + +#if q4_INLINE +#include "handler.inl" +#endif + +///////////////////////////////////////////////////////////////////////////// + +#endif |