From ff2e29b246d6daf8ffdc6db7756b97cfd27651a3 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Fri, 18 Sep 2020 22:40:51 +0200 Subject: [PATCH] FData optimization --- examples/listbox.cpp | 2 +- src/flistbox.cpp | 2 +- src/include/final/fdata.h | 123 +++++++++++++++-------------------- src/include/final/flistbox.h | 2 +- 4 files changed, 54 insertions(+), 75 deletions(-) diff --git a/examples/listbox.cpp b/examples/listbox.cpp index 210315cd..017b4f5a 100644 --- a/examples/listbox.cpp +++ b/examples/listbox.cpp @@ -51,7 +51,7 @@ void doubleToItem ( FListBoxItem& item , std::size_t index ) { typedef std::list DblList; - DblList& dbl_list = FListBoxHelper::getContainer(container); + DblList& dbl_list = flistboxhelper::getContainer(container); std::list::iterator iter = dbl_list.begin(); std::advance (iter, index); item.setText (FString() << *iter); diff --git a/src/flistbox.cpp b/src/flistbox.cpp index 4cdf4130..8709dcb0 100644 --- a/src/flistbox.cpp +++ b/src/flistbox.cpp @@ -834,7 +834,7 @@ void FListBox::drawList() const bool lineHasBrackets = hasBrackets(iter); // Import data via lazy conversion - lazyConvert (iter, int(y)); + lazyConvert (iter, y); // Set screen position and attributes setLineAttributes ( int(y), isSelected(iter), lineHasBrackets diff --git a/src/include/final/fdata.h b/src/include/final/fdata.h index 9272b07a..2bf5f725 100644 --- a/src/include/final/fdata.h +++ b/src/include/final/fdata.h @@ -51,13 +51,11 @@ namespace finalcut //---------------------------------------------------------------------- template -struct FData; // Class forward declaration +class FData; // Class forward declaration -struct FDataAccess +class FDataAccess { public: - virtual ~FDataAccess(); - template const T& get() const { @@ -72,94 +70,75 @@ struct FDataAccess } }; -//---------------------------------------------------------------------- -inline FDataAccess::~FDataAccess() -{ } - //---------------------------------------------------------------------- // struct FData //---------------------------------------------------------------------- template -struct FData : public FDataAccess +class FData : public FDataAccess { - explicit FData (T& v) // constructor - : value_ref{v} - { } + public: + explicit FData (T& v) // constructor + : value_ref{v} + { } - explicit FData (T&& v) // constructor - : value{v} - , value_ref{value} - { } + explicit FData (T&& v) // constructor + : value{std::move(v)} + , value_ref{value} + { } - ~FData() // destructor - { } + T operator () () const + { + return value_ref; + } - FData (const FData& d) // Copy constructor - : value{d.value} - , value_ref{d.value_ref} - { } + template + T operator () (Args... args) const + { + return value_ref(args...); + } - FData& operator = (const FData& d) // Copy assignment operator (=) - { - value = d.value; - value_ref = d.value_ref; - return *this; - } + explicit operator T () const + { + return value_ref; + } - T operator () () const - { - return value_ref; - } + T& get() + { + return value_ref; + } - template - T operator () (Args... args) const - { - return value_ref(args...); - } + void set (const T& v) + { + value_ref = v; + } - explicit operator T () const - { - return value_ref; - } + bool isInitializedCopy() + { + return bool(value); + } - T& get() - { - return value_ref; - } + bool isInitializedReference() + { + return ! isInitializedCopy(); + } - void set (const T& v) - { - value_ref = v; - } + FData& operator << (const T& v) + { + value_ref = v; + return *this; + } - bool isInitializedCopy() - { - return bool(value); - } - - bool isInitializedReference() - { - return ! isInitializedCopy(); - } - - FData& operator << (const T& v) - { - value_ref = v; - return *this; - } - - friend std::ostream& operator << (std::ostream &os, const FData& data) - { - os << data.value_ref; - return os; - } + friend std::ostream& operator << (std::ostream &os, const FData& data) + { + os << data.value_ref; + return os; + } private: + // Data members T value{}; - - public: T& value_ref; }; diff --git a/src/include/final/flistbox.h b/src/include/final/flistbox.h index 58c2aaea..2e628cd0 100644 --- a/src/include/final/flistbox.h +++ b/src/include/final/flistbox.h @@ -371,7 +371,7 @@ class FListBox : public FWidget // non-member function //---------------------------------------------------------------------- -namespace FListBoxHelper +namespace flistboxhelper { template