source: issm/trunk-jpl/src/c/shared/Numerics/recast.h@ 23244

Last change on this file since 23244 was 23244, checked in by Mathieu Morlighem, 7 years ago

CHG: integrating changes from CoDiPack's branche

File size: 1.4 KB
RevLine 
[12546]1/*
2 * recast.h
3 *
4 * Created on: Jun 26, 2012
5 * Author: utke
6 */
7
8#ifndef _RECAST_H_
9#define _RECAST_H_
10
[13767]11#ifdef HAVE_CONFIG_H
12 #include <config.h>
13#else
14#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
15#endif
[12546]16
[23244]17#if !defined(_HAVE_AD_) || defined(_WRAPPERS_)
[13767]18
[14975]19template<class To, class From> To reCast(const From& from) {
[12546]20 return (To)from;
21}
22
23#else
[14927]24#include "./types.h"
[12546]25
[14975]26template<class To, class From> struct ForPartialSpecialization {
[12546]27 static To reCast(const From& from ) { return (To) from;}
28};
29
[14975]30template<class To, class From> To reCast(const From& from) {
[12546]31 return ForPartialSpecialization<To,From>::reCast(from);
32}
33/**
34 * partial specialization
35 */
[23244]36#ifdef _HAVE_ADOLC_
[14975]37template<class To> struct ForPartialSpecialization<To,adouble> {
[12546]38 static To reCast(const adouble& from ) { return (To) (from.getValue());}
39};
[23244]40#endif
41#ifdef _HAVE_CODIPACK_
42template<class To> struct ForPartialSpecialization<To,IssmDouble> {
43 static To reCast(const IssmDouble& from ) { return (To) (from.getValue());}
44};
45#endif
[12546]46
47#endif
48
[18521]49/*Morlighem's change: we do not want dynamic_casts because of performance
50 * issue, so for now, we just use C-like cast*/
51template<class To,class From> To xDynamicCast(const From& from) {
52
53 /*C-like cast (fast but not safe)*/
54 return (To) from;
55
56 /*C++ dynamic_cast, poor performance but safer*/
57 //return dynamic_cast<To>(from);
58}
59
[12546]60#endif
Note: See TracBrowser for help on using the repository browser.