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