Skip to content
Snippets Groups Projects
Commit 7bdc9a58 authored by René Fritze's avatar René Fritze
Browse files

[common] floatcmp: add forward for arithmetic types, add "ne"

parent 36a23798
No related branches found
No related tags found
No related merge requests found
......@@ -11,33 +11,56 @@
#include <dune/stuff/la/container/eigen.hh>
#endif
#include <type_traits>
namespace Dune {
namespace Stuff {
namespace Common {
namespace FloatCmp {
template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
typename std::enable_if<std::is_arithmetic<T>::value, bool>::type
ne(const T& first, const T& second,
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
return Dune::FloatCmp::ne<T, style>(first, second, epsilon);
}
template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
typename std::enable_if<std::is_arithmetic<T>::value, bool>::type
eq(const T& first, const T& second,
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
return Dune::FloatCmp::eq<T, style>(first, second, epsilon);
}
template <class T, template <class> class FirstVectorType, template <class> class SecondVectorType = FirstVectorType,
Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
bool ne(const FirstVectorType<T>& first, const SecondVectorType<T>& second,
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
return !eq(first, second, epsilon);
}
template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
bool eq(const Dune::DynamicVector<T>& first, const Dune::DynamicVector<T>& second,
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
assert(first.size() == second.size());
bool result = true;
for (size_t ii = 0; ii < first.size(); ++ii)
if (!Dune::FloatCmp::eq<T, style>(first[ii], second[ii], epsilon))
result = false;
return result;
if (Dune::FloatCmp::ne<T, style>(first[ii], second[ii], epsilon))
return false;
return true;
} // ... eq(...)
template <class T, int size, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
bool eq(const Dune::FieldVector<T, size>& first, const Dune::FieldVector<T, size>& second,
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
bool result = true;
for (size_t ii = 0; ii < size; ++ii)
if (!Dune::FloatCmp::eq<T, style>(first[ii], second[ii], epsilon))
result = false;
return result;
if (Dune::FloatCmp::ne<T, style>(first[ii], second[ii], epsilon))
return false;
return true;
} // ... eq(...)
#if HAVE_EIGEN
......@@ -46,11 +69,10 @@ bool eq(const Dune::Stuff::LA::EigenDenseVector<T>& first, const Dune::Stuff::LA
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
assert(first.size() == second.size());
bool result = true;
for (size_t ii = 0; ii < first.size(); ++ii)
if (!Dune::FloatCmp::eq<T, style>(first.backend()[ii], second.backend()[ii], epsilon))
result = false;
return result;
return false;
return true;
} // ... eq(...)
template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
......@@ -58,11 +80,10 @@ bool eq(const Dune::DynamicVector<T>& first, const Dune::Stuff::LA::EigenDenseVe
typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
{
assert(first.size() == second.size());
bool result = true;
for (size_t ii = 0; ii < first.size(); ++ii)
if (!Dune::FloatCmp::eq<T, style>(first[ii], second.backend()[ii], epsilon))
result = false;
return result;
return false;
return true;
} // ... eq(...)
#endif // HAVE_EIGEN
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment