00001 
00002 
00003 
00004 
00005 
00006 
00007 #ifndef DATADUMPER_H
00008 #define DATADUMPER_H
00009 
00010 #include <iostream>
00011 #include <list>
00012 #include <map>
00013 #include <string>
00014 
00015 #include "DataTypes.h"
00016 #include "TableData.hxx"
00017 #include "TableInfo.h"
00018 
00024 class DataDumper
00025 {
00026 public:
00029   DataDumper(const TableInfo& aInfo);
00030 
00033   DataDumper(const TableInfo& aInfo, StringMap& aConstraints);
00034 
00036   ~DataDumper();
00037 
00039   void dumpAsBinary(TableData<Numeric>& aData,
00040                      const std::string& aFileName);
00041 
00044   template <typename DataType>
00045   void dumpAsCsv(TableData<DataType>& aData,
00046                         std::ostream& aOut);
00047 
00050   template <typename DataType>
00051   void addDefaultRow(TableData<DataType>& aData, FitsFile& fcat);
00052 
00053   bool isDetection(std::string name);
00054  
00055 private:
00061   class iosave
00062   {
00063   public:
00066     iosave(std::ios& aStream) : mStreamPtr(&aStream),
00067                                 mFlagsCopy(aStream.flags()),
00068                                 mFillCopy(aStream.fill()),
00069                                 mPrecisionCopy(aStream.precision()) { }
00070 
00072     ~iosave()
00073     {
00074       mStreamPtr->flags(mFlagsCopy);
00075       mStreamPtr->fill(mFillCopy);
00076       mStreamPtr->precision(mPrecisionCopy);
00077     }
00078 
00079   private:
00080     std::ios* mStreamPtr;
00081     std::ios::fmtflags mFlagsCopy;
00082     char mFillCopy;
00083     int mPrecisionCopy;
00084 
00085     
00086     iosave(iosave const& aCopy);
00087     iosave& operator=(iosave const& aCopy);
00088   };
00089 
00091   TableInfo mInfo;
00093   std::list<int> mColConstList;
00095   std::map<std::string, int> mKeyCount;
00096 
00097   template <typename DataType>
00098   bool isUnique(TableData<DataType>& aData, unsigned aRow);
00099 
00102   void formatOut(Numeric value,
00103                  const std::string& format,
00104                  std::ostream& os) const;
00105 
00108   void formatOut(Metadata value,
00109                  const std::string& format,
00110                  std::ostream& os) const;
00111 };
00112 
00113 #include "DataDumper.hxx"
00114 
00115 #endif
00116 
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125