1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _STORE_STORLCKB_HXX_ 29 #define _STORE_STORLCKB_HXX_ "$Revision: 1.6.8.1 $" 30 31 #include "sal/types.h" 32 33 #include "rtl/ustring.h" 34 #include "rtl/ref.hxx" 35 36 #include "object.hxx" 37 #include "storbase.hxx" 38 #include "storpage.hxx" 39 40 namespace store 41 { 42 43 struct OStoreDataPageData; 44 struct OStoreDirectoryPageData; 45 46 /*======================================================================== 47 * 48 * OStoreLockBytes interface. 49 * 50 *======================================================================*/ 51 class OStoreLockBytes : public store::OStoreObject 52 { 53 public: 54 /** Construction. 55 */ 56 OStoreLockBytes (void); 57 58 /** create (two-phase construction). 59 * @param pManager [in] 60 * @param pPath [in] 61 * @param pName [in] 62 * @param eMode [in] 63 * @return store_E_None upon success 64 */ 65 storeError create ( 66 OStorePageManager *pManager, 67 rtl_String *pPath, 68 rtl_String *pName, 69 storeAccessMode eAccessMode); 70 71 /** Read at Offset into Buffer. 72 * @param nOffset [in] 73 * @param pBuffer [out] 74 * @param nBytes [in] 75 * @param rnDone [out] 76 * @return store_E_None upon success 77 */ 78 storeError readAt ( 79 sal_uInt32 nOffset, 80 void *pBuffer, 81 sal_uInt32 nBytes, 82 sal_uInt32 &rnDone); 83 84 /** Write at Offset from Buffer. 85 * @param nOffset [in] 86 * @param pBuffer [in] 87 * @param nBytes [in] 88 * @param rnDone [out] 89 * @return store_E_None upon success 90 */ 91 storeError writeAt ( 92 sal_uInt32 nOffset, 93 const void *pBuffer, 94 sal_uInt32 nBytes, 95 sal_uInt32 &rnDone); 96 97 /** flush. 98 * @return store_E_None upon success 99 */ 100 storeError flush (void); 101 102 /** setSize. 103 * @param nSize [in] 104 * @return store_E_None upon success 105 */ 106 storeError setSize (sal_uInt32 nSize); 107 108 /** stat. 109 * @paran rnSize [out] 110 * @return store_E_None upon success 111 */ 112 storeError stat (sal_uInt32 &rnSize); 113 114 /** IStoreHandle. 115 */ 116 virtual sal_Bool SAL_CALL isKindOf (sal_uInt32 nMagic); 117 118 protected: 119 /** Destruction (OReference). 120 */ 121 virtual ~OStoreLockBytes (void); 122 123 private: 124 /** IStoreHandle TypeId. 125 */ 126 static const sal_uInt32 m_nTypeId; 127 128 /** IStoreHandle query() template specialization. 129 */ 130 friend OStoreLockBytes* 131 SAL_CALL query<> (IStoreHandle *pHandle, OStoreLockBytes*); 132 133 /** Representation. 134 */ 135 rtl::Reference<OStorePageManager> m_xManager; 136 137 typedef OStoreDataPageData data; 138 typedef OStoreDirectoryPageData inode; 139 140 typedef PageHolderObject< inode > inode_holder_type; 141 inode_holder_type m_xNode; 142 143 bool m_bWriteable; 144 145 /** Not implemented. 146 */ 147 OStoreLockBytes (const OStoreLockBytes&); 148 OStoreLockBytes& operator= (const OStoreLockBytes&); 149 }; 150 151 template<> inline OStoreLockBytes* 152 SAL_CALL query (IStoreHandle *pHandle, OStoreLockBytes*) 153 { 154 if (pHandle && pHandle->isKindOf (OStoreLockBytes::m_nTypeId)) 155 { 156 // Handle is kind of OStoreLockBytes. 157 return static_cast<OStoreLockBytes*>(pHandle); 158 } 159 return 0; 160 } 161 162 /*======================================================================== 163 * 164 * The End. 165 * 166 *======================================================================*/ 167 168 } // namespace store 169 170 #endif /* !_STORE_STORLCKB_HXX_ */ 171 172