From 22963f3ed84778fd3d6863cbb0cbeff9deba476c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 24 Apr 2018 11:04:47 +0200 Subject: [PATCH] Refactoring; use range for loop --- lib/checkclass.cpp | 89 +++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 60 deletions(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index a7533008b..896d17cea 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -86,17 +86,14 @@ void CheckClass::constructors() return; const bool printInconclusive = _settings->inconclusive; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { bool usedInUnion = false; - for (std::list::const_iterator it = symbolDatabase->scopeList.begin(); it != symbolDatabase->scopeList.end(); ++it) { - if (it->type != Scope::eUnion) + for (const Scope &unionScope : symbolDatabase->scopeList) { + if (unionScope.type != Scope::eUnion) continue; - const Scope &unionScope = *it; - for (std::list::const_iterator var = unionScope.varlist.begin(); var != unionScope.varlist.end(); ++var) { - if (var->type() && var->type()->classScope == scope) { + for (const Variable &var : unionScope.varlist) { + if (var.type() && var.type()->classScope == scope) { usedInUnion = true; break; } @@ -106,10 +103,9 @@ void CheckClass::constructors() // There are no constructors. if (scope->numConstructors == 0 && printStyle && !usedInUnion) { // If there is a private variable, there should be a constructor.. - std::list::const_iterator var; - for (var = scope->varlist.begin(); var != scope->varlist.end(); ++var) { - if (var->isPrivate() && !var->isStatic() && !Token::Match(var->nameToken(), "%varid% ; %varid% =", var->declarationId()) && - (!var->isClass() || (var->type() && var->type()->needInitialization == Type::True))) { + for (const Variable &var : scope->varlist) { + if (var.isPrivate() && !var.isStatic() && !Token::Match(var.nameToken(), "%varid% ; %varid% =", var.declarationId()) && + (!var.isClass() || (var.type() && var.type()->needInitialization == Type::True))) { noConstructorError(scope->classDef, scope->className, scope->classDef->str() == "struct"); break; } @@ -123,8 +119,7 @@ void CheckClass::constructors() // TODO: handle union variables better { bool bailout = false; - for (std::list::const_iterator it = scope->nestedList.begin(); it != scope->nestedList.end(); ++it) { - const Scope * const nestedScope = *it; + for (const Scope * const nestedScope : scope->nestedList) { if (nestedScope->type == Scope::eUnion) { bailout = true; break; @@ -240,10 +235,7 @@ void CheckClass::checkExplicitConstructors() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; - + for (const Scope * scope : symbolDatabase->classAndStructScopes) { // Do not perform check, if the class/struct has not any constructors if (scope->numConstructors == 0) continue; @@ -251,8 +243,8 @@ void CheckClass::checkExplicitConstructors() // Is class abstract? Maybe this test is over-simplification, but it will suffice for simple cases, // and it will avoid false positives. bool isAbstractClass = false; - for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { - if (func->isPure()) { + for (const Function &func : scope->functionList) { + if (func.isPure()) { isAbstractClass = true; break; } @@ -263,21 +255,21 @@ void CheckClass::checkExplicitConstructors() if (isAbstractClass && _settings->standards.cpp != Standards::CPP11) continue; - for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { + for (const Function &func : scope->functionList) { // We are looking for constructors, which are meeting following criteria: // 1) Constructor is declared with a single parameter // 2) Constructor is not declared as explicit // 3) It is not a copy/move constructor of non-abstract class // 4) Constructor is not marked as delete (programmer can mark the default constructor as deleted, which is ok) - if (!func->isConstructor() || func->isDelete() || (!func->hasBody() && func->access == Private)) + if (!func.isConstructor() || func.isDelete() || (!func.hasBody() && func.access == Private)) continue; - if (!func->isExplicit() && - func->argCount() == 1 && - func->type != Function::eCopyConstructor && - func->type != Function::eMoveConstructor) { - noExplicitConstructorError(func->tokenDef, scope->className, scope->type == Scope::eStruct); + if (!func.isExplicit() && + func.argCount() == 1 && + func.type != Function::eCopyConstructor && + func.type != Function::eMoveConstructor) { + noExplicitConstructorError(func.tokenDef, scope->className, scope->type == Scope::eStruct); } } } @@ -288,9 +280,7 @@ void CheckClass::copyconstructors() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { std::map allocatedVars; for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { @@ -949,9 +939,7 @@ void CheckClass::privateFunctions() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { // do not check borland classes with properties.. if (Token::findsimplematch(scope->classStart, "; __property ;", scope->classEnd)) @@ -1211,10 +1199,7 @@ void CheckClass::operatorEq() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; - + for (const Scope * scope : symbolDatabase->classAndStructScopes) { for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { if (func->type == Function::eOperatorEqual && func->access == Public) { // skip "deleted" functions - cannot be called anyway @@ -1267,10 +1252,7 @@ void CheckClass::operatorEqRetRefThis() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; - + for (const Scope * scope : symbolDatabase->classAndStructScopes) { for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { if (func->type == Function::eOperatorEqual && func->hasBody()) { // make sure return signature is correct @@ -1401,9 +1383,7 @@ void CheckClass::operatorEqToSelf() if (!_settings->isEnabled(Settings::WARNING)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { // skip classes with multiple inheritance if (scope->definedType->derivedFrom.size() > 1) continue; @@ -1527,9 +1507,7 @@ void CheckClass::virtualDestructor() std::list inconclusiveErrors; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { // Skip base classes (unless inconclusive) if (scope->definedType->derivedFrom.empty()) { @@ -1706,10 +1684,7 @@ void CheckClass::checkConst() if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; - + for (const Scope * scope : symbolDatabase->classAndStructScopes) { for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { // does the function have a body? if (func->type != Function::eFunction || !func->hasBody()) @@ -2092,9 +2067,7 @@ void CheckClass::initializerListOrder() if (!_settings->inconclusive) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { // iterate through all member functions looking for constructors for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { @@ -2410,9 +2383,7 @@ void CheckClass::checkCopyCtorAndEqOperator() if (!_settings->isEnabled(Settings::WARNING)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * scope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * scope : symbolDatabase->classAndStructScopes) { bool hasNonStaticVars = false; for (std::list::const_iterator var = scope->varlist.begin(); var != scope->varlist.end(); ++var) { @@ -2472,9 +2443,7 @@ void CheckClass::checkUnsafeClassDivZero(bool test) if (!_settings->isEnabled(Settings::STYLE)) return; - const std::size_t classes = symbolDatabase->classAndStructScopes.size(); - for (std::size_t i = 0; i < classes; ++i) { - const Scope * classScope = symbolDatabase->classAndStructScopes[i]; + for (const Scope * classScope : symbolDatabase->classAndStructScopes) { if (!test && classScope->classDef->fileIndex() != 1) continue; std::list::const_iterator func;