From 1f88d1d11be00ed9c8c3760bc0daa18350df5d7a Mon Sep 17 00:00:00 2001 From: Tom Paoletti Date: Thu, 21 Mar 2013 19:43:03 -0700 Subject: [PATCH] Performance optimization: empty() instead of size()>0 empty() is guaranteed to be constant complexity for both vectors and lists, while size() has linear complexity for lists. --- src/FDM/YASim/Rotor.cpp | 8 ++++---- src/FDM/YASim/Vector.hpp | 6 ++++++ src/FDM/YASim/Wing.cpp | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/FDM/YASim/Rotor.cpp b/src/FDM/YASim/Rotor.cpp index ab1775af5..46207027c 100644 --- a/src/FDM/YASim/Rotor.cpp +++ b/src/FDM/YASim/Rotor.cpp @@ -1159,7 +1159,7 @@ void Rotor::updateDirectionsAndPositions(float *rot) void Rotor::compile() { // Have we already been compiled? - if(_rotorparts.size() != 0) return; + if(! _rotorparts.empty()) return; //rotor is divided into _number_of_parts parts //each part is calcualted at _number_of_segments points @@ -1498,7 +1498,7 @@ void Rotorgear::initRotorIteration(float *lrot,float dt) { int i; float omegarel; - if (!_rotors.size()) return; + if (_rotors.empty()) return; Rotor* r0 = (Rotor*)_rotors.get(0); omegarel= r0->getOmegaRelNeu(); for(i=0; i<_rotors.size(); i++) { @@ -1514,7 +1514,7 @@ void Rotorgear::calcForces(float* torqueOut) // check,_rotorparts.size()) dt=((Rotorpart*)r0->_rotorparts.get(0))->getDt(); + if (! r0->_rotorparts.empty()) dt=((Rotorpart*)r0->_rotorparts.get(0))->getDt(); float rotor_brake_torque; rotor_brake_torque=_rotorbrake*_max_power_rotor_brake+_rotorgear_friction; diff --git a/src/FDM/YASim/Vector.hpp b/src/FDM/YASim/Vector.hpp index ea647a30d..7d5695643 100644 --- a/src/FDM/YASim/Vector.hpp +++ b/src/FDM/YASim/Vector.hpp @@ -15,6 +15,7 @@ public: void* get(int i); void set(int i, void* p); int size(); + bool empty(); private: void realloc(); @@ -58,6 +59,11 @@ inline int Vector::size() return _sz; } +inline bool Vector::empty() +{ + return _sz == 0; +} + inline void Vector::realloc() { _nelem = 2*_nelem + 1; diff --git a/src/FDM/YASim/Wing.cpp b/src/FDM/YASim/Wing.cpp index ad15410e1..1a6824496 100644 --- a/src/FDM/YASim/Wing.cpp +++ b/src/FDM/YASim/Wing.cpp @@ -254,7 +254,7 @@ bool Wing::isMirrored() void Wing::compile() { // Have we already been compiled? - if(_surfs.size() != 0) return; + if(! _surfs.empty()) return; // Assemble the start/end coordinates of all control surfaces // and the wing itself into an array, sort them, -- 2.39.5