#ifndef FILEFORMATCOMPOSITE_HEADER #define FILEFORMATCOMPOSITE_HEADER 1 //////////////////////////////////////////////////////// //! docentry="Data Processing;Basic Types.IO" //! lib=DataConv //! rcsid="$Id: FileFormatComposite.hh,v 1.2 2000/12/13 15:57:23 ees1cg Exp $" //! file="amma/StdType/DataConv/FileFormatComposite.hh" //! author="Charles Galambos" //! date="12/08/98" //! userlevel=Default #include "amma/DP/FileFormat.hh" #include "amma/DP/FileFormatIO.hh" #include "amma/DP/CompositeStream.hh" #include "amma/TypeName.hh" namespace StdIO { ///////////////////////////// //: Stream File Format. //! userlevel=Develop template class FileFormatCompositeBodyC : public FileFormatBodyC { public: FileFormatCompositeBodyC() : FileFormatBodyC("composite","Composte file sequences.") {} //: Default constructor. virtual const type_info &ProbeLoad(IStreamC &in,const type_info &/*obj_type*/) const { return typeid(void); } //: Is stream in std stream format ? virtual const type_info &ProbeLoad(const FilenameC &filename,IStreamC &in,const type_info &obj_type) const { if(filename.length() == 0) return typeid(void); if(filename[0] != '@') return typeid(void); if(ExtractDevice(filename) != "COMPOSITE") return typeid(void); return typeid(DataT); } virtual const type_info &ProbeSave(const FilenameC &filename,const type_info &/*obj_type*/,BooleanT forceFormat) const { if(filename.length() == 0) return typeid(void); if(filename[0] != '@') return typeid(void); if(ExtractDevice(filename) != "COMPOSITE") return typeid(void); return typeid(DataT); } virtual DPIPortBaseC CreateInput(IStreamC &in,const type_info &obj_type) const { return DPIPortBaseC(); } //: Create a input port for loading. // Will create an Invalid port if not supported. virtual DPOPortBaseC CreateOutput(OStreamC &out,const type_info &obj_type) const { return DPOPortBaseC(); } //: Create a output port for saving. // Will create an Invalid port if not supported. virtual DPIPortBaseC CreateInput(const FilenameC &filename,const type_info &obj_type) const { PlayListC pl; StringC fn = ExtractParams(filename); if(!Load(fn,pl,"",true)) { cerr << "FileFormatCompositeBodyC::CreateInput(), ERROR: Failed to load playlist '" << fn << "' for '" << filename << "'\n"; return DPIPortBaseC(); } return CompositeIStreamC(pl); } //: Create a input port for loading. virtual DPOPortBaseC CreateOutput(const FilenameC &filename,const type_info &obj_type) const { return CompositeOStreamC(filename); } //: Create a output port for saving. virtual const type_info &DefaultType() const { return typeid(DataT); } //: Get prefered IO type. }; ///////////////////////////// //! userlevel=Normal //: Create an instance of a stream File Format. template class FileFormatCompositeC : public FileFormatC { public: FileFormatCompositeC() : FileFormatC(*new FileFormatCompositeBodyC()) {} }; } #endif