X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkCommon.h;h=3729584686bdd1d2510d4603000336fe307a0443;hb=08f7de414957e92b25ca5b299007e941b610d3a8;hp=52264cd0258d8f1131a17e3b247b707f624e52d2;hpb=880e33e1299652f7a55ff47b8d65eb89f5578e5e;p=clitk.git diff --git a/common/clitkCommon.h b/common/clitkCommon.h index 52264cd..3729584 100644 --- a/common/clitkCommon.h +++ b/common/clitkCommon.h @@ -1,9 +1,9 @@ /*========================================================================= 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://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,14 +14,14 @@ - 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 "clitkConfiguration.h" #include "clitkPortability.h" +#include "clitkDD.h" #include "clitkExceptionObject.h" // itk include (include std) @@ -30,8 +30,21 @@ #include #include +// std include #include +// Include for "rusage" +#include +#if defined(unix) || defined(__APPLE__) +# include +# include +#elif defined(_WIN32) +# include +# include +#endif + +#define VTK_EXCLUDE_STRSTREAM_HEADERS + //-------------------------------------------------------------------- namespace clitk { @@ -39,20 +52,32 @@ namespace clitk { typedef unsigned short ushort; typedef unsigned int uint; - //-------------------------------------------------------------------- - // display -#define DD(a) std::cout << #a " = [ " << a << " ]" << std::endl;std::cout.flush(); -#define DDV(a,n) { std::cout << #a " = [ "; for(unsigned int _i_=0; _i_ -void _print_container(T const& a) - { for(typename T::const_iterator i=a.begin();i!=a.end();++i) { std::cout << *i << " "; };} -#define DDS(a) { std::cout << #a " = [ "; _print_container(a) ; std::cout << " ]" << std::endl;std::cout.flush():} +#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) \ @@ -60,7 +85,7 @@ void _print_container(T const& a) 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 # @@ -73,13 +98,19 @@ void _print_container(T const& a) //-------------------------------------------------------------------- // 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 SplitFilename(const std::string& filename); + //-------------------------------------------------------------------- // Convert float, double ... to string template std::string toString(const T & t); template std::string toStringVector(const T * t, const int n); template std::string toStringVector(const T & t, const int n); template std::string toStringVector(const std::vector & t); + template bool fromString(T& t, + const std::string& s, + std::ios_base& (*f)(std::ios_base&)=std::dec); //-------------------------------------------------------------------- // Display a progress % @@ -92,6 +123,8 @@ void _print_container(T const& a) 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 @@ -104,7 +137,7 @@ void _print_container(T const& a) // Return the name of a type as a string template std::string GetTypeAsString(); - + //-------------------------------------------------------------------- // Convert radian / degree double rad2deg(double anglerad); @@ -127,13 +160,13 @@ void _print_container(T const& a) std::string CreateListOfTypes(bool last=true) { return GetTypeAsString(); } - + template std::string CreateListOfTypes(bool last=true) { if (last) return CreateListOfTypes()+" and "+CreateListOfTypes(); else return CreateListOfTypes()+", "+CreateListOfTypes(); } - + template std::string CreateListOfTypes(bool last=true) { if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); @@ -170,7 +203,7 @@ void _print_container(T const& a) else return CreateListOfTypes(false)+", "+CreateListOfTypes(); } //-------------------------------------------------------------------- - + //-------------------------------------------------------------------- void FindAndReplace(std::string & line, const std::string & tofind, const std::string & replacement); void FindAndReplace(std::string & line, const std::vector & tofind, const std::vector & toreplace); @@ -178,8 +211,8 @@ void _print_container(T const& a) //-------------------------------------------------------------------- //-------------------------------------------------------------------- - double ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, - const itk::ContinuousIndex pointInPlane, + double ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, + const itk::ContinuousIndex pointInPlane, const itk::ContinuousIndex normalPlane); //-------------------------------------------------------------------- @@ -202,9 +235,23 @@ void _print_container(T const& a) template void CloneImage(const typename ImageType::Pointer & input, typename ImageType::Pointer & output); + //-------------------------------------------------------------------- + void PrintMemoryUsed(); + + //-------------------------------------------------------------------- + // Convert a map to a vector + template + void MapToVecFirst(const M & m, V & v); + template + void MapToVecSecond(const M & m, V & v); + + //-------------------------------------------------------------------- + // Find/replace string + template + int inline findAndReplace(T& source, const T& find, const T& replace); + #include "clitkCommon.txx" } // end namespace #endif /* end #define CLITKCOMMON_H */ -