From 8beb672d74a42ef71675d9689c44f89c2ae45a38 Mon Sep 17 00:00:00 2001
From: Mark Woolrich <woolrich@fmrib.ox.ac.uk>
Date: Thu, 23 Nov 2000 13:51:45 +0000
Subject: [PATCH] Initial revision

---
 Log.cc |  62 ++++++++++++++++++++++++
 Log.h  | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 209 insertions(+)
 create mode 100644 Log.cc
 create mode 100644 Log.h

diff --git a/Log.cc b/Log.cc
new file mode 100644
index 0000000..17ac986
--- /dev/null
+++ b/Log.cc
@@ -0,0 +1,62 @@
+/*  Log.cc
+
+    Mark Woolrich, FMRIB Image Analysis Group
+
+    Copyright (C) 1999-2000 University of Oxford  */
+
+/*  CCOPYRIGHT  */
+
+#include "Log.h"
+
+namespace Utilities {
+
+  Log* Log::logger = NULL;
+  
+  void Log::makeDir(const string& pdirname, const string& plogfilename) 
+    {
+      dir = pdirname;
+      logfilename = plogfilename;
+
+      // make directory to place results into:
+      // keep adding "+" until directory is made:      
+      int count = 0;
+      while(true)
+	{
+	  if(count >= 20)
+	    {
+	      string s("Cannot create directory " + dir);
+	      throw Exception(s.c_str());
+	    }
+
+	  int ret = system(("mkdir "+ dir).c_str());
+	  if(ret == 0)
+	    {
+	      break;
+	    }
+	  dir = dir + "+";
+	  count++;
+	}
+      
+      // setup logfile
+      logfileout.open((dir + "/" + logfilename).c_str(), ios::out);
+
+      logEstablished = true;
+    }
+
+void Log::setDir(const string& pdirname, const string& plogfilename) 
+    {
+      dir = pdirname;
+      logfilename = plogfilename;
+
+      // setup logfile
+      logfileout.open((dir + "/" + logfilename).c_str(), ios::out);
+
+      logEstablished = true;
+    }
+}
+
+
+
+
+
+
diff --git a/Log.h b/Log.h
new file mode 100644
index 0000000..1b35c91
--- /dev/null
+++ b/Log.h
@@ -0,0 +1,147 @@
+/*  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;
+namespace Utilities{
+
+#if !defined(Log_h)
+#define Log_h
+  
+  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 appendFileName(const string& filename) const { return dir + "/" + filename;}
+
+      void out(const string& p_fname, const Matrix& p_mat);
+      void out(const string& p_fname, const RowVector& p_mat);
+      void out(const string& p_fname, const ColumnVector& p_mat);
+      
+      ofstream& str();
+      
+    private:
+      Log():logEstablished(false) {}
+      
+      const Log& operator=(Log&);
+      Log(Log&);
+      
+      static Log* logger;
+      string dir;
+      ofstream logfileout;
+      string logfilename;
+
+      bool logEstablished;
+    };
+  
+  inline void Log::out(const string& p_fname, const Matrix& p_mat)
+    {
+
+      if(!logEstablished)
+	{
+	  logfilename = "logfile";
+	  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)
+    {
+      if(!logEstablished)
+	{
+	  logfilename = "logfile";
+	  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)
+    {
+
+      if(!logEstablished)
+	{
+	  logfilename = "logfile";
+	  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() { 
+    
+    if(!logEstablished)
+      {
+	logfilename = "logfile";
+	setDir(".");
+      }
+
+    return logfileout; 
+  }
+      
+#endif
+
+}
+
+
-- 
GitLab