diff --git a/include/gnss_utils/navigation.h b/include/gnss_utils/navigation.h index 3f0317e17c1ada0c8a5c5dfa2c586b96cff02fba..f5008e9eb8f304d9132c4a0267da1b4b971c5fba 100644 --- a/include/gnss_utils/navigation.h +++ b/include/gnss_utils/navigation.h @@ -13,24 +13,6 @@ extern "C" namespace GNSSUtils { -//////////////////////////////// nav UTILS ////////////////////////////////////// -template <typename T> -bool addToArray(const T &new_element, T *array, int &n, int &nmax); -template <typename T> -bool copyArray(const T *array_in, const int &n_in, T *array_out, int &n_out, int &nmax_out); -template <typename T> -void freeArray(T *array, int &n, int &nmax); -void freeNavArrays(nav_t& nav); -void freeEph(nav_t& nav); -void freeGeph(nav_t& nav); -void freeSeph(nav_t& nav); -void freePeph(nav_t& nav); -void freeAlm(nav_t& nav); -void freePclk(nav_t& nav); -void freeTec(nav_t& nav); -void freeFcb(nav_t& nav); - -//////////////////////////////// Navigation Class ////////////////////////////////////// class Navigation; typedef std::shared_ptr<Navigation> NavigationPtr; typedef std::shared_ptr<const Navigation> NavigationConstPtr; @@ -84,6 +66,23 @@ class Navigation void print(); + //////////////////////////////// nav UTILS ////////////////////////////////////// + template <typename T> + static bool addToArray(const T &new_element, T *array, int &n, int &nmax); + template <typename T> + static bool copyArray(const T *array_in, const int &n_in, T *array_out, int &n_out, int &nmax_out); + template <typename T> + static void freeArray(T *array, int &n, int &nmax); + static void freeEph(nav_t &nav); + static void freeGeph(nav_t &nav); + static void freeSeph(nav_t &nav); + static void freePeph(nav_t &nav); + static void freeAlm(nav_t &nav); + static void freePclk(nav_t &nav); + static void freeTec(nav_t &nav); + static void freeFcb(nav_t &nav); + static void freeNavArrays(nav_t &nav); + private: // rtklib-like attribute to represent the different navigation msgs for a given epoch @@ -251,7 +250,7 @@ inline void Navigation::freeAlmanac() //////////////////////////////// nav UTILS ////////////////////////////////////// template <typename T> -bool addToArray(const T &new_element, T *array, int &n, int &nmax) +bool Navigation::addToArray(const T &new_element, T *array, int &n, int &nmax) { // "inspired" from RTKLIB rinex.c T *array_ref; @@ -273,7 +272,7 @@ bool addToArray(const T &new_element, T *array, int &n, int &nmax) } template<typename T> -bool copyArray(const T *array_in, const int &n_in, T *array_out, int &n_out, int &nmax_out) +bool Navigation::copyArray(const T *array_in, const int &n_in, T *array_out, int &n_out, int &nmax_out) { if (array_in == NULL) return false; @@ -286,7 +285,7 @@ bool copyArray(const T *array_in, const int &n_in, T *array_out, int &n_out, int } template<typename T> -void freeArray(T *array, int &n, int &nmax) +void Navigation::freeArray(T *array, int &n, int &nmax) { if (array != NULL) free(array); @@ -294,57 +293,58 @@ void freeArray(T *array, int &n, int &nmax) n = nmax = 0; } -void freeNavArrays(nav_t& nav) -{ - // RTKLIB "freenav(&nav_,255)" doesn't check if is NULL before freeing - freeEph(nav); - freeGeph(nav); - freeSeph(nav); - freePeph(nav); - freePclk(nav); - freeAlm(nav); - freeTec(nav); - freeFcb(nav); -} - -void freeEph(nav_t& nav) +inline void Navigation::freeEph(nav_t &nav) { freeArray<eph_t>(nav.eph, nav.n, nav.nmax); } -void freeGeph(nav_t& nav) +inline void Navigation::freeGeph(nav_t &nav) { freeArray<geph_t>(nav.geph, nav.ng, nav.ngmax); } -void freeSeph(nav_t& nav) +inline void Navigation::freeSeph(nav_t &nav) { freeArray<seph_t>(nav.seph, nav.ns, nav.nsmax); } -void freePeph(nav_t& nav) + +inline void Navigation::freePeph(nav_t &nav) { freeArray<peph_t>(nav.peph, nav.ne, nav.nemax); } -void freeAlm(nav_t& nav) +inline void Navigation::freeAlm(nav_t &nav) { freeArray<alm_t>(nav.alm, nav.na, nav.namax); } -void freePclk(nav_t& nav) +inline void Navigation::freePclk(nav_t &nav) { freeArray<pclk_t>(nav.pclk, nav.nc, nav.ncmax); } -void freeTec(nav_t& nav) +inline void Navigation::freeTec(nav_t &nav) { freeArray<tec_t>(nav.tec, nav.nt, nav.ntmax); } -void freeFcb(nav_t& nav) +inline void Navigation::freeFcb(nav_t &nav) { freeArray<fcbd_t>(nav.fcb, nav.nf, nav.nfmax); } +inline void Navigation::freeNavArrays(nav_t &nav) +{ + // RTKLIB "freenav(&nav_,255)" doesn't check if is NULL before freeing + freeEph(nav); + freeGeph(nav); + freeSeph(nav); + freePeph(nav); + freePclk(nav); + freeAlm(nav); + freeTec(nav); + freeFcb(nav); +} + } #endif diff --git a/src/navigation.cpp b/src/navigation.cpp index 3f3724a75ba4e2266269a83e2f06c0f6e026224e..4296b9770b0f3669c884c6fac170ad8823d8b695 100644 --- a/src/navigation.cpp +++ b/src/navigation.cpp @@ -1,6 +1,5 @@ #include "gnss_utils/navigation.h" - using namespace GNSSUtils; Navigation::Navigation()