Newer
Older
/* Log.h
Mark Woolrich, FMRIB Image Analysis Group
Copyright (C) 1999-2000 University of Oxford */
/* CCOPYRIGHT */
#include <iostream>
#include <fstream>
#include <string>
#include "newmatap.h"
#include "newmatio.h"
using namespace NEWMAT;
template<class t> string tostring(const t obj);
class Log
{
public:
static Log& getInstance();
~Log() { delete logger; }
/** Makes a directory to place results into:
keeps adding "+" to pdirname until unique directory is made: */
void makeDir(const string& pdirname, const string& plogfilename = "logfile");
/** Sets an existing directory to place results into: */
void setDir(const string& pdirname, const string& plogfilename = "logfile");
const string& getDir() const { return dir; }
const string& getLogFileName() const { return logfilename; }
const string appendDir(const string& filename) const { return dir + "/" + filename;}
void out(const string& p_fname, const Matrix& p_mat, const string& plogfilename = "logfile");
void out(const string& p_fname, const RowVector& p_mat, const string& plogfilename = "logfile");
void out(const string& p_fname, const ColumnVector& p_mat, const string& plogfilename = "logfile");
ofstream& str(const string& plogfilename = "logfile");
private:
Log():logEstablished(false) {}
const Log& operator=(Log&);
Log(Log&);
static Log* logger;
string dir;
ofstream logfileout;
string logfilename;
inline void Log::out(const string& p_fname, const Matrix& p_mat, const string& plogfilename)
logfilename = plogfilename;
setDir(".");
}
ofstream out;
out.open((dir + "/" + p_fname).c_str(), ios::out);
out.setf(ios::scientific, ios::floatfield);
for(int i=1; i<=p_mat.Nrows(); i++)
{
for(int j=1; j<=p_mat.Ncols(); j++)
{
out << p_mat(i,j) << " ";
}
out << endl;
}
out.close();
}
inline void Log::out(const string& p_fname, const ColumnVector& p_mat, const string& plogfilename)
logfilename = plogfilename;
setDir(".");
}
ofstream out;
out.open((dir + "/" + p_fname).c_str(), ios::out);
out.setf(ios::scientific, ios::floatfield);
for(int j=1; j<=p_mat.Nrows(); j++)
{
out << p_mat(j);
out << endl;
}
out.close();
}
inline void Log::out(const string& p_fname, const RowVector& p_mat, const string& plogfilename)
logfilename = plogfilename;
setDir(".");
}
ofstream out;
out.open((dir + "/" + p_fname).c_str(), ios::out);
out.setf(ios::scientific, ios::floatfield);
for(int j=1; j<=p_mat.Ncols(); j++)
{
out << p_mat(j) << " ";
}
out << endl;
out.close();
}
inline Log& Log::getInstance(){
if(logger == NULL)
logger = new Log();
return *logger;
}
inline ofstream& Log::str(const string& plogfilename) {
logfilename = plogfilename;