summaryrefslogtreecommitdiff
path: root/store/source/storbios.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'store/source/storbios.hxx')
-rw-r--r--store/source/storbios.hxx267
1 files changed, 267 insertions, 0 deletions
diff --git a/store/source/storbios.hxx b/store/source/storbios.hxx
new file mode 100644
index 000000000000..439089d41bd6
--- /dev/null
+++ b/store/source/storbios.hxx
@@ -0,0 +1,267 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _STORE_STORBIOS_HXX_
+#define _STORE_STORBIOS_HXX_
+
+#include "sal/types.h"
+#include "rtl/ref.hxx"
+#include "osl/mutex.hxx"
+
+#include "store/types.h"
+#include "object.hxx"
+#include "lockbyte.hxx"
+#include "storbase.hxx"
+#include "storcach.hxx"
+
+/*========================================================================
+ *
+ * OStorePageBIOS.
+ *
+ *======================================================================*/
+namespace store
+{
+
+struct SuperBlockPage;
+
+class OStorePageBIOS : public store::OStoreObject
+{
+public:
+ /** Construction.
+ */
+ OStorePageBIOS (void);
+
+ /** Conversion into Mutex&
+ */
+ inline operator osl::Mutex& (void) const;
+
+ /** Initialization.
+ * @param pLockBytes [in]
+ * @param eAccessMode [in]
+ * @param rnPageSize [inout]
+ * @return store_E_None upon success
+ */
+ virtual storeError initialize (
+ ILockBytes * pLockBytes,
+ storeAccessMode eAccessMode,
+ sal_uInt16 & rnPageSize);
+
+ rtl::Reference< PageData::Allocator > & allocator()
+ {
+ return m_xAllocator;
+ }
+
+ /** read.
+ */
+ storeError read (
+ sal_uInt32 nAddr, void *pData, sal_uInt32 nSize);
+
+ /** write.
+ */
+ storeError write (
+ sal_uInt32 nAddr, const void *pData, sal_uInt32 nSize);
+
+ /** isWriteable.
+ */
+ inline bool isWriteable (void) const;
+
+ /** isValid.
+ */
+ inline sal_Bool isValid (void) const;
+
+ /** Page Access.
+ */
+ storeError acquirePage (
+ const OStorePageDescriptor& rDescr, storeAccessMode eMode);
+
+ storeError releasePage (
+ const OStorePageDescriptor& rDescr, storeAccessMode eMode);
+
+ sal_uInt32 getRefererCount (void);
+
+ /** Page Allocation.
+ */
+ enum Allocation
+ {
+ ALLOCATE_FIRST = 0,
+ ALLOCATE_BEST = 1,
+ ALLOCATE_EOF = 2
+ };
+
+ storeError allocate (
+ OStorePageObject& rPage, Allocation eAllocation = ALLOCATE_FIRST);
+
+ storeError free (sal_uInt32 nAddr);
+
+ /** Page I/O.
+ */
+ storeError loadObjectAt (
+ OStorePageObject& rPage, sal_uInt32 nAddr);
+
+ storeError saveObjectAt (
+ OStorePageObject& rPage, sal_uInt32 nAddr);
+
+ /** close.
+ * @return store_E_None upon success.
+ */
+ storeError close (void);
+
+ /** flush.
+ * @return store_E_None upon success.
+ */
+ storeError flush (void);
+
+ /** size.
+ */
+ storeError size (sal_uInt32 &rnSize);
+
+ /** ScanContext.
+ */
+ struct ScanContext
+ {
+ /** Representation.
+ */
+ OStorePageDescriptor m_aDescr;
+ sal_uInt32 m_nSize;
+ sal_uInt32 m_nMagic;
+
+ /** Construction.
+ */
+ inline ScanContext (void);
+
+ /** isValid.
+ */
+ inline bool isValid (void) const;
+ };
+
+ /** scanBegin.
+ */
+ storeError scanBegin (
+ ScanContext &rCtx,
+ sal_uInt32 nMagic = 0);
+
+ /** scanNext.
+ */
+ storeError scanNext (
+ ScanContext &rCtx,
+ OStorePageObject &rPage);
+
+protected:
+ /** Destruction (OReference).
+ */
+ virtual ~OStorePageBIOS (void);
+
+private:
+ /** Representation.
+ */
+ rtl::Reference<ILockBytes> m_xLockBytes;
+ osl::Mutex m_aMutex;
+
+ SuperBlockPage * m_pSuper;
+
+ bool m_bWriteable;
+
+ rtl::Reference< PageData::Allocator > m_xAllocator;
+ rtl::Reference< PageCache > m_xCache;
+
+ /** Page Access (control).
+ */
+public:
+ struct Ace
+ {
+ Ace * m_next;
+ Ace * m_prev;
+
+ sal_uInt32 m_addr;
+ sal_uInt32 m_used;
+
+ Ace();
+ ~Ace();
+
+ static int SAL_CALL constructor (void * obj, void * arg);
+
+ static Ace * find (Ace * head, sal_uInt32 addr);
+ static void insert (Ace * head, Ace * entry);
+ };
+
+private:
+ Ace m_ace_head;
+
+ class AceCache;
+
+ /** Initialization.
+ */
+ storeError initialize_Impl (
+ ILockBytes * pLockBytes,
+ storeAccessMode eAccessMode,
+ sal_uInt16 & rnPageSize);
+ void cleanup_Impl();
+
+ /** Page Maintenance.
+ */
+ storeError loadObjectAt_Impl (
+ OStorePageObject & rPage, sal_uInt32 nAddr);
+ storeError saveObjectAt_Impl (
+ OStorePageObject & rPage, sal_uInt32 nAddr);
+
+ /** Not implemented.
+ */
+ OStorePageBIOS (const OStorePageBIOS&);
+ OStorePageBIOS& operator= (const OStorePageBIOS&);
+};
+
+inline OStorePageBIOS::operator osl::Mutex& (void) const
+{
+ return (osl::Mutex&)m_aMutex;
+}
+inline bool OStorePageBIOS::isWriteable (void) const
+{
+ return m_bWriteable;
+}
+inline sal_Bool OStorePageBIOS::isValid (void) const
+{
+ return m_xLockBytes.is();
+}
+
+inline OStorePageBIOS::ScanContext::ScanContext (void)
+ : m_aDescr (0, 0, 0), m_nSize (0), m_nMagic (0)
+{
+}
+inline bool OStorePageBIOS::ScanContext::isValid (void) const
+{
+ return (m_aDescr.m_nAddr < m_nSize);
+}
+
+/*========================================================================
+ *
+ * The End.
+ *
+ *======================================================================*/
+
+} // namespace store
+
+#endif /* !_STORE_STORBIOS_HXX_ */