]> Creatis software - clitk.git/blobdiff - common/clitkCommon.h
Change N formula
[clitk.git] / common / clitkCommon.h
index ce70757a5496a74d2df199c7197879d34cb84e35..3729584686bdd1d2510d4603000336fe307a0443 100644 (file)
@@ -1,61 +1,91 @@
-#ifndef CLITKCOMMON_H
-#define CLITKCOMMON_H
+/*=========================================================================
+  Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-/**
-   -------------------------------------------------------------------
-   * @file   clitkCommon.h
-   * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
-   * @date   17 May 2006 07:57:56
+  Authors belong to:
+  - University of LYON              http://www.universite-lyon.fr/
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
+  - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
-   * @brief  
+  This software is distributed WITHOUT ANY WARRANTY; without even
+  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+  PURPOSE.  See the copyright notices for more information.
 
-   -------------------------------------------------------------------*/
+  It is distributed under dual licence
 
-// std include
-#include <config.h>
-#include <cstdlib>
-#include <algorithm>
-#include <iostream>
-#include <fstream>
-#include <sstream>
-#include <vector>
-#include <math.h>
-#include <typeinfo>
+  - BSD        See included LICENSE.txt file
+  - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+===========================================================================**/
+
+#ifndef CLITKCOMMON_H
+#define CLITKCOMMON_H
+
+// clitk include
+#include "clitkPortability.h"
+#include "clitkDD.h"
+#include "clitkExceptionObject.h"
 
-#include "itkMacro.h"
+// itk include (include std)
 #include <itkContinuousIndex.h>
+#include <itkMacro.h>
 #include <itkImageRegionConstIterator.h>
 #include <itkImageRegionIterator.h>
 
