//# ByteSource.h: Class for read-only access to data in a given format //# Copyright (C) 1996,1999,2001 //# 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 received 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$ #ifndef CASA_BYTESOURCE_H #define CASA_BYTESOURCE_H #include #include //# The following should be a forward declaration. But our Complex & DComplex //# classes are a typedef hence this does not work. Replace the following with //# forward declarations when Complex and DComplex are no longer typedefs. #include namespace casacore { //# NAMESPACE CASACORE - BEGIN class TypeIO; class String; // Class for read-only access to data in a given format. // // // // //
  • BaseSinkSource class //
  • TypeIO class and derived classes // // // A source is the place where bytes are read from. // // // ByteSource provides read-only access to a typed byte stream in the // Casacore IO framework. The base class BaseSinkSource // contains common functions like seek. //

    // The object is constructed using a typed byte stream. This stream // is an instance of a class derived from class // TypeIO. This makes it possible to // read the data in any format (e.g. CanonicalIO or RawIO). //
    In its turn TypeIO uses an instance of a class derived from class // ByteIO. This makes it possible to // use any input stream (e.g. file, memory). // // // // // Construct the correct input stream. // RegularFileIO filio ("file.name"); // CanonicalIO canio (&filio); // ByteSource source (&canio); // // Read data. // Int vali; // Bool flag; // source >> vali >> flag; // // // // This class makes it possible to deny write-access to an IO stream. // class ByteSource: virtual public BaseSinkSource { public: // Default constructor. // This creates an invalid object, but is present for convenience. ByteSource(); // Construct from given TypeIO object. The constructor does not copy the // object, but only keeps a pointer to it. If takeOver is true the this // class will delete the supplied pointer. Otherwise the caller is // responsible for this. ByteSource (TypeIO* typeIO, Bool takeOver=False); // The copy constructor uses reference semantics ByteSource (const ByteSource& source); // The assignment operator uses reference semantics ByteSource& operator= (const ByteSource& source); // destructor ~ByteSource(); // These functions read one value of the given type. // If this function does not succeed, an exception will be thrown. // ByteSource& operator>> (Bool& value); ByteSource& operator>> (Char& value); ByteSource& operator>> (uChar& value); ByteSource& operator>> (Short& value); ByteSource& operator>> (uShort& value); ByteSource& operator>> (Int& value); ByteSource& operator>> (uInt& value); ByteSource& operator>> (Int64& value); ByteSource& operator>> (uInt64& value); ByteSource& operator>> (Float& value); ByteSource& operator>> (Double& value); ByteSource& operator>> (Complex& value); ByteSource& operator>> (DComplex& value); ByteSource& operator>> (String& value); // // These functions read multiple values of the given type. // If this function does not succeed, an exception will be thrown. // void read (size_t nvalues, Bool* value); void read (size_t nvalues, Char* value); void read (size_t nvalues, uChar* value); void read (size_t nvalues, Short* value); void read (size_t nvalues, uShort* value); void read (size_t nvalues, Int* value); void read (size_t nvalues, uInt* value); void read (size_t nvalues, Int64* value); void read (size_t nvalues, uInt64* value); void read (size_t nvalues, Float* value); void read (size_t nvalues, Double* value); void read (size_t nvalues, Complex* value); void read (size_t nvalues, DComplex* value); void read (size_t nvalues, String* value); // protected: }; } //# NAMESPACE CASACORE - END #endif