Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #ifndef INCLUDED_STORE_SOURCE_LOCKBYTE_HXX
21 : #define INCLUDED_STORE_SOURCE_LOCKBYTE_HXX
22 :
23 : #include "sal/types.h"
24 :
25 : #include "rtl/ref.hxx"
26 : #include "rtl/ustring.h"
27 : #include "salhelper/simplereferenceobject.hxx"
28 :
29 : #include "store/types.h"
30 : #include "storbase.hxx"
31 :
32 : namespace store
33 : {
34 :
35 : /*========================================================================
36 : *
37 : * ILockBytes interface.
38 : *
39 : *======================================================================*/
40 300 : class ILockBytes : public virtual salhelper::SimpleReferenceObject
41 : {
42 : public:
43 : /**
44 : @param rxAllocator [out]
45 : @param nPageSize [in]
46 : */
47 : storeError initialize (
48 : rtl::Reference< PageData::Allocator > & rxAllocator,
49 : sal_uInt16 nPageSize);
50 :
51 : /**
52 : @param rPage [out]
53 : @param nOffset [in]
54 : */
55 : storeError readPageAt (
56 : PageHolder & rPage,
57 : sal_uInt32 nOffset);
58 :
59 : /**
60 : @param rPage [in]
61 : @param nOffset [in]
62 : */
63 : storeError writePageAt (
64 : PageHolder const & rPage,
65 : sal_uInt32 nOffset);
66 :
67 : /**
68 : @param nOffset [in]
69 : @param pBuffer [out]
70 : @param nBytes [in]
71 : @return store_E_None upon success
72 : */
73 : storeError readAt (
74 : sal_uInt32 nOffset,
75 : void *pBuffer,
76 : sal_uInt32 nBytes);
77 :
78 : /**
79 : @param nOffset [in]
80 : @param pBuffer [in]
81 : @param nBytes [in]
82 : @return store_E_None upon success
83 : */
84 : storeError writeAt (
85 : sal_uInt32 nOffset,
86 : const void *pBuffer,
87 : sal_uInt32 nBytes);
88 :
89 : /**
90 : @param rnSize [out]
91 : @return store_E_None upon success
92 : */
93 : storeError getSize (sal_uInt32 & rnSize);
94 :
95 : /**
96 : @param nSize [in]
97 : @return store_E_None upon success
98 : */
99 : storeError setSize (sal_uInt32 nSize);
100 :
101 : /**
102 : @return store_E_None upon success
103 : */
104 : storeError flush();
105 :
106 : protected:
107 296 : virtual ~ILockBytes() {}
108 :
109 : private:
110 : /** Implementation (abstract).
111 : */
112 : virtual storeError initialize_Impl (
113 : rtl::Reference< PageData::Allocator > & rxAllocator,
114 : sal_uInt16 nPageSize) = 0;
115 :
116 : virtual storeError readPageAt_Impl (
117 : PageHolder & rPage,
118 : sal_uInt32 nOffset) = 0;
119 :
120 : virtual storeError writePageAt_Impl (
121 : PageHolder const & rPage,
122 : sal_uInt32 nOffset) = 0;
123 :
124 : virtual storeError readAt_Impl (
125 : sal_uInt32 nOffset,
126 : void *pBuffer,
127 : sal_uInt32 nBytes) = 0;
128 :
129 : virtual storeError writeAt_Impl (
130 : sal_uInt32 nOffset,
131 : const void *pBuffer,
132 : sal_uInt32 nBytes) = 0;
133 :
134 : virtual storeError getSize_Impl (
135 : sal_uInt32 & rnSize) = 0;
136 :
137 : virtual storeError setSize_Impl (
138 : sal_uInt32 nSize) = 0;
139 :
140 : virtual storeError flush_Impl() = 0;
141 : };
142 :
143 : /*========================================================================
144 : *
145 : * ILockBytes factories.
146 : *
147 : *======================================================================*/
148 :
149 : storeError
150 : FileLockBytes_createInstance (
151 : rtl::Reference< store::ILockBytes > & rxLockBytes,
152 : rtl_uString * pFilename,
153 : storeAccessMode eAccessMode
154 : );
155 :
156 : storeError
157 : MemoryLockBytes_createInstance (
158 : rtl::Reference< store::ILockBytes > & rxLockBytes
159 : );
160 :
161 : /*========================================================================
162 : *
163 : * The End.
164 : *
165 : *======================================================================*/
166 :
167 : } // namespace store
168 :
169 : #endif // INCLUDED_STORE_SOURCE_LOCKBYTE_HXX
170 :
171 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|