// Copyright (C) 1999-2017 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsstream_h__ #define __fitsstream_h__ #include "file.h" #include "zlib.h" typedef struct gzStream_ { z_stream zstream; int id; int transparent; unsigned char header[2]; int useHeader; unsigned char* buf; } *gzStream; template class FitsStream : public FitsFile { protected: T stream_; FitsFile::FlushMode flush_; int dataManage_; // flag, true if we manage data FitsHead* headRead(); int dataRead(size_t bytes, int validate =1); void dataSkip(size_t); void dataSkipBlock(size_t); void skipEnd(); size_t read(char*, size_t); void close(); void found(); void error(); public: FitsStream(); virtual ~FitsStream(); T stream() {return stream_;} FitsFile::FlushMode flush() {return flush_;} int dataManage() {return dataManage_;} void done() {close();} }; template class FitsFitsStream : public virtual FitsStream { protected: void processExact(); void processRelax(); public: FitsFitsStream(FitsFile::ScanMode, FitsFile::FlushMode); }; template class FitsFitsNextStream : public FitsStream { public: FitsFitsNextStream(FitsFile* prev); }; template class FitsArrStream : public virtual FitsStream { public: FitsArrStream(FitsFile::FlushMode); }; template class FitsNRRDStream : public virtual FitsStream { public: FitsNRRDStream(FitsFile::FlushMode); }; template class FitsMosaicStream : public virtual FitsStream { public: FitsMosaicStream(FitsFile::FlushMode); }; template class FitsMosaicNextStream : public FitsStream { public: FitsMosaicNextStream(FitsFile* prev, FitsFile::FlushMode); }; #endif