xref: /trunk/main/store/source/lockbyte.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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_LOCKBYTE_HXX_
29 #define _STORE_LOCKBYTE_HXX_
30 
31 #ifndef _SAL_TYPES_H_
32 #include "sal/types.h"
33 #endif
34 
35 #ifndef _RTL_REF_HXX_
36 #include "rtl/ref.hxx"
37 #endif
38 #ifndef _RTL_USTRING_H_
39 #include "rtl/ustring.h"
40 #endif
41 
42 #ifndef _STORE_TYPES_H_
43 #include "store/types.h"
44 #endif
45 #ifndef _STORE_STORBASE_HXX_
46 #include "storbase.hxx"
47 #endif
48 
49 namespace store
50 {
51 
52 /*========================================================================
53  *
54  * ILockBytes interface.
55  *
56  *======================================================================*/
57 class ILockBytes : public rtl::IReference
58 {
59 public:
60     /**
61         @param  rxAllocator [out]
62         @param  nPageSize [in]
63     */
64     storeError initialize (
65         rtl::Reference< PageData::Allocator > & rxAllocator,
66         sal_uInt16                              nPageSize);
67 
68     /**
69         @param  rPage [out]
70         @param  nOffset [in]
71      */
72     storeError readPageAt (
73         PageHolder & rPage,
74         sal_uInt32   nOffset);
75 
76     /**
77         @param  rPage [in]
78         @param  nOffset [in]
79      */
80     storeError writePageAt (
81         PageHolder const & rPage,
82         sal_uInt32         nOffset);
83 
84     /**
85         @param  nOffset [in]
86         @param  pBuffer [out]
87         @param  nBytes [in]
88         @return store_E_None upon success
89      */
90     storeError readAt (
91         sal_uInt32  nOffset,
92         void       *pBuffer,
93         sal_uInt32  nBytes);
94 
95     /**
96         @param  nOffset [in]
97         @param  pBuffer [in]
98         @param  nBytes [in]
99         @return store_E_None upon success
100      */
101     storeError writeAt (
102         sal_uInt32  nOffset,
103         const void *pBuffer,
104         sal_uInt32  nBytes);
105 
106     /**
107         @param  rnSize [out]
108         @return store_E_None upon success
109      */
110     storeError getSize (sal_uInt32 & rnSize);
111 
112     /**
113         @param  nSize [in]
114         @return store_E_None upon success
115      */
116     storeError setSize (sal_uInt32 nSize);
117 
118     /**
119         @return store_E_None upon success
120      */
121     storeError flush();
122 
123 private:
124     /** Implementation (abstract).
125      */
126     virtual storeError initialize_Impl (
127         rtl::Reference< PageData::Allocator > & rxAllocator,
128         sal_uInt16                              nPageSize) = 0;
129 
130     virtual storeError readPageAt_Impl (
131         PageHolder & rPage,
132         sal_uInt32   nOffset) = 0;
133 
134     virtual storeError writePageAt_Impl (
135         PageHolder const & rPage,
136         sal_uInt32         nOffset) = 0;
137 
138     virtual storeError readAt_Impl (
139         sal_uInt32  nOffset,
140         void       *pBuffer,
141         sal_uInt32  nBytes) = 0;
142 
143     virtual storeError writeAt_Impl (
144         sal_uInt32  nOffset,
145         const void *pBuffer,
146         sal_uInt32  nBytes) = 0;
147 
148     virtual storeError getSize_Impl (
149         sal_uInt32 & rnSize) = 0;
150 
151     virtual storeError setSize_Impl (
152         sal_uInt32 nSize) = 0;
153 
154     virtual storeError flush_Impl() = 0;
155 };
156 
157 /*========================================================================
158  *
159  * ILockBytes factories.
160  *
161  *======================================================================*/
162 
163 storeError
164 FileLockBytes_createInstance (
165   rtl::Reference< store::ILockBytes > & rxLockBytes,
166   rtl_uString *   pFilename,
167   storeAccessMode eAccessMode
168 );
169 
170 storeError
171 MemoryLockBytes_createInstance (
172   rtl::Reference< store::ILockBytes > & rxLockBytes
173 );
174 
175 /*========================================================================
176  *
177  * The End.
178  *
179  *======================================================================*/
180 
181 } // namespace store
182 
183 #endif /* !_STORE_LOCKBYTE_HXX_ */
184 
185