casacore
Loading...
Searching...
No Matches
BucketMapped.h
Go to the documentation of this file.
1//# BucketMapped.h: File buckets by means of file mapping
2//# Copyright (C) 2009
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: casa-feedback@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25
26#ifndef CASA_BUCKETMAPPED_H
27#define CASA_BUCKETMAPPED_H
28
29//# Includes
30#include <casacore/casa/aips.h>
31#include <casacore/casa/IO/BucketBase.h>
32#include <casacore/casa/IO/MMapfdIO.h>
33
34
35namespace casacore { //# NAMESPACE CASACORE - BEGIN
36
37 // <summary>
38 // Use file mapping for buckets in a part of a file
39 // </summary>
40
41 // <use visibility=export>
42
43 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="" demos="">
44 // </reviewed>
45
46 // <prerequisite>
47 //# Classes you should understand before using this one.
48 // <li> <linkto class=BucketFile>BucketFile</linkto>
49 // </prerequisite>
50
51 // <etymology>
52 // BucketMapped uses memory-mapped files for bucket access.
53 // </etymology>
54
55 // <synopsis>
56 // BucketMapped is similar to class
57 // <linkto class=BucketCache>BucketCache</linkto> and is meant to be used by
58 // the storage managers of the Table System.
59 //
60 // It gives access to buckets in a file by means of memory-mapped files.
61 // However, its functionality is a subset of BucketCache and is only meant
62 // to be used by the Tiled Storage Managers. If The Standard and Incremental
63 // Storage Manager also want to use it, functions like <src>extend</src>
64 // needs to be added to this class. Also support for a free bucket list needs
65 // to be added.
66 // </synopsis>
67
68 // <motivation>
69 // Use of BucketCache is sub-optimal when having large buckets and more or
70 // less random IO. Memory-mapping behaves much better.
71 // </motivation>
72
73
75 {
76 public:
77 // Create the cache for (part of) a file.
78 // The file part mapped into memory starts at startOffset. Its length is
79 // bucketSize*nrOfBuckets bytes.
80 // If the file is smaller, the remainder is indicated as an extension
81 // similarly to the behaviour of function extend.
82 BucketMapped (BucketFile* file, Int64 startOffset, uInt bucketSize,
83 uInt nrOfBuckets);
84
85 // Unmap the file
87
88 // Get a readonly pointer to the given bucket in memory.
89 const char* getBucket (uInt bucketNr);
90
91 // Get a writable pointer to the given bucket in memory.
92 // It sets the hasWritten flag.
93 char* getrwBucket (uInt bucketNr)
94 {
96 return const_cast<char*>(getBucket(bucketNr));
97 }
98
99private:
100 // Copy constructor is not possible.
102
103 // Assignment is not possible.
105
106 // Flush the file.
107 virtual void doFlush();
108
109 // Do the actual resync-ing.
110 virtual void doResync();
111
112 // Extend the file with the given number of buckets.
113 virtual void doExtend (uInt nrBucket);
114
115 // Initialize the bucket buffer.
116 // The uninitialized buckets before this bucket are also initialized.
117 virtual void initializeBuckets (uInt bucketNr);
118 };
119
120
121} //# NAMESPACE CASACORE - END
122
123#endif
Bool itsHasWritten
Have data been written?
Definition BucketBase.h:129
const char * getBucket(uInt bucketNr)
Get a readonly pointer to the given bucket in memory.
~BucketMapped()
Unmap the file.
BucketMapped & operator=(const BucketMapped &)
Assignment is not possible.
virtual void initializeBuckets(uInt bucketNr)
Initialize the bucket buffer.
virtual void doExtend(uInt nrBucket)
Extend the file with the given number of buckets.
BucketMapped(const BucketMapped &)
Copy constructor is not possible.
virtual void doResync()
Do the actual resync-ing.
virtual void doFlush()
Flush the file.
char * getrwBucket(uInt bucketNr)
Get a writable pointer to the given bucket in memory.
BucketMapped(BucketFile *file, Int64 startOffset, uInt bucketSize, uInt nrOfBuckets)
Create the cache for (part of) a file.
this file contains all the compiler specific defines
Definition mainpage.dox:28
unsigned int uInt
Definition aipstype.h:49
long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size)
Definition aipsxtype.h:36
const Bool True
Definition aipstype.h:41