]> Creatis software - clitk.git/blobdiff - common/clitkCommon.h
Debug RTStruct conversion with empty struc
[clitk.git] / common / clitkCommon.h
index 769ca63f0bf4400cbb783cf53d3bd7b44b3fc293..3729584686bdd1d2510d4603000336fe307a0443 100644 (file)
@@ -1,7 +1,7 @@
 /*=========================================================================
   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
 
-  Authors belong to: 
+  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
 #include <fstream>
 
 // Include for "rusage"
-#include <ctime> 
+#include <ctime>
 #if defined(unix) || defined(__APPLE__)
 #  include <sys/time.h>
 #  include <sys/resource.h>
-#elif defined(WIN32)
+#elif defined(_WIN32)
 #  include <windows.h>
+#  include <stdint.h>
 #endif
 
+#define VTK_EXCLUDE_STRSTREAM_HEADERS
+
 //--------------------------------------------------------------------
 namespace clitk {
 
   typedef unsigned char uchar;
   typedef unsigned short ushort;
   typedef unsigned int uint;
-  
+
 #define CLITK_TRY_CATCH_EXIT(func) \
   try { \
     func; \
@@ -65,13 +68,16 @@ namespace clitk {
     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)                                    \
@@ -79,7 +85,7 @@ namespace clitk {
   cmdline_parser_##ggo_filename##2(argc, argv, &args_info, 1, 1, 0);                   \
   if (args_info.config_given)                                          \
     cmdline_parser_##ggo_filename##_configfile (args_info.config_arg, &args_info, 0, 0, 1); \
-  else cmdline_parser_##ggo_filename(argc, argv, &args_info);  
+  else cmdline_parser_##ggo_filename(argc, argv, &args_info);
 
   //--------------------------------------------------------------------
   // skip line with #
@@ -92,15 +98,18 @@ 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, 
+  template <class T> bool fromString(T& t,
+                                     const std::string& s,
                                      std::ios_base& (*f)(std::ios_base&)=std::dec);
 
   //--------------------------------------------------------------------
@@ -114,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
@@ -126,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);
@@ -149,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>();
@@ -192,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);
@@ -200,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);
 
   //--------------------------------------------------------------------
@@ -229,14 +240,18 @@ namespace clitk {
 
   //--------------------------------------------------------------------
   // Convert a map to a vector
-  template <typename M, typename V> 
+  template <typename M, typename V>
   void MapToVecFirst(const M & m, V & v);
-  template <typename M, typename 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 */
-