casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Modules | Classes

Basic classes and global functions for IO and object persistency. More...

Modules

 IO_module_internal_classes
 Internal IO_module classes and functions.
 

Classes

class  casacore::AipsIO
 AipsIO is the object persistency mechanism of Casacore. More...
 
struct  casacore::AipsIOCarray_global_functions_AipsIOCarray
 Templated functions to get/put a C-style array from/into AipsIO. More...
 
struct  casacore::ArrayIO_global_functions_Array_IO
 Input/output operators for Arrays. More...
 
struct  casacore::ArrayIO_global_functions_Array_binary_IO
 Global functions to read/write binary arrays from/to a file. More...
 
class  casacore::BaseSinkSource
 Shared base class for ByteSink and ByteSource. More...
 
class  casacore::BucketBuffered
 Use buffered file IO for buckets in a part of a file. More...
 
struct  casacore::BucketCache_global_functions_BucketCache_CallBack
 Define the type of the static read and write function. More...
 
class  casacore::BucketCache
 Cache for buckets in a part of a file. More...
 
class  casacore::BucketMapped
 Use file mapping for buckets in a part of a file. More...
 
class  casacore::ByteIO
 Abstract base class for IO on a byte stream. More...
 
class  casacore::ByteSink
 Class for write-only access to data in a given format. More...
 
class  casacore::ByteSinkSource
 Class for read/write access to data in a given format. More...
 
class  casacore::ByteSource
 Class for read-only access to data in a given format. More...
 
class  casacore::CanonicalIO
 Class for IO in canonical format. More...
 
class  casacore::ConversionIO
 Class for IO in a converted format. More...
 
class  casacore::FilebufIO
 Class for buffered IO on a file. More...
 
class  casacore::FiledesIO
 Class for unbuffered IO on a file. More...
 
class  casacore::FileLocker
 Class to handle file locking. More...
 
class  casacore::LECanonicalIO
 Class for IO in little endian canonical format. More...
 
class  casacore::LockFile
 Class to handle file locking and synchronization. More...
 
class  casacore::MemoryIO
 Class for IO to a memory buffer. More...
 
class  casacore::MFFileIO
 Class for IO on a virtual file in a MultiFileBase. More...
 
class  casacore::MMapfdIO
 Memory-mapped IO on a file. More...
 
class  casacore::MMapIO
 Memory-mapped IO on a file. More...
 
class  casacore::MultiFile
 Class to combine multiple files in a single one. More...
 
struct  casacore::MultiFileBuffer
 Helper class for MultiFileInfo holding a data buffer. More...
 
class  casacore::MultiFileBase
 Abstract base class to combine multiple files in a single one. More...
 
class  casacore::MultiHDF5
 Class to combine multiple files in a single HDF5 file. More...
 
class  casacore::RawIO
 Class for IO in local format. More...
 
class  casacore::RegularFileIO
 Class for IO on a regular file. More...
 
class  casacore::StreamIO
 Class for IO on connection oriented socket. More...
 
class  casacore::TapeIO
 Class for IO on a tape device. More...
 
class  casacore::TypeIO
 Abstract base class for IO of data in a type-dependent format. More...
 

Detailed Description

Basic classes and global functions for IO and object persistency.

See below for an overview of the classes in this module.

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25

Synopsis

This module provides the basic IO functionality for the Casacore classes. There are two IO mechanisms:

  1. Class AipsIO provides the object persistency mechanism. The templated global functions in AipsIOCarray.h form a little layer upon AipsIO. They provide the means to put or get a C-style array of any type.
  2. Class ByteSinkSource and its ancestors provide a general IO mechanism.

Both use the underlying IO framework which define where and how the data are written. The how-part is defined by classes derived from TypeIO as shown in the UML diagram. There are three such classes:

  1. CanonicalIO reads/writes data in canonical (machine-independent) format. This should be used when data are meant to be exportable. It uses the conversion functions in class

    CanonicalConversion .

  2. RawIO reads/writes data in native (machine-dependent) format. This can be used when data are not exported.
  3. ConversionIO reads/writes in an external format as defined at construction time. This can be used when the external format can be one of several (e.g. VAX or IBM for a WSRT archive tape). In this way the format has to be defined only once and thereafter is it handled correctly by the polymorphism mechanism.

The where-part is defined by classes derived from ByteIO as shown in the UML diagram. There are a few such classes:

  1. RegularFileIO uses a regular file to hold the data. Internally it uses FilebufIO (see below). It can handle files > 2 GB.
  2. FilebufIO does the IO in a buffered way similar to the stdio system. However, it does not use stdio because that gave problems when doing concurrent access from multiple processes. It can handle files > 2 GB.
  3. FiledesIO uses the UNIX IO-functions like open, read to do IO directly. It does not use an internal buffer. Instead it always does physical IO. It is meant for IO operations where large chunks of a file are accessed and for IO on sockets, pipes, etc.. It can handle files > 2 GB.
  4. StreamIO for IO on a socket.
  5. TapeIO for IO on a tape device.
  6. MemoryIO uses a (possibly expandable) buffer in memory to hold the data.
  7. MMapIO uses memory-mapped IO. Be careful to use this on 32-bit machines, because its address space is too small to handle a file of a few GBytes.
  8. MFFileIO uses a virtual file in a MultiFile container file. MultiFile is meant to combine multiple files in a single physical file to reduce the number of files used by the Casacore table system.

The IO framework is easily expandable. One can for instance think of a class AsciiIO derived from TypeIO to hold data in ASCII format. A class RemoteTapeIO could be developed for IO on a tape device on another node.