# HG changeset patch # User Sebastien Jodogne # Date 1521046082 -3600 # Node ID ff85568745579e060f11ccb4b260bb41248f3c52 # Parent 4da803580da959e955b56d0c28d012668211ff7d speedup diff -r 4da803580da9 -r ff8556874557 Framework/Toolbox/LinearAlgebra.cpp --- a/Framework/Toolbox/LinearAlgebra.cpp Tue Mar 13 20:02:39 2018 +0100 +++ b/Framework/Toolbox/LinearAlgebra.cpp Wed Mar 14 17:48:02 2018 +0100 @@ -94,97 +94,6 @@ } - void AssignVector(Vector& v, - double v1, - double v2) - { - v.resize(2); - v[0] = v1; - v[1] = v2; - } - - - void AssignVector(Vector& v, - double v1) - { - v.resize(1); - v[0] = v1; - } - - - void AssignVector(Vector& v, - double v1, - double v2, - double v3) - { - v.resize(3); - v[0] = v1; - v[1] = v2; - v[2] = v3; - } - - - void AssignVector(Vector& v, - double v1, - double v2, - double v3, - double v4) - { - v.resize(4); - v[0] = v1; - v[1] = v2; - v[2] = v3; - v[3] = v4; - } - - - Vector CreateVector(double v1) - { - Vector v; - AssignVector(v, v1); - return v; - } - - - Vector CreateVector(double v1, - double v2) - { - Vector v; - AssignVector(v, v1, v2); - return v; - } - - - Vector CreateVector(double v1, - double v2, - double v3) - { - Vector v; - AssignVector(v, v1, v2, v3); - return v; - } - - - Vector CreateVector(double v1, - double v2, - double v3, - double v4) - { - Vector v; - AssignVector(v, v1, v2, v3, v4); - return v; - } - - - bool IsNear(double x, - double y) - { - // As most input is read as single-precision numbers, we take the - // epsilon machine for float32 into consideration to compare numbers - return IsNear(x, y, 10.0 * std::numeric_limits::epsilon()); - } - - void NormalizeVector(Vector& u) { double norm = boost::numeric::ublas::norm_2(u); diff -r 4da803580da9 -r ff8556874557 Framework/Toolbox/LinearAlgebra.h --- a/Framework/Toolbox/LinearAlgebra.h Tue Mar 13 20:02:39 2018 +0100 +++ b/Framework/Toolbox/LinearAlgebra.h Wed Mar 14 17:48:02 2018 +0100 @@ -51,37 +51,87 @@ const Orthanc::DicomMap& dataset, const Orthanc::DicomTag& tag); - void AssignVector(Vector& v, - double v1); + inline void AssignVector(Vector& v, + double v1, + double v2) + { + v.resize(2); + v[0] = v1; + v[1] = v2; + } + - void AssignVector(Vector& v, - double v1, - double v2); + inline void AssignVector(Vector& v, + double v1) + { + v.resize(1); + v[0] = v1; + } + - void AssignVector(Vector& v, - double v1, - double v2, - double v3); + inline void AssignVector(Vector& v, + double v1, + double v2, + double v3) + { + v.resize(3); + v[0] = v1; + v[1] = v2; + v[2] = v3; + } + - void AssignVector(Vector& v, - double v1, - double v2, - double v3, - double v4); + inline void AssignVector(Vector& v, + double v1, + double v2, + double v3, + double v4) + { + v.resize(4); + v[0] = v1; + v[1] = v2; + v[2] = v3; + v[3] = v4; + } - Vector CreateVector(double v1); + + inline Vector CreateVector(double v1) + { + Vector v; + AssignVector(v, v1); + return v; + } - Vector CreateVector(double v1, - double v2); + + inline Vector CreateVector(double v1, + double v2) + { + Vector v; + AssignVector(v, v1, v2); + return v; + } - Vector CreateVector(double v1, - double v2, - double v3); + + inline Vector CreateVector(double v1, + double v2, + double v3) + { + Vector v; + AssignVector(v, v1, v2, v3); + return v; + } + - Vector CreateVector(double v1, - double v2, - double v3, - double v4); + inline Vector CreateVector(double v1, + double v2, + double v3, + double v4) + { + Vector v; + AssignVector(v, v1, v2, v3, v4); + return v; + } + inline bool IsNear(double x, double y, @@ -90,8 +140,13 @@ return fabs(x - y) < threshold; } - bool IsNear(double x, - double y); + inline bool IsNear(double x, + double y) + { + // As most input is read as single-precision numbers, we take the + // epsilon machine for float32 into consideration to compare numbers + return IsNear(x, y, 10.0 * std::numeric_limits::epsilon()); + } inline bool IsCloseToZero(double x) {