summaryrefslogtreecommitdiffstats
path: root/akregator/src/mk4storage/metakit/src/handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/mk4storage/metakit/src/handler.h')
-rw-r--r--akregator/src/mk4storage/metakit/src/handler.h150
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