/* * recast.h * * Created on: Jun 26, 2012 * Author: utke */ #ifndef _RECAST_H_ #define _RECAST_H_ #ifdef HAVE_CONFIG_H #include #else #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" #endif #if !defined(_HAVE_AD_) || defined(_WRAPPERS_) template To reCast(const From& from) { return (To)from; } #else #include "./types.h" template struct ForPartialSpecialization { static To reCast(const From& from ) { return (To) from;} }; template To reCast(const From& from) { return ForPartialSpecialization::reCast(from); } /** * partial specialization */ #ifdef _HAVE_ADOLC_ template struct ForPartialSpecialization { static To reCast(const adouble& from ) { return (To) (from.getValue());} }; #endif #ifdef _HAVE_CODIPACK_ template struct ForPartialSpecialization { static To reCast(const IssmDouble& from ) { return (To) (from.getValue());} }; #endif #endif /*Morlighem's change: we do not want dynamic_casts because of performance * issue, so for now, we just use C-like cast*/ template To xDynamicCast(const From& from) { /*C-like cast (fast but not safe)*/ return (To) from; /*C++ dynamic_cast, poor performance but safer*/ //return dynamic_cast(from); } #endif