bump product version to 4.2.0.1
[LibreOffice.git] / include / store / store.hxx
bloba7eb1e330a848fce091acbaf4bba8522ce356b73
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_STORE_STORE_HXX
21 #define INCLUDED_STORE_STORE_HXX
23 #include <sal/types.h>
24 #include <rtl/ustring.hxx>
25 #include <store/store.h>
27 namespace store
30 /*========================================================================
32 * OStoreStream interface.
34 *======================================================================*/
35 class OStoreStream
37 public:
38 /** Construction.
40 inline OStoreStream (void) SAL_THROW(())
41 : m_hImpl (0)
44 /** Destruction.
46 inline ~OStoreStream (void) SAL_THROW(())
48 if (m_hImpl)
49 (void) store_releaseHandle (m_hImpl);
52 /** Copy construction.
54 inline OStoreStream (OStoreStream const & rhs) SAL_THROW(())
55 : m_hImpl (rhs.m_hImpl)
57 if (m_hImpl)
58 (void) store_acquireHandle (m_hImpl);
61 /** Assignment.
63 inline OStoreStream & operator= (OStoreStream const & rhs) SAL_THROW(())
65 if (rhs.m_hImpl)
66 (void) store_acquireHandle (rhs.m_hImpl);
67 if (m_hImpl)
68 (void) store_releaseHandle (m_hImpl);
69 m_hImpl = rhs.m_hImpl;
70 return *this;
73 /** Construction from Stream Handle.
75 inline explicit OStoreStream (storeStreamHandle Handle) SAL_THROW(())
76 : m_hImpl (Handle)
78 if (m_hImpl)
79 (void) store_acquireHandle (m_hImpl);
82 /** Conversion into Stream Handle.
84 inline operator storeStreamHandle (void) const SAL_THROW(())
86 return m_hImpl;
89 /** Check for a valid Stream Handle.
90 @return sal_True if valid, sal_False otherwise.
92 inline bool isValid (void) const SAL_THROW(())
94 return (m_hImpl != 0);
97 /** Open the stream.
98 @see store_openStream()
100 inline storeError create (
101 storeFileHandle hFile,
102 OUString const & rPath,
103 OUString const & rName,
104 storeAccessMode eMode) SAL_THROW(())
106 if (m_hImpl)
108 (void) store_releaseHandle (m_hImpl);
109 m_hImpl = 0;
111 return store_openStream (hFile, rPath.pData, rName.pData, eMode, &m_hImpl);
114 /** Close the stream.
115 @see store_closeStream()
117 inline void close (void) SAL_THROW(())
119 if (m_hImpl)
121 (void) store_closeStream (m_hImpl);
122 m_hImpl = 0;
126 /** Read from the stream.
127 @see store_readStream()
129 inline storeError readAt (
130 sal_uInt32 nOffset,
131 void * pBuffer,
132 sal_uInt32 nBytes,
133 sal_uInt32 & rnDone) SAL_THROW(())
135 if (!m_hImpl)
136 return store_E_InvalidHandle;
138 return store_readStream (m_hImpl, nOffset, pBuffer, nBytes, &rnDone);
141 /** Write to the stream.
142 @see store_writeStream()
144 inline storeError writeAt (
145 sal_uInt32 nOffset,
146 void const * pBuffer,
147 sal_uInt32 nBytes,
148 sal_uInt32 & rnDone) SAL_THROW(())
150 if (!m_hImpl)
151 return store_E_InvalidHandle;
153 return store_writeStream (m_hImpl, nOffset, pBuffer, nBytes, &rnDone);
156 /** Flush the stream.
157 @see store_flushStream()
159 inline storeError flush (void) const SAL_THROW(())
161 if (!m_hImpl)
162 return store_E_InvalidHandle;
164 return store_flushStream (m_hImpl);
167 /** Get the stream size.
168 @see store_getStreamSize()
170 inline storeError getSize (sal_uInt32 & rnSize) const SAL_THROW(())
172 if (!m_hImpl)
173 return store_E_InvalidHandle;
175 return store_getStreamSize (m_hImpl, &rnSize);
178 /** Set the stream size.
179 @see store_setStreamSize()
181 inline storeError setSize (sal_uInt32 nSize) SAL_THROW(())
183 if (!m_hImpl)
184 return store_E_InvalidHandle;
186 return store_setStreamSize (m_hImpl, nSize);
189 private:
190 /** Representation.
192 storeStreamHandle m_hImpl;
195 /*========================================================================
197 * OStoreDirectory interface.
199 *======================================================================*/
200 class OStoreDirectory
202 public:
203 /** Construction.
205 inline OStoreDirectory (void) SAL_THROW(())
206 : m_hImpl (0)
209 /** Destruction.
211 inline ~OStoreDirectory (void) SAL_THROW(())
213 if (m_hImpl)
214 (void) store_releaseHandle (m_hImpl);
217 /** Copy construction.
219 inline OStoreDirectory (OStoreDirectory const & rhs) SAL_THROW(())
220 : m_hImpl (rhs.m_hImpl)
222 if (m_hImpl)
223 (void) store_acquireHandle (m_hImpl);
226 /** Assignment.
228 inline OStoreDirectory & operator= (OStoreDirectory const & rhs) SAL_THROW(())
230 if (rhs.m_hImpl)
231 (void) store_acquireHandle (rhs.m_hImpl);
232 if (m_hImpl)
233 (void) store_releaseHandle (m_hImpl);
234 m_hImpl = rhs.m_hImpl;
235 return *this;
238 /** Construction from Directory Handle.
240 inline explicit OStoreDirectory (storeDirectoryHandle Handle) SAL_THROW(())
241 : m_hImpl (Handle)
243 if (m_hImpl)
244 (void) store_acquireHandle (m_hImpl);
247 /** Conversion into Directory Handle.
249 inline operator storeDirectoryHandle(void) const SAL_THROW(())
251 return m_hImpl;
254 /** Check for a valid Directory Handle.
255 @return sal_True if valid, sal_False otherwise.
257 inline bool isValid (void) const SAL_THROW(())
259 return (m_hImpl != 0);
262 /** Open the directory.
263 @see store_openDirectory()
265 inline storeError create (
266 storeFileHandle hFile,
267 OUString const & rPath,
268 OUString const & rName,
269 storeAccessMode eMode) SAL_THROW(())
271 if (m_hImpl)
273 (void) store_releaseHandle (m_hImpl);
274 m_hImpl = 0;
276 return store_openDirectory (hFile, rPath.pData, rName.pData, eMode, &m_hImpl);
279 /** Close the directory.
280 @see store_closeDirectory()
282 inline void close (void) SAL_THROW(())
284 if (m_hImpl)
286 (void) store_closeDirectory (m_hImpl);
287 m_hImpl = 0;
291 /** Directory iterator type.
292 @see first()
293 @see next()
295 typedef storeFindData iterator;
297 /** Find first directory entry.
298 @see store_findFirst()
300 inline storeError first (iterator& it) SAL_THROW(())
302 if (!m_hImpl)
303 return store_E_InvalidHandle;
305 return store_findFirst (m_hImpl, &it);
308 /** Find next directory entry.
309 @see store_findNext()
311 inline storeError next (iterator& it) SAL_THROW(())
313 if (!m_hImpl)
314 return store_E_InvalidHandle;
316 return store_findNext (m_hImpl, &it);
319 /** Directory traversal helper.
320 @see travel()
322 class traveller
324 public:
325 /** Directory traversal callback.
326 @param it [in] current directory entry.
327 @return sal_True to continue iteration, sal_False to stop.
329 virtual sal_Bool visit (const iterator& it) = 0;
331 protected:
332 ~traveller() {}
335 /** Directory traversal.
336 @see store_findFirst()
337 @see store_findNext()
339 @param rTraveller [in] the traversal callback.
340 @return store_E_NoMoreFiles upon end of iteration.
342 inline storeError travel (traveller & rTraveller) const
344 storeError eErrCode = store_E_InvalidHandle;
345 if (m_hImpl)
347 iterator it;
348 eErrCode = store_findFirst (m_hImpl, &it);
349 while ((eErrCode == store_E_None) && rTraveller.visit(it))
350 eErrCode = store_findNext (m_hImpl, &it);
352 return eErrCode;
355 private:
356 /** Representation.
358 storeDirectoryHandle m_hImpl;
361 /*========================================================================
363 * OStoreFile interface.
365 *======================================================================*/
366 class OStoreFile
368 public:
369 /** Construction.
371 inline OStoreFile (void) SAL_THROW(())
372 : m_hImpl (0)
375 /** Destruction.
377 inline ~OStoreFile (void) SAL_THROW(())
379 if (m_hImpl)
380 (void) store_releaseHandle (m_hImpl);
383 /** Copy construction.
385 inline OStoreFile (OStoreFile const & rhs) SAL_THROW(())
386 : m_hImpl (rhs.m_hImpl)
388 if (m_hImpl)
389 (void) store_acquireHandle (m_hImpl);
392 /** Assignment.
394 inline OStoreFile & operator= (OStoreFile const & rhs) SAL_THROW(())
396 if (rhs.m_hImpl)
397 (void) store_acquireHandle (rhs.m_hImpl);
398 if (m_hImpl)
399 (void) store_releaseHandle (m_hImpl);
400 m_hImpl = rhs.m_hImpl;
401 return *this;
404 /** Construction from File Handle.
406 inline explicit OStoreFile (storeFileHandle Handle) SAL_THROW(())
407 : m_hImpl (Handle)
409 if (m_hImpl)
410 (void) store_acquireHandle (m_hImpl);
413 /** Conversion into File Handle.
415 inline operator storeFileHandle (void) const SAL_THROW(())
417 return m_hImpl;
420 /** Check for a valid File Handle.
421 @return sal_True if valid, sal_False otherwise.
423 inline bool isValid (void) const SAL_THROW(())
425 return (m_hImpl != 0);
428 /** Open the file.
429 @see store_openFile()
431 inline storeError create (
432 OUString const & rFilename,
433 storeAccessMode eAccessMode,
434 sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE) SAL_THROW(())
436 if (m_hImpl)
438 (void) store_releaseHandle (m_hImpl);
439 m_hImpl = 0;
441 return store_openFile (rFilename.pData, eAccessMode, nPageSize, &m_hImpl);
444 /** Open the temporary file in memory.
445 @see store_createMemoryFile()
447 inline storeError createInMemory (
448 sal_uInt16 nPageSize = STORE_DEFAULT_PAGESIZE) SAL_THROW(())
450 if (m_hImpl)
452 (void) store_releaseHandle (m_hImpl);
453 m_hImpl = 0;
455 return store_createMemoryFile (nPageSize, &m_hImpl);
458 /** Close the file.
459 @see store_closeFile()
461 inline void close (void) SAL_THROW(())
463 if (m_hImpl)
465 (void) store_closeFile (m_hImpl);
466 m_hImpl = 0;
470 /** Flush the file.
471 @see store_flushFile()
473 inline storeError flush (void) const SAL_THROW(())
475 if (!m_hImpl)
476 return store_E_InvalidHandle;
478 return store_flushFile (m_hImpl);
481 /** Get the number of referers to the file.
482 @see store_getFileRefererCount()
484 inline storeError getRefererCount (sal_uInt32 & rnRefCount) const SAL_THROW(())
486 if (!m_hImpl)
487 return store_E_InvalidHandle;
489 return store_getFileRefererCount (m_hImpl, &rnRefCount);
492 /** Get the file size.
493 @see store_getFileSize()
495 inline storeError getSize (sal_uInt32 & rnSize) const SAL_THROW(())
497 if (!m_hImpl)
498 return store_E_InvalidHandle;
500 return store_getFileSize (m_hImpl, &rnSize);
503 /** Set attributes of a file entry.
504 @see store_attrib()
506 inline storeError attrib (
507 OUString const & rPath,
508 OUString const & rName,
509 sal_uInt32 nMask1,
510 sal_uInt32 nMask2,
511 sal_uInt32 & rnAttrib) SAL_THROW(())
513 if (!m_hImpl)
514 return store_E_InvalidHandle;
516 return store_attrib (m_hImpl, rPath.pData, rName.pData, nMask1, nMask2, &rnAttrib);
519 /** Set attributes of a file entry.
520 @see store_attrib()
522 inline storeError attrib (
523 OUString const & rPath,
524 OUString const & rName,
525 sal_uInt32 nMask1,
526 sal_uInt32 nMask2) SAL_THROW(())
528 if (!m_hImpl)
529 return store_E_InvalidHandle;
531 return store_attrib (m_hImpl, rPath.pData, rName.pData, nMask1, nMask2, NULL);
534 /** Insert a file entry as 'hard link' to another file entry.
535 @see store_link()
537 inline storeError link (
538 OUString const & rSrcPath, OUString const & rSrcName,
539 OUString const & rDstPath, OUString const & rDstName) SAL_THROW(())
541 if (!m_hImpl)
542 return store_E_InvalidHandle;
544 return store_link (
545 m_hImpl, rSrcPath.pData, rSrcName.pData, rDstPath.pData, rDstName.pData);
548 /** Insert a file entry as 'symbolic link' to another file entry.
549 @see store_symlink()
551 inline storeError symlink (
552 OUString const & rSrcPath, OUString const & rSrcName,
553 OUString const & rDstPath, OUString const & rDstName) SAL_THROW(())
555 if (!m_hImpl)
556 return store_E_InvalidHandle;
558 return store_symlink (m_hImpl, rSrcPath.pData, rSrcName.pData, rDstPath.pData, rDstName.pData);
561 /** Rename a file entry.
562 @see store_rename()
564 inline storeError rename (
565 OUString const & rSrcPath, OUString const & rSrcName,
566 OUString const & rDstPath, OUString const & rDstName) SAL_THROW(())
568 if (!m_hImpl)
569 return store_E_InvalidHandle;
571 return store_rename (m_hImpl, rSrcPath.pData, rSrcName.pData, rDstPath.pData, rDstName.pData);
574 /** Remove a file entry.
575 @see store_remove()
577 inline storeError remove (
578 OUString const & rPath, OUString const & rName) SAL_THROW(())
580 if (!m_hImpl)
581 return store_E_InvalidHandle;
583 return store_remove (m_hImpl, rPath.pData, rName.pData);
586 private:
587 /** Representation.
589 storeFileHandle m_hImpl;
592 /*========================================================================
594 * The End.
596 *======================================================================*/
598 } // namespace store
600 #endif /* ! INCLUDED_STORE_STORE_HXX */
605 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */