carl  22.11
Computer ARithmetic Library
Conversion.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <carl-common/config.h>
4 
5 namespace carl {
6 
7 template<typename T, std::enable_if_t<is_ran_type<T>::value, int> = 0>
8 inline T convert(const T& r) {
9  return r;
10 }
11 
12 namespace convert_ran {
13 template<typename T, typename S>
14 struct ConvertHelper {};
15 
16 #ifdef USE_LIBPOLY
17 template<typename R>
18 struct ConvertHelper<LPRealAlgebraicNumber, IntRepRealAlgebraicNumber<R>> {
19  static LPRealAlgebraicNumber convert(const IntRepRealAlgebraicNumber<R>& r) {
20  if(r.is_numeric()){
21  return LPRealAlgebraicNumber(r.value()) ;
22  }
23  return LPRealAlgebraicNumber(r.polynomial(), r.interval());
24  }
25 };
26 
27 template<typename R>
28 struct ConvertHelper<IntRepRealAlgebraicNumber<R>, LPRealAlgebraicNumber> {
29  static IntRepRealAlgebraicNumber<R> convert(const LPRealAlgebraicNumber& r) {
30  if(r.is_numeric()){
31  return IntRepRealAlgebraicNumber<R>(r.value());
32  }
33  return IntRepRealAlgebraicNumber<R>(r.polynomial(), r.interval());
34  }
35 };
36 #endif
37 }
38 
39 template<typename T, typename S, std::enable_if_t<is_ran_type<T>::value && is_ran_type<S>::value && !std::is_same<T,S>::value, int> = 0>
40 inline T convert(const S& r) {
42 }
43 
44 }; // namespace carl
carl is the main namespace for the library.
BasicConstraint< ToPoly > convert(const typename ToPoly::ContextType &context, const BasicConstraint< FromPoly > &c)
Definition: Conversion.h:9
T convert(const T &r)
Definition: Conversion.h:8
const auto & value() const
Definition: Ran.h:227
const auto & interval() const
Definition: Ran.h:222
const auto & polynomial() const
Definition: Ran.h:218
bool is_numeric() const
Definition: Ran.h:214