summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--compat/copyable-mutex.cpp9
-rw-r--r--compat/copyable-mutex.hpp6
-rw-r--r--compat/qhash.hpp15
-rw-r--r--cv/translation-calibrator.cpp4
-rw-r--r--dinput/keybinding-worker.cpp2
-rw-r--r--dinput/win32-joystick.hpp17
-rw-r--r--filter-accela/ftnoir_filter_accela.cpp4
-rw-r--r--filter-ewma2/ftnoir_filter_ewma2.cpp4
-rw-r--r--filter-kalman/kalman.cpp4
-rw-r--r--gui/init.cpp2
-rw-r--r--logic/pipeline.cpp2
-rw-r--r--logic/tracklogger.cpp7
-rw-r--r--logic/tracklogger.hpp38
-rw-r--r--logic/work.cpp61
-rw-r--r--logic/work.hpp19
-rw-r--r--migration/migration.cpp8
-rw-r--r--migration/migration.hpp2
-rw-r--r--options/base-value.cpp7
-rw-r--r--options/slider.cpp45
-rw-r--r--options/slider.hpp36
-rw-r--r--options/tie.hpp4
-rw-r--r--pose-widget/pose-widget.cpp4
-rw-r--r--proto-flightgear/ftnoir_protocol_fg.cpp2
-rw-r--r--proto-simconnect/ftnoir_protocol_sc.cpp2
-rw-r--r--proto-vjoystick/vjoystick.cpp9
-rw-r--r--spline/spline.cpp4
-rw-r--r--tracker-aruco/ftnoir_tracker_aruco.cpp4
-rw-r--r--tracker-fusion/fusion.cpp4
-rw-r--r--tracker-hydra/ftnoir_tracker_hydra.cpp2
-rw-r--r--tracker-joystick/ftnoir_tracker_joystick.cpp2
-rw-r--r--tracker-pt/point_tracker.cpp12
-rw-r--r--tracker-rs/imagewidget.cpp5
-rw-r--r--tracker-rs/imagewidget.h2
-rw-r--r--tracker-s2bot/ftnoir_tracker_s2bot.cpp2
-rw-r--r--tracker-steamvr/steamvr.cpp4
-rw-r--r--tracker-test/test.cpp2
-rw-r--r--tracker-wii/wii_camera.cpp6
-rw-r--r--tracker-wii/wii_frame.hpp2
-rw-r--r--variant/default/main-window.hpp6
39 files changed, 156 insertions, 214 deletions
diff --git a/compat/copyable-mutex.cpp b/compat/copyable-mutex.cpp
index 7c112c5e..dde84c83 100644
--- a/compat/copyable-mutex.cpp
+++ b/compat/copyable-mutex.cpp
@@ -2,10 +2,7 @@
mutex& mutex::operator=(const mutex& datum)
{
- inner = nullptr;
- inner = std::make_unique<QMutex>(datum->isRecursive()
- ? QMutex::Recursive
- : QMutex::NonRecursive);
+ inner.emplace(datum->isRecursive() ? QMutex::Recursive : QMutex::NonRecursive);
return *this;
}
@@ -15,7 +12,7 @@ mutex::mutex(const mutex& datum)
}
mutex::mutex(mutex::mode m) :
- inner(std::make_unique<QMutex>(static_cast<QMutex::RecursionMode>(int(m))))
+ inner { std::in_place, static_cast<QMutex::RecursionMode>(int(m)) }
{
}
@@ -31,6 +28,6 @@ QMutex* mutex::operator->() const
mutex::operator QMutex*() const
{
- return const_cast<QMutex*>(inner.get());
+ return const_cast<QMutex*>(&inner.value());
}
diff --git a/compat/copyable-mutex.hpp b/compat/copyable-mutex.hpp
index af82876d..46c6c88c 100644
--- a/compat/copyable-mutex.hpp
+++ b/compat/copyable-mutex.hpp
@@ -1,6 +1,6 @@
#pragma once
-#include <memory>
+#include <optional>
#include <QMutex>
@@ -8,7 +8,7 @@
class OTR_COMPAT_EXPORT mutex
{
- std::unique_ptr<QMutex> inner;
+ std::optional<QMutex> inner;
public:
enum mode
@@ -19,7 +19,7 @@ public:
mutex& operator=(const mutex& datum);
mutex(const mutex& datum);
- mutex(mode m = normal);
+ explicit mutex(mode m = normal);
QMutex* operator&() const;
operator QMutex*() const;
diff --git a/compat/qhash.hpp b/compat/qhash.hpp
new file mode 100644
index 00000000..a9685007
--- /dev/null
+++ b/compat/qhash.hpp
@@ -0,0 +1,15 @@
+#pragma once
+
+#include <functional>
+#include <QString>
+#include <QHashFunctions>
+
+namespace std {
+template<> struct hash<QString>
+{
+ inline unsigned operator()(const QString& value) const
+ {
+ return qHash(value);
+ }
+};
+}
diff --git a/cv/translation-calibrator.cpp b/cv/translation-calibrator.cpp
index 1eb9d1fa..d08e0c43 100644
--- a/cv/translation-calibrator.cpp
+++ b/cv/translation-calibrator.cpp
@@ -62,8 +62,8 @@ std::tuple<cv::Vec3f, cv::Vec3i> TranslationCalibrator::get_estimate()
for (unsigned k = 0; k < 3; k++)
{
const vec& data = *in[k];
- for (unsigned i = 0; i < data.size(); i++)
- if (data[i])
+ for (unsigned i : data)
+ if (i)
values[k]++;
}
diff --git a/dinput/keybinding-worker.cpp b/dinput/keybinding-worker.cpp
index c7547107..9c2b06d4 100644
--- a/dinput/keybinding-worker.cpp
+++ b/dinput/keybinding-worker.cpp
@@ -16,7 +16,7 @@
#include <windows.h>
-Key::Key() {}
+Key::Key() = default;
bool Key::should_process()
{
diff --git a/dinput/win32-joystick.hpp b/dinput/win32-joystick.hpp
index a6a4edc9..757a9706 100644
--- a/dinput/win32-joystick.hpp
+++ b/dinput/win32-joystick.hpp
@@ -7,34 +7,24 @@
*/
#pragma once
-#ifdef _WIN32
-
#include "dinput.hpp"
#include "compat/timer.hpp"
+#include "compat/qhash.hpp"
#include "export.hpp"
+
#include <cstring>
#include <memory>
#include <vector>
#include <functional>
#include <algorithm>
#include <unordered_map>
+
#include <QString>
#include <QDebug>
#include <QMutex>
#include <QMutexLocker>
#include <QWidget>
-namespace std {
-template<>
-struct hash<QString>
-{
- inline std::size_t operator()(const QString& value) const
- {
- return qHash(value);
- }
-};
-}
-
struct OTR_DINPUT_EXPORT win32_joy_ctx final
{
using fn = std::function<void(const QString& guid, int btn, bool held)>;
@@ -102,4 +92,3 @@ private:
static enum_state enumerator;
};
-#endif
diff --git a/filter-accela/ftnoir_filter_accela.cpp b/filter-accela/ftnoir_filter_accela.cpp
index 9484fafe..f96bd2d2 100644
--- a/filter-accela/ftnoir_filter_accela.cpp
+++ b/filter-accela/ftnoir_filter_accela.cpp
@@ -84,8 +84,8 @@ void accela::filter(const double* input, double *output)
return;
}
- const double rot_thres = s.rot_smoothing.to<double>();
- const double pos_thres = s.pos_smoothing.to<double>();
+ const double rot_thres { s.rot_smoothing };
+ const double pos_thres { s.pos_smoothing };
const double dt = t.elapsed_seconds();
t.start();
diff --git a/filter-ewma2/ftnoir_filter_ewma2.cpp b/filter-ewma2/ftnoir_filter_ewma2.cpp
index b29746a0..46c4796d 100644
--- a/filter-ewma2/ftnoir_filter_ewma2.cpp
+++ b/filter-ewma2/ftnoir_filter_ewma2.cpp
@@ -22,9 +22,7 @@
// to minSmooth at a rate controlled by the powCurve setting.
-ewma::ewma()
-{
-}
+ewma::ewma() = default;
void ewma::filter(const double *input, double *output)
{
diff --git a/filter-kalman/kalman.cpp b/filter-kalman/kalman.cpp
index 472f01f0..f88d7f90 100644
--- a/filter-kalman/kalman.cpp
+++ b/filter-kalman/kalman.cpp
@@ -195,8 +195,8 @@ void kalman::reset()
first_run = true;
dt_since_last_input = 0;
- prev_slider_pos[0] = static_cast<slider_value>(s.noise_pos_slider_value);
- prev_slider_pos[1] = static_cast<slider_value>(s.noise_rot_slider_value);
+ prev_slider_pos[0] = s.noise_pos_slider_value;
+ prev_slider_pos[1] = s.noise_rot_slider_value;
dz_filter.reset();
}
diff --git a/gui/init.cpp b/gui/init.cpp
index 75f6b1eb..0e9d746a 100644
--- a/gui/init.cpp
+++ b/gui/init.cpp
@@ -81,7 +81,7 @@ void qdebug_to_console(QtMsgType, const QMessageLogContext& ctx, const QString &
{
const unsigned short* const str_ = msg.utf16();
auto str = reinterpret_cast<const wchar_t* const>(str_);
- static_assert(sizeof(*str_) == sizeof(*str), "");
+ static_assert(sizeof(*str_) == sizeof(*str));
std::fflush(stderr);
if (ctx.function)
diff --git a/logic/pipeline.cpp b/logic/pipeline.cpp
index c8cdc72d..a7cf0c4e 100644
--- a/logic/pipeline.cpp
+++ b/logic/pipeline.cpp
@@ -35,7 +35,7 @@ using namespace pipeline_impl;
static constexpr inline double r2d = 180. / M_PI;
static constexpr inline double d2r = M_PI / 180.;
-reltrans::reltrans() {}
+reltrans::reltrans() = default;
void reltrans::on_center()
{
diff --git a/logic/tracklogger.cpp b/logic/tracklogger.cpp
index 35510cb3..a287b633 100644
--- a/logic/tracklogger.cpp
+++ b/logic/tracklogger.cpp
@@ -1,7 +1,12 @@
#include "tracklogger.hpp"
#include "pipeline.hpp"
-TrackLogger::~TrackLogger() {}
+#include <QMessageBox>
+
+void TrackLogger::write_pose(const double* p)
+{
+ write(p, 6);
+}
void TrackLogger::reset_dt()
{
diff --git a/logic/tracklogger.hpp b/logic/tracklogger.hpp
index 0a8d5410..d6c34157 100644
--- a/logic/tracklogger.hpp
+++ b/logic/tracklogger.hpp
@@ -5,41 +5,21 @@
#include <fstream>
#include <QString>
-#include <QMessageBox>
-#include <QWidget>
+#include <QDebug>
class OTR_LOGIC_EXPORT TrackLogger
{
- TrackLogger(TrackLogger&&) = delete;
- TrackLogger(const TrackLogger&) = delete;
- TrackLogger& operator=(const TrackLogger&) = delete;
- TrackLogger& operator=(TrackLogger&&) = delete;
-
Timer t;
public:
- TrackLogger()
- {
- }
-
- virtual ~TrackLogger();
-
- virtual void write(const char *)
- {
- }
+ TrackLogger() = default;
+ virtual ~TrackLogger() = default;
- virtual void write(const double *, int)
- {
- }
+ virtual void write(const char *) {}
+ virtual void write(const double *, int) {}
+ virtual void next_line() {}
- virtual void next_line()
- {
- }
-
- void write_pose(const double *p)
- {
- write(p, 6);
- }
+ void write_pose(const double *p);
void reset_dt();
void write_dt();
@@ -49,10 +29,10 @@ public:
class OTR_LOGIC_EXPORT TrackLoggerCSV : public TrackLogger
{
std::ofstream out;
- bool first_col;
+ bool first_col = true;
inline void handle_first_col_sep();
public:
- TrackLoggerCSV(const QString &filename) : first_col(true)
+ explicit TrackLoggerCSV(const QString &filename)
{
out.open(filename.toStdString());
}
diff --git a/logic/work.cpp b/logic/work.cpp
index 16538382..14d628a7 100644
--- a/logic/work.cpp
+++ b/logic/work.cpp
@@ -1,6 +1,8 @@
#include "work.hpp"
#include "compat/library-path.hpp"
+#include <utility>
+
#include <QObject>
#include <QMessageBox>
#include <QFileDialog>
@@ -29,72 +31,72 @@ QString Work::browse_datalogging_file(main_settings &s)
return newfilename;
}
-std::shared_ptr<TrackLogger> Work::make_logger(main_settings &s)
+std::unique_ptr<TrackLogger> Work::make_logger(main_settings &s)
{
if (s.tracklogging_enabled)
{
QString filename = browse_datalogging_file(s);
if (filename.isEmpty())
{
- // The user probably canceled the file dialog. In this case we don't want to do anything.
+ // The user probably canceled the file dialog. In this case we don't want to do anything.
+ return {};
}
else
{
- auto logger = std::make_shared<TrackLoggerCSV>(s.tracklogging_filename);
+ auto logger = std::make_unique<TrackLoggerCSV>(s.tracklogging_filename);
+
if (!logger->is_open())
{
- logger = nullptr;
QMessageBox::warning(nullptr,
tr("Logging error"),
tr("Unable to open file '%1'. Proceeding without logging.").arg(s.tracklogging_filename),
QMessageBox::Ok, QMessageBox::NoButton);
}
else
- {
return logger;
- }
}
}
- return std::make_shared<TrackLogger>();
+
+ return std::make_unique<TrackLogger>();
}
-Work::Work(Mappings& m, event_handler& ev, QFrame* frame, std::shared_ptr<dylib> tracker_, std::shared_ptr<dylib> filter_, std::shared_ptr<dylib> proto_) :
+Work::Work(Mappings& m, event_handler& ev, QFrame* frame,
+ const dylibptr& tracker_, const dylibptr& filter_, const dylibptr& proto_) :
libs(frame, tracker_, filter_, proto_),
- logger(make_logger(s)),
- tracker(std::make_shared<pipeline>(m, libs, ev, *logger)),
- sc(std::make_shared<Shortcuts>()),
+ logger{make_logger(s)},
+ pipeline_{ m, libs, ev, *logger },
keys {
#if defined OTR_HAS_KEY_UP_SUPPORT
- key_tuple(s.key_center1, [&](bool x) { tracker->set_center(); tracker->set_held_center(x); }, false),
- key_tuple(s.key_center2, [&](bool x) { tracker->set_center(); tracker->set_held_center(x); }, false),
+ key_tuple(s.key_center1, [&](bool x) { pipeline_.set_center(); pipeline_.set_held_center(x); }, false),
+ key_tuple(s.key_center2, [&](bool x) { pipeline_.set_center(); pipeline_.set_held_center(x); }, false),
#else
- key_tuple(s.key_center1, [&](bool) { tracker->set_center(); }, true),
- key_tuple(s.key_center2, [&](bool) { tracker->set_center(); }, true),
+ key_tuple(s.key_center1, [&](bool) { pipeline_.set_center(); }, true),
+ key_tuple(s.key_center2, [&](bool) { pipeline_.set_center(); }, true),
#endif
- key_tuple(s.key_toggle1, [&](bool) { tracker->toggle_enabled(); }, true),
- key_tuple(s.key_toggle2, [&](bool) { tracker->toggle_enabled(); }, true),
+ key_tuple(s.key_toggle1, [&](bool) { pipeline_.toggle_enabled(); }, true),
+ key_tuple(s.key_toggle2, [&](bool) { pipeline_.toggle_enabled(); }, true),
- key_tuple(s.key_zero1, [&](bool) { tracker->toggle_zero(); }, true),
- key_tuple(s.key_zero2, [&](bool) { tracker->toggle_zero(); }, true),
+ key_tuple(s.key_zero1, [&](bool) { pipeline_.toggle_zero(); }, true),
+ key_tuple(s.key_zero2, [&](bool) { pipeline_.toggle_zero(); }, true),
- key_tuple(s.key_toggle_press1, [&](bool x) { tracker->set_enabled(!x); }, false),
- key_tuple(s.key_toggle_press2, [&](bool x) { tracker->set_enabled(!x); }, false),
+ key_tuple(s.key_toggle_press1, [&](bool x) { pipeline_.set_enabled(!x); }, false),
+ key_tuple(s.key_toggle_press2, [&](bool x) { pipeline_.set_enabled(!x); }, false),
- key_tuple(s.key_zero_press1, [&](bool x) { tracker->set_zero(x); }, false),
- key_tuple(s.key_zero_press2, [&](bool x) { tracker->set_zero(x); }, false),
+ key_tuple(s.key_zero_press1, [&](bool x) { pipeline_.set_zero(x); }, false),
+ key_tuple(s.key_zero_press2, [&](bool x) { pipeline_.set_zero(x); }, false),
}
{
if (!is_ok())
return;
reload_shortcuts();
- tracker->start();
+ pipeline_.start();
}
void Work::reload_shortcuts()
{
- sc->reload(keys);
+ sc.reload(keys);
}
bool Work::is_ok() const
@@ -102,10 +104,13 @@ bool Work::is_ok() const
return libs.correct;
}
+// TODO member dtor order looks fine, check valgrind -sh 20180706
+#if 0
Work::~Work()
{
// order matters, otherwise use-after-free -sh
- sc = nullptr;
- tracker = nullptr;
- libs = runtime_libraries();
+ //sc = nullptr;
+ //pipeline = nullptr;
+ //libs = runtime_libraries();
}
+#endif
diff --git a/logic/work.hpp b/logic/work.hpp
index d5bb201e..212bb15d 100644
--- a/logic/work.hpp
+++ b/logic/work.hpp
@@ -29,22 +29,23 @@ class OTR_LOGIC_EXPORT Work final : public TR
{
Q_OBJECT
+ using dylibptr = std::shared_ptr<dylib>;
+
+ static std::unique_ptr<TrackLogger> make_logger(main_settings &s);
+ static QString browse_datalogging_file(main_settings &s);
+
public:
using fn_t = std::function<void(bool)>;
using key_tuple = std::tuple<key_opts&, fn_t, bool>;
main_settings s; // tracker needs settings, so settings must come before it
runtime_libraries libs; // idem
- std::shared_ptr<TrackLogger> logger; // must come before tracker, since tracker depends on it
- std::shared_ptr<pipeline> tracker;
- std::shared_ptr<Shortcuts> sc;
+ std::unique_ptr<TrackLogger> logger; // must come before tracker, since tracker depends on it
+ pipeline pipeline_;
+ Shortcuts sc;
std::vector<key_tuple> keys;
- Work(Mappings& m, event_handler& ev, QFrame* frame, std::shared_ptr<dylib> tracker, std::shared_ptr<dylib> filter, std::shared_ptr<dylib> proto);
- ~Work();
+ Work(Mappings& m, event_handler& ev, QFrame* frame,
+ const dylibptr& tracker, const dylibptr& filter, const dylibptr& proto);
void reload_shortcuts();
bool is_ok() const;
-
-private:
- static std::shared_ptr<TrackLogger> make_logger(main_settings &s);
- static QString browse_datalogging_file(main_settings &s);
};
diff --git a/migration/migration.cpp b/migration/migration.cpp
index 569dff99..8e5fea5e 100644
--- a/migration/migration.cpp
+++ b/migration/migration.cpp
@@ -29,11 +29,11 @@ namespace detail {
static std::vector<mptr> migration_list;
static std::vector<mfun> migration_thunks;
-void migrator::register_migration(mptr m)
+void migrator::register_migration(mptr const& m)
{
const QString date = m->unique_date();
- for (mptr m2 : migration_list)
+ for (mptr const& m2 : migration_list)
if (m2->unique_date() == date)
std::abort();
@@ -77,7 +77,7 @@ void migrator::eval_thunks()
mptr m = fun();
register_migration(m);
}
- if (migration_thunks.size())
+ if (!migration_thunks.empty())
sort_migrations();
migration_thunks.clear();
}
@@ -118,7 +118,7 @@ QString migrator::time_after_migrations()
{
const std::vector<mptr>& list = migrations();
- if (list.size() == 0u)
+ if (list.empty())
return QStringLiteral("19700101_00");
QString ret = list[list.size() - 1]->unique_date();
diff --git a/migration/migration.hpp b/migration/migration.hpp
index 48689fc6..42c8bead 100644
--- a/migration/migration.hpp
+++ b/migration/migration.hpp
@@ -33,7 +33,7 @@ namespace detail {
private:
static void sort_migrations();
- static void register_migration(mptr m);
+ static void register_migration(const mptr& m);
static std::vector<mptr>& migrations();
static void eval_thunks();
diff --git a/options/base-value.cpp b/options/base-value.cpp
index d900ad0f..bcbbd1dc 100644
--- a/options/base-value.cpp
+++ b/options/base-value.cpp
@@ -2,7 +2,7 @@
using namespace options;
-value_::value_(bundle b, const QString& name, value_::comparator cmp, std::type_index type_idx) :
+value_::value_(bundle const& b, const QString& name, value_::comparator cmp, std::type_index type_idx) :
b(b),
self_name(name),
cmp(cmp),
@@ -21,11 +21,6 @@ void value_::notify() const
bundle_value_changed();
}
-void value_::store(const QVariant& datum)
-{
- b->store_kv(self_name, datum);
-}
-
namespace options::detail {
void set_base_value_to_default(value_* val)
diff --git a/options/slider.cpp b/options/slider.cpp
index 56d9ba16..5789e951 100644
--- a/options/slider.cpp
+++ b/options/slider.cpp
@@ -11,7 +11,7 @@
namespace options {
-slider_value::slider_value(double cur, double min, double max) :
+constexpr slider_value::slider_value(double cur, double min, double max) :
cur_(cur),
min_(min),
max_(max)
@@ -24,48 +24,31 @@ slider_value::slider_value(double cur, double min, double max) :
cur_ = min_;
}
-slider_value& slider_value::operator=(const slider_value& v)
+template<typename t>
+static constexpr auto abs_(t x)
{
- if (this != &v)
- {
- cur_ = v.cur();
- min_ = v.min();
- max_ = v.max();
- }
-
- return *this;
+ return x < t{0} ? -x : x;
}
-slider_value::slider_value(const slider_value& v)
+constexpr bool slider_value::operator==(const slider_value& v) const
{
- *this = v;
-}
-
-slider_value::slider_value() : slider_value(0, 0, 0)
-{
-}
-
-bool slider_value::operator==(const slider_value& v) const
-{
- using std::fabs;
-
constexpr double eps = 2e-3;
#if 1
- return (fabs(v.cur_ - cur_) < eps &&
- fabs(v.min_ - min_) < eps &&
- fabs(v.max_ - max_) < eps);
+ return (abs_(v.cur_ - cur_) < eps &&
+ abs_(v.min_ - min_) < eps &&
+ abs_(v.max_ - max_) < eps);
#else
- return (fabs(v.cur_ - cur_) < eps);
+ return (abs_(v.cur_ - cur_) < eps);
#endif
}
-bool slider_value::operator!=(const slider_value& v) const
+constexpr bool slider_value::operator!=(const slider_value& v) const
{
return !(*this == v);
}
-slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) const
+constexpr slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) const
{
slider_value v(*this);
@@ -75,11 +58,11 @@ slider_value slider_value::update_from_slider(int pos, int q_min, int q_max) con
: (((pos - q_min) * (v.max() - v.min())) / q_diff + v.min());
if (sv_pos < v.min())
- v = slider_value(v.min(), v.min(), v.max());
+ v = { v.min(), v.min(), v.max() };
else if (sv_pos > v.max())
- v = slider_value(v.max(), v.min(), v.max());
+ v = { v.max(), v.min(), v.max() };
else
- v = slider_value(sv_pos, v.min(), v.max());
+ v = { sv_pos, v.min(), v.max() };
return v;
}
diff --git a/options/slider.hpp b/options/slider.hpp
index 360c85b8..1366e390 100644
--- a/options/slider.hpp
+++ b/options/slider.hpp
@@ -22,35 +22,27 @@ namespace options
{
double cur_, min_, max_;
- template<typename t>
- using arith_conversion_t = std::enable_if_t<std::is_arithmetic_v<std::decay_t<t>>, std::decay_t<t>>;
public:
- slider_value(double cur, double min, double max);
+ constexpr slider_value(double cur, double min, double max);
- template<typename t, typename u, typename v> slider_value(t cur, u min, v max) :
+ template<typename t, typename u, typename v>
+ constexpr slider_value(t cur, u min, v max) :
cur_(double(cur)),
min_(double(min)),
max_(double(max))
{}
- template<typename t>
- cc_noinline
- operator arith_conversion_t<t>() const
- {
- return t(cur_);
- }
-
- slider_value& operator=(const slider_value& v);
-
- slider_value(const slider_value& v);
- slider_value();
- bool operator==(const slider_value& v) const;
- bool operator!=(const slider_value& v) const;
- operator double() const { return cur_; }
- double cur() const { return cur_; }
- double min() const { return min_; }
- double max() const { return max_; }
- slider_value update_from_slider(int pos, int q_min, int q_max) const;
+ slider_value& operator=(const slider_value& v) = default;
+ constexpr slider_value(const slider_value& v) = default;
+ constexpr slider_value() : slider_value{0, 0, 0} {};
+
+ constexpr bool operator==(const slider_value& v) const;
+ constexpr bool operator!=(const slider_value& v) const;
+ constexpr operator double() const { return cur_; }
+ constexpr double cur() const { return cur_; }
+ constexpr double min() const { return min_; }
+ constexpr double max() const { return max_; }
+ constexpr slider_value update_from_slider(int pos, int q_min, int q_max) const;
int to_slider_pos(int q_min, int q_max) const;
};
}
diff --git a/options/tie.hpp b/options/tie.hpp
index 59fd0da1..aa83c7cb 100644
--- a/options/tie.hpp
+++ b/options/tie.hpp
@@ -66,11 +66,11 @@ void tie_setting(value<t>& v, QComboBox* cb, From&& fn_to_index, To&& fn_to_valu
});
}, v.DIRECT_CONNTYPE);
value_::connect(&v, value_::value_changed<t>(),
- cb, [&v, cb, fn_to_index](cv_qualified<t>& v) {
+ cb, [&v, cb, fn_to_index](cv_qualified<t>& v) {
run_in_thread_sync(cb, [&] {
cb->setCurrentIndex(fn_to_index(v));
});
- });
+ }, v.DIRECT_CONNTYPE);
}
template<typename t, typename F>
diff --git a/pose-widget/pose-widget.cpp b/pose-widget/pose-widget.cpp
index 08e3a469..12de49d3 100644
--- a/pose-widget/pose-widget.cpp
+++ b/pose-widget/pose-widget.cpp
@@ -84,9 +84,7 @@ pose_widget::pose_widget(QWidget* parent) : QWidget(parent), xform(this)
rotate_sync(0,0,0, 0,0,0);
}
-pose_widget::~pose_widget()
-{
-}
+pose_widget::~pose_widget() = default;
void pose_widget::rotate_async(double xAngle, double yAngle, double zAngle, double x, double y, double z)
{
diff --git a/proto-flightgear/ftnoir_protocol_fg.cpp b/proto-flightgear/ftnoir_protocol_fg.cpp
index c06feefb..4c2156ac 100644
--- a/proto-flightgear/ftnoir_protocol_fg.cpp
+++ b/proto-flightgear/ftnoir_protocol_fg.cpp
@@ -22,7 +22,7 @@ void flightgear::pose(const double* headpose) {
FlightData.r = -headpose[Roll];
FlightData.status = 1;
QHostAddress destIP(quint32(s.ip1 << 24 | s.ip2 << 16 | s.ip3 << 8 | s.ip4));
- (void) outSocket.writeDatagram(reinterpret_cast<const char*>(&FlightData), sizeof(FlightData), destIP, static_cast<quint16>(s.port));
+ (void) outSocket.writeDatagram(reinterpret_cast<const char*>(&FlightData), sizeof(FlightData), destIP, quint16(s.port));
}
module_status flightgear::initialize()
diff --git a/proto-simconnect/ftnoir_protocol_sc.cpp b/proto-simconnect/ftnoir_protocol_sc.cpp
index 75815f1b..51472092 100644
--- a/proto-simconnect/ftnoir_protocol_sc.cpp
+++ b/proto-simconnect/ftnoir_protocol_sc.cpp
@@ -152,7 +152,7 @@ module_status simconnect::initialize()
{
if (!SCClientLib.isLoaded())
{
- ActivationContext ctx(142 + static_cast<int>(s.sxs_manifest));
+ ActivationContext ctx(142 + s.sxs_manifest);
if (ctx.is_ok())
{
diff --git a/proto-vjoystick/vjoystick.cpp b/proto-vjoystick/vjoystick.cpp
index a55f8ca4..bb0f0f51 100644
--- a/proto-vjoystick/vjoystick.cpp
+++ b/proto-vjoystick/vjoystick.cpp
@@ -101,13 +101,8 @@ LONG handle::to_axis_value(unsigned axis_id, double val)
return LONG(clamp((val+minmax) * max / (2*minmax) - min, min, max));
}
-vjoystick_proto::vjoystick_proto()
-{
-}
-
-vjoystick_proto::~vjoystick_proto()
-{
-}
+vjoystick_proto::vjoystick_proto() = default;
+vjoystick_proto::~vjoystick_proto() = default;
module_status vjoystick_proto::initialize()
{
diff --git a/spline/spline.cpp b/spline/spline.cpp
index fc437bb9..69928834 100644
--- a/spline/spline.cpp
+++ b/spline/spline.cpp
@@ -492,9 +492,7 @@ settings::settings(bundle b, const QString& axis_name, Axis idx):
opts(axis_name, idx)
{}
-settings::~settings()
-{
-}
+settings::~settings() = default;
}
diff --git a/tracker-aruco/ftnoir_tracker_aruco.cpp b/tracker-aruco/ftnoir_tracker_aruco.cpp
index cdadf2e9..b3d75e7d 100644
--- a/tracker-aruco/ftnoir_tracker_aruco.cpp
+++ b/tracker-aruco/ftnoir_tracker_aruco.cpp
@@ -141,7 +141,7 @@ bool aruco_tracker::open_camera()
rint = 0;
resolution_tuple res = resolution_choices[rint];
int fps;
- switch (static_cast<int>(s.force_fps))
+ switch (*s.force_fps)
{
default:
case 0:
@@ -186,7 +186,7 @@ bool aruco_tracker::open_camera()
void aruco_tracker::set_intrinsics()
{
const int w = grayscale.cols, h = grayscale.rows;
- const double diag_fov = static_cast<int>(s.fov) * M_PI / 180.;
+ const double diag_fov = s.fov * M_PI / 180.;
const double fov_w = 2.*atan(tan(diag_fov/2.)/sqrt(1. + h/(double)w * h/(double)w));
const double fov_h = 2.*atan(tan(diag_fov/2.)/sqrt(1. + w/(double)h * w/(double)h));
const double focal_length_w = .5 * w / tan(.5 * fov_w);
diff --git a/tracker-fusion/fusion.cpp b/tracker-fusion/fusion.cpp
index d1b866c7..5bf979ff 100644
--- a/tracker-fusion/fusion.cpp
+++ b/tracker-fusion/fusion.cpp
@@ -20,9 +20,7 @@ static auto get_modules()
return Modules(OPENTRACK_BASE_PATH + OPENTRACK_LIBRARY_PATH);
}
-fusion_tracker::fusion_tracker()
-{
-}
+fusion_tracker::fusion_tracker() = default;
fusion_tracker::~fusion_tracker()
{
diff --git a/tracker-hydra/ftnoir_tracker_hydra.cpp b/tracker-hydra/ftnoir_tracker_hydra.cpp
index 69bb71e9..2e9e1fc5 100644
--- a/tracker-hydra/ftnoir_tracker_hydra.cpp
+++ b/tracker-hydra/ftnoir_tracker_hydra.cpp
@@ -23,7 +23,7 @@
#endif
#include <sixense.h>
-Hydra_Tracker::Hydra_Tracker() {}
+Hydra_Tracker::Hydra_Tracker() = default;
#include <sixense_math.hpp>
diff --git a/tracker-joystick/ftnoir_tracker_joystick.cpp b/tracker-joystick/ftnoir_tracker_joystick.cpp
index 6257ee24..fce7cf04 100644
--- a/tracker-joystick/ftnoir_tracker_joystick.cpp
+++ b/tracker-joystick/ftnoir_tracker_joystick.cpp
@@ -11,7 +11,7 @@
joystick::joystick()
{
- if (static_cast<QString>(s.guid) == "")
+ if (s.guid->isEmpty())
{
std::vector<win32_joy_ctx::joy_info> info = joy_ctx.get_joy_info();
if (!info.empty())
diff --git a/tracker-pt/point_tracker.cpp b/tracker-pt/point_tracker.cpp
index 6116bec5..e86e686b 100644
--- a/tracker-pt/point_tracker.cpp
+++ b/tracker-pt/point_tracker.cpp
@@ -49,12 +49,12 @@ void PointModel::set_model(const pt_settings& s)
switch (s.active_model_panel)
{
case Clip:
- M01 = vec3(0, static_cast<f>(s.clip_ty), -static_cast<f>(s.clip_tz));
- M02 = vec3(0, -static_cast<f>(s.clip_by), -static_cast<f>(s.clip_bz));
+ M01 = vec3(0, s.clip_ty, -s.clip_tz);
+ M02 = vec3(0, -s.clip_by, -s.clip_bz);
break;
case Cap:
- M01 = vec3(-static_cast<f>(s.cap_x), -static_cast<f>(s.cap_y), -static_cast<f>(s.cap_z));
- M02 = vec3(static_cast<f>(s.cap_x), -static_cast<f>(s.cap_y), -static_cast<f>(s.cap_z));
+ M01 = vec3(-s.cap_x, s.cap_y, -s.cap_z);
+ M02 = vec3(s.cap_x, -s.cap_y, -s.cap_z);
break;
case Custom:
M01 = vec3(s.m01_x, s.m01_y, s.m01_z);
@@ -81,9 +81,7 @@ void PointModel::get_d_order(const vec2* points, unsigned* d_order, const vec2&
}
-PointTracker::PointTracker()
-{
-}
+PointTracker::PointTracker() = default;
PointTracker::PointOrder PointTracker::find_correspondences_previous(const vec2* points,
const PointModel& model,
diff --git a/tracker-rs/imagewidget.cpp b/tracker-rs/imagewidget.cpp
index 63986234..50a904f5 100644
--- a/tracker-rs/imagewidget.cpp
+++ b/tracker-rs/imagewidget.cpp
@@ -6,6 +6,7 @@
*/
#include "imagewidget.h"
+#include <utility>
#include <QPainter>
ImageWidget::ImageWidget(QWidget *parent) :
@@ -14,11 +15,11 @@ ImageWidget::ImageWidget(QWidget *parent) :
mImage.fill(Qt::gray);
}
-void ImageWidget::setImage(const QImage image)
+void ImageWidget::setImage(QImage image)
{
{
QMutexLocker lock(&mMutex);
- mImage = image;
+ mImage = std::move(image);
}
repaint();
}
diff --git a/tracker-rs/imagewidget.h b/tracker-rs/imagewidget.h
index e8b6e61e..f04eb1a3 100644
--- a/tracker-rs/imagewidget.h
+++ b/tracker-rs/imagewidget.h
@@ -15,7 +15,7 @@ class ImageWidget : public QWidget {
Q_OBJECT
public:
ImageWidget(QWidget* parent = 0);
- void setImage(const QImage image);
+ void setImage(QImage image);
private:
QImage mImage;
diff --git a/tracker-s2bot/ftnoir_tracker_s2bot.cpp b/tracker-s2bot/ftnoir_tracker_s2bot.cpp
index 8748e0f3..0b8976fc 100644
--- a/tracker-s2bot/ftnoir_tracker_s2bot.cpp
+++ b/tracker-s2bot/ftnoir_tracker_s2bot.cpp
@@ -56,7 +56,7 @@ void tracker_s2bot::run() {
int add_indices[] = { s.add_yaw, s.add_pitch, s.add_roll, };
double orient[4] {};
- for (auto line : slist)
+ for (auto const& line : slist)
{
QStringList keyval = line.split(' ');
if (keyval.count() < 2) continue;
diff --git a/tracker-steamvr/steamvr.cpp b/tracker-steamvr/steamvr.cpp
index cafdc556..10d73462 100644
--- a/tracker-steamvr/steamvr.cpp
+++ b/tracker-steamvr/steamvr.cpp
@@ -178,9 +178,7 @@ steamvr::steamvr() : device_index(-1)
{
}
-steamvr::~steamvr()
-{
-}
+steamvr::~steamvr() = default;
module_status steamvr::start_tracker(QFrame*)
{
diff --git a/tracker-test/test.cpp b/tracker-test/test.cpp
index d37d7373..f93f1556 100644
--- a/tracker-test/test.cpp
+++ b/tracker-test/test.cpp
@@ -81,7 +81,7 @@ test_dialog::test_dialog()
connect(ui.buttonBox, &QDialogButtonBox::clicked, [this](QAbstractButton* btn) {
if (btn == ui.buttonBox->button(QDialogButtonBox::Abort))
- *(volatile int*)0 = 0;
+ *(volatile int*)nullptr = 0;
});
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
diff --git a/tracker-wii/wii_camera.cpp b/tracker-wii/wii_camera.cpp
index b8b370ab..93dfe4ff 100644
--- a/tracker-wii/wii_camera.cpp
+++ b/tracker-wii/wii_camera.cpp
@@ -84,13 +84,11 @@ WIICamera::result WIICamera::get_frame(pt_frame& frame_)
return { true, cam_info };
}
-bool WIICamera::start(int idx, int fps, int res_x, int res_y)
+bool WIICamera::start(int, int, int, int)
{
m_pDev = std::make_unique<wiimote>();
m_pDev->ChangedCallback = on_state_change;
- m_pDev->CallbackTriggerFlags = (state_change_flags)(CONNECTED |
- EXTENSION_CHANGED |
- MOTIONPLUS_CHANGED);
+ m_pDev->CallbackTriggerFlags = (state_change_flags)(CONNECTED|EXTENSION_CHANGED |MOTIONPLUS_CHANGED);
return true;
}
diff --git a/tracker-wii/wii_frame.hpp b/tracker-wii/wii_frame.hpp
index 31967d10..2107646b 100644
--- a/tracker-wii/wii_frame.hpp
+++ b/tracker-wii/wii_frame.hpp
@@ -59,7 +59,7 @@ private:
bool fresh = true;
cv::Mat frame_copy, frame_color, frame_resize, frame_out;
- wii_camera_status status;
+ wii_camera_status status = wii_cam_wait_for_dongle;
};
} // ns pt_module
diff --git a/variant/default/main-window.hpp b/variant/default/main-window.hpp
index 0e3d8257..df1723b3 100644
--- a/variant/default/main-window.hpp
+++ b/variant/default/main-window.hpp
@@ -39,9 +39,7 @@
#include "ui_main-window.h"
-using namespace options;
-
-class main_window : public QMainWindow, private State
+class main_window final : public QMainWindow, private State
{
Q_OBJECT
@@ -147,7 +145,7 @@ signals:
void restart_tracker();
public:
main_window();
- ~main_window();
+ ~main_window() override;
static void set_working_directory();
bool maybe_die_on_config_not_writable(const QString& current, QStringList* ini_list);
void die_on_config_not_writable();