+// std include
+#include <fstream>
+
+// Include for "rusage"
+#include <ctime>
+#if defined(unix) || defined(__APPLE__)
+#  include <sys/time.h>
+#  include <sys/resource.h>
+#elif defined(_WIN32)
+#  include <windows.h>
+#  include <stdint.h>
+#endif
+
+#define VTK_EXCLUDE_STRSTREAM_HEADERS
+
 //--------------------------------------------------------------------
 namespace clitk {
-  
-#if defined(WIN32)
-#define lrint(x) (floor(x+(x>0) ? 0.5 : -0.5))
-#endif
-  
+
   typedef unsigned char uchar;
   typedef unsigned short ushort;
   typedef unsigned int uint;
 
-  //--------------------------------------------------------------------
-  // display 
-#define DD(a) std::cout << #a " = [ " << a << " ]" << std::endl;
-#define DDV(a,n) { std::cout << #a " = [ "; for(unsigned int _i_=0; _i_<n; _i_++) { std::cout << a[_i_] << " "; }; std::cout << " ]" << std::endl;}
+#define CLITK_TRY_CATCH_EXIT(func) \
+  try { \
+    func; \
+  } \
+  catch (const itk::ExceptionObject& e) { \
+    e.Print(std::cout); \
+    exit(-1);\
+  } \
+  catch (const std::exception& e) { \
+    std::cout << e.what() << std::endl; \
+    exit(-2);\
+  } \
+  catch (...) { \
+    std::cout << "Unknown excpetion" << std::endl; \
+    exit(-3); \
+  }
+
+#ifndef ITK_OVERRIDE
+# define ITK_OVERRIDE
+#endif
 
   //--------------------------------------------------------------------
   // when everything goes wrong
 #define WHEREAMI "[ " << __FILE__  << " ] line " << __LINE__
-#define FATAL(a) std::cerr << "ERROR in " << WHEREAMI << ": " << a; exit(0);
-  
+#define FATAL(a) { std::cerr << "ERROR in " << WHEREAMI << ": " << a; exit(0); }
+
   //--------------------------------------------------------------------
   // GGO with modified struct name
 #define GGO(ggo_filename, args_info)                                    \
   args_info_##ggo_filename args_info;                                  \
-  cmdline_parser2(argc, argv, &args_info, 1, 1, 0);                    \
+  cmdline_parser_##ggo_filename##2(argc, argv, &args_info, 1, 1, 0);                   \
   if (args_info.config_given)                                          \
-    cmdline_parser_configfile (args_info.config_arg, &args_info, 0, 0, 1); \
-  else cmdline_parser(argc, argv, &args_info);  
+    cmdline_parser_##ggo_filename##_configfile (args_info.config_arg, &args_info, 0, 0, 1); \
+  else cmdline_parser_##ggo_filename(argc, argv, &args_info);
 
   //--------------------------------------------------------------------
   // skip line with #
@@ -68,13 +98,19 @@ namespace clitk {
   //--------------------------------------------------------------------
   // Return filename extension
   std::string GetExtension(const std::string& filename);
-  
+
+  // Return filename splitting in 1 or 2 parts : directory name (if exists) & filename
+  std::vector<std::string> SplitFilename(const std::string& filename);
+
   //--------------------------------------------------------------------
   // Convert float, double ... to string
   template<class T> std::string toString(const T & t);
   template<class T> std::string toStringVector(const T * t, const int n);
   template<class T> std::string toStringVector(const T & t, const int n);
   template<class T> std::string toStringVector(const std::vector<T> & t);
+  template <class T> bool fromString(T& t,
+                                     const std::string& s,
+                                     std::ios_base& (*f)(std::ios_base&)=std::dec);
 
   //--------------------------------------------------------------------
   // Display a progress %
@@ -87,6 +123,8 @@ namespace clitk {
   TPixelDown PixelTypeDownCast(const TPixelUp & x);
   template<>
   float PixelTypeDownCast(const double & x);
+  template<>
+  double PixelTypeDownCast(const double & x);
 
   //--------------------------------------------------------------------
   // Return the indexes of sorted values in a vector
@@ -99,7 +137,7 @@ namespace clitk {
   // Return the name of a type as a string
   template<class TPixel>
   std::string GetTypeAsString();
-  
+
   //--------------------------------------------------------------------
   // Convert radian / degree
   double rad2deg(double anglerad);
@@ -122,13 +160,13 @@ namespace clitk {
   std::string CreateListOfTypes(bool last=true) {
     return GetTypeAsString<T1>();
   }
-  
+
   template<class T1, class T2>
   std::string CreateListOfTypes(bool last=true) {
     if (last) return CreateListOfTypes<T1>()+" and "+CreateListOfTypes<T2>();
     else return CreateListOfTypes<T1>()+", "+CreateListOfTypes<T2>();
   }
-  
+
   template<class T1, class T2, class T3>
   std::string CreateListOfTypes(bool last=true) {
     if (last) return CreateListOfTypes<T1,T2>(false)+" and "+CreateListOfTypes<T3>();
@@ -165,7 +203,7 @@ namespace clitk {
     else return CreateListOfTypes<T1,T2,T3,T4,T5,T6,T7>(false)+", "+CreateListOfTypes<T8>();
   }
   //--------------------------------------------------------------------
-  
+
   //--------------------------------------------------------------------
   void FindAndReplace(std::string & line, const std::string & tofind, const std::string & replacement);
   void FindAndReplace(std::string & line, const std::vector<std::string> & tofind, const std::vector<std::string> & toreplace);
@@ -173,8 +211,8 @@ namespace clitk {
   //--------------------------------------------------------------------
 
   //--------------------------------------------------------------------
-  double ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex<double, 3> point, 
-                                                 const itk::ContinuousIndex<double, 3> pointInPlane, 
+  double ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex<double, 3> point,
+                                                 const itk::ContinuousIndex<double, 3> pointInPlane,
                                                  const itk::ContinuousIndex<double, 3> normalPlane);
 
   //--------------------------------------------------------------------
@@ -182,6 +220,9 @@ namespace clitk {
   void openFileForReading(std::ifstream & is, const std::string & filename);
   void openFileForWriting(std::ofstream & os, const std::string & filename);
 
+  //--------------------------------------------------------------------
+  void readDoubleFromFile(const std::string & filename, std::vector<double> & list);
+
   //--------------------------------------------------------------------
   double cotan(double i);
   double invcotan(double i);
@@ -194,9 +235,23 @@ namespace clitk {
   template<class ImageType>
   void CloneImage(const typename ImageType::Pointer & input, typename ImageType::Pointer & output);
 
+  //--------------------------------------------------------------------
+  void PrintMemoryUsed();
+
+  //--------------------------------------------------------------------
+  // Convert a map to a vector
+  template <typename M, typename V>
+  void MapToVecFirst(const M & m, V & v);
+  template <typename M, typename V>
+  void MapToVecSecond(const M & m, V & v);
+
+  //--------------------------------------------------------------------
+  // Find/replace string
+  template<class T>
+  int inline findAndReplace(T& source, const T& find, const T& replace);
+
 #include "clitkCommon.txx"
 
 } // end namespace
 
 #endif /* end #define CLITKCOMMON_H */
-