File: StorageOption.h

package info (click to toggle)
casacore 3.5.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 51,680 kB
  • sloc: cpp: 462,815; fortran: 16,372; ansic: 7,403; yacc: 4,626; lex: 2,340; sh: 1,786; python: 629; perl: 531; sed: 499; csh: 34; makefile: 31
file content (139 lines) | stat: -rw-r--r-- 4,934 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//# StorageOption.h: Options defining how table files are organized
//# Copyright (C) 2014
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
//# License for more details.
//#
//# You should have receied a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//#        Internet email: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#
//# $Id: StorageOption.h 20859 2010-02-03 13:14:15Z gervandiepen $

#ifndef TABLES_STORAGEOPTION_H
#define TABLES_STORAGEOPTION_H


//# Includes
#include <casacore/casa/aips.h>

namespace casacore { //# NAMESPACE CASACORE - BEGIN

// <summary>
// Options defining how table files are organized
// </summary>

// <use visibility=export>

// <reviewed reviewer="TPPR" date="08.11.94" tests="tTable.cc">
// </reviewed>

// <synopsis>
// This class can be used to define how the files of a table are organized.
// There are two ways:
// <ol>
//  <li> The old way where each storage manager has its own file(s).
//  <li> Using MultiFile that storage managers can use to combine about all
//       table files in a single file. This mode is particularly useful
//       for new file systems (like Lustre) requiring large block sizes.
//       <br>The block size to be used in a MultiFile can be defined in
//           this class. Default is 4 MByte.
//  <li> Using MultiHDF5 which behaves similar to MultiFile but uses an
//       HDF5 file instead of a regular file. Note that it requires that
//       support for HDF5 has been used in the build system.
// </ol>
// It is possible to specify the storage type and block size using aipsrc.
// The aipsrc variables are:
// <ul>
//  <li> <src>table.storage.option</src>. The (case-insensitive) value can be
//       'multifile' or 'multihdf5'.
//       Another value means the old way (separate files).
//  <li> <src>table.storage.blocksize</src> gives the default blocksize to be
//       used for the multifile and multihdf5 option.
// <li> <src>table.storage.odirect</src> can be true or false. It tells if the
//       O_DIRECT option has to be used to let the kernel bypass its filecache
//       for more predictable I/O behaviour. It's only used for MultiFile and
//       only if the OS supports O_DIRECT.
// </ul>
// </synopsis>


  class StorageOption
  {
  public:
    // Define the possible options how table files are organized.
    enum Option {
      // Let storage managers use a combined MultiFile.
      MultiFile,
      // Let storage managers use a combined MultiHDF5.
      MultiHDF5,
      // Let storage managers use separate files.
      SepFile,
      // Use default (currently SepFile).
      Default,
      // Use as defined in the aipsrc file.
      Aipsrc
    };

    // Create an option object.
    // The parameter values are described in the synopsis.
    // The blocksize has to be given in bytes.
    // A size value -2 means reading that size from the aipsrc file.
    // A size value -1 means use the default of 4*1024*1024.
    // <br>useODirect<0 means reading the option from the aipsrc file.
    // It is only set if the OS supports O_DIRECT.
    StorageOption (Option option=Aipsrc, Int blockSize=-2, Int useODirect=-3);

    // Fill the option in case Aipsrc or Default was given.
    // It is done as explained in the synopsis.
    void fillOption();

    // Get the option.
    Option option() const
      { return itsOption; }

    // Set the option.
    void setOption (Option option)
      { itsOption = option; }

    // Get the block size (in bytes).
    uInt blockSize() const
      { return itsBlockSize; }

    // Set the block size (in bytes).
    void setBlockSize (Int blockSize)
      { itsBlockSize = blockSize; }

    // Get the O_DIRECT option.
    Bool useODirect() const
      { return itsUseODirect; }

    // Set the O_DIRECT option.
    // It is only set if the OS supports O_DIRECT.
    void setUseODirect (Bool useODirect);

  private:
    Option itsOption;
    Int    itsBlockSize;
    Bool   itsUseODirect;
    Bool   itsUseAipsrcODirect;
  };

} //# NAMESPACE CASACORE - END

#endif