From 0a92bc147f91f3ecacdf66d995f01f9577107a86 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 15 Feb 2018 09:06:13 +0100 Subject: clean up "static" and "constexpr" types - use `static constexpr inline' to avoid requiring explicit declarations in object code - use `const Foo* const' to maybe put into readonly binary segment (at least for ELF DSOs) - `constexpr' in function scope has storage, avoid `static' - don't use `constexpr' where there's no advantage, like arrays We'd like to avoid overhead of atomic initialization for each function call. No idea how `static constexpr' requiring storage in the standard plays with atomic initialization requirement. Hearsay points that `constexpr' without `static' in block scope behaves more to our liking. It's all hazy though. I'm not 100% sure if `static inline constexpr' has any storage. Hopefully none, like a #define, and stuff bigger than registers gets coalesced within the same module, with small stuff being immediates. --- tracker-aruco/ftnoir_tracker_aruco.cpp | 26 ++++++++++++++++++++++++++ tracker-aruco/ftnoir_tracker_aruco.h | 29 +---------------------------- 2 files changed, 27 insertions(+), 28 deletions(-) (limited to 'tracker-aruco') diff --git a/tracker-aruco/ftnoir_tracker_aruco.cpp b/tracker-aruco/ftnoir_tracker_aruco.cpp index c322d323..faa8bb44 100644 --- a/tracker-aruco/ftnoir_tracker_aruco.cpp +++ b/tracker-aruco/ftnoir_tracker_aruco.cpp @@ -33,6 +33,32 @@ #include #include +static const int adaptive_sizes[] = +{ +#if defined USE_EXPERIMENTAL_CANNY + 10, + 30, + 80, +#else + 7, + 9, + 13, +#endif +}; + +struct resolution_tuple +{ + int width; + int height; +}; + +static const resolution_tuple resolution_choices[] = +{ + { 640, 480 }, + { 320, 240 }, + { 0, 0 } +}; + aruco_tracker::aruco_tracker() { cv::setBreakOnError(true); diff --git a/tracker-aruco/ftnoir_tracker_aruco.h b/tracker-aruco/ftnoir_tracker_aruco.h index 3a98e9d1..b753fdec 100644 --- a/tracker-aruco/ftnoir_tracker_aruco.h +++ b/tracker-aruco/ftnoir_tracker_aruco.h @@ -69,7 +69,7 @@ class aruco_tracker : protected virtual QThread, public ITracker { Q_OBJECT friend class aruco_dialog; - static constexpr float c_search_window = 1.3f; + static constexpr inline float c_search_window = 1.3f; public: aruco_tracker(); ~aruco_tracker() override; @@ -124,44 +124,17 @@ private: unsigned adaptive_size_pos = 0; bool use_otsu = false; - struct resolution_tuple - { - int width; - int height; - }; - - static constexpr inline const int adaptive_sizes[] = - { -#if defined USE_EXPERIMENTAL_CANNY - 10, - 30, - 80, -#else - 7, - 9, - 13, -#endif - }; - #if !defined USE_EXPERIMENTAL_CANNY static constexpr inline int adaptive_thres = 6; #else static constexpr inline int adaptive_thres = 3; #endif - static constexpr inline const resolution_tuple resolution_choices[] = - { - { 640, 480 }, - { 320, 240 }, - { 0, 0 } - }; - #ifdef DEBUG_UNSHARP_MASKING static constexpr inline double gauss_kernel_size = 3; #endif static constexpr inline double timeout = 1; - static constexpr inline double timeout_backoff_c = 4./11; static constexpr inline float size_min = 0.05; -- cgit v1.2.3