LCOV - code coverage report
Current view: top level - src/utils/gui/globjects - GUIGlObjectStorage.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 46 48 95.8 %
Date: 2024-05-06 15:32:35 Functions: 9 10 90.0 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    GUIGlObjectStorage.cpp
      15             : /// @author  Daniel Krajzewicz
      16             : /// @author  Jakob Erdmann
      17             : /// @author  Michael Behrisch
      18             : /// @date    Sept 2002
      19             : ///
      20             : // A storage for displayed objects via their numerical id
      21             : /****************************************************************************/
      22             : #include <config.h>
      23             : 
      24             : #include <cassert>
      25             : #include <utils/foxtools/fxheader.h>
      26             : #include "GUIGlObject.h"
      27             : #include "GUIGlObjectStorage.h"
      28             : 
      29             : 
      30             : // ===========================================================================
      31             : // static variables (instances in this case)
      32             : // ===========================================================================
      33             : GUIGlObjectStorage GUIGlObjectStorage::gIDStorage;
      34             : 
      35             : 
      36             : // ===========================================================================
      37             : // method definitions
      38             : // ===========================================================================
      39        7792 : GUIGlObjectStorage::GUIGlObjectStorage() :
      40        7792 :     myNextID(1),
      41        7792 :     myLock(true) {
      42        7792 :     myObjects.push_back(nullptr);
      43        7792 : }
      44             : 
      45             : 
      46        7792 : GUIGlObjectStorage::~GUIGlObjectStorage() {}
      47             : 
      48             : 
      49             : GUIGlID
      50     1447564 : GUIGlObjectStorage::registerObject(GUIGlObject* object) {
      51     1447564 :     FXMutexLock locker(myLock);
      52     1447564 :     const GUIGlID id = myNextID;
      53     1447564 :     if (id == myObjects.size()) {
      54     1000507 :         myObjects.push_back(object);
      55             :     } else {
      56      447057 :         myObjects[id] = object;
      57             :     }
      58    34183190 :     while (myNextID < myObjects.size() && myObjects[myNextID] != nullptr) {
      59    32735626 :         myNextID++;
      60             :     }
      61     1447564 :     return id;
      62             : }
      63             : 
      64             : 
      65             : void
      66     1447564 : GUIGlObjectStorage::changeName(GUIGlObject* object, const std::string& fullName) {
      67     1447564 :     FXMutexLock locker(myLock);
      68             :     myFullNameMap.erase(object->getFullName());
      69     1447564 :     myFullNameMap[fullName] = object;
      70     1447564 : }
      71             : 
      72             : 
      73             : GUIGlObject*
      74         638 : GUIGlObjectStorage::getObjectBlocking(GUIGlID id) const {
      75         638 :     FXMutexLock locker(myLock);
      76         638 :     if (id < myObjects.size() && myObjects[id] != nullptr) {
      77             :         GUIGlObject* const o = myObjects[id];
      78             :         o->setBlocked();
      79         638 :         return o;
      80             :     }
      81             :     return nullptr;
      82             : }
      83             : 
      84             : 
      85             : GUIGlObject*
      86       46515 : GUIGlObjectStorage::getObjectBlocking(const std::string& fullName) const {
      87       46515 :     FXMutexLock locker(myLock);
      88             :     auto findIt = myFullNameMap.find(fullName);
      89       46515 :     if (findIt != myFullNameMap.end()) {
      90       20621 :         GUIGlObject* const o = findIt->second;
      91             :         o->setBlocked();
      92       20621 :         return o;
      93             :     }
      94             :     return nullptr;
      95             : }
      96             : 
      97             : 
      98             : bool
      99     1445987 : GUIGlObjectStorage::remove(GUIGlID id) {
     100     1445987 :     FXMutexLock locker(myLock);
     101             :     assert(id < myObjects.size() && myObjects[id] != nullptr);
     102     1445987 :     myFullNameMap.erase(myObjects[id]->getFullName());
     103     1445987 :     const bool wasBlocked = myObjects[id]->isBlocked();
     104     1445987 :     myObjects[id] = nullptr;
     105     1445987 :     if (id < myNextID) {
     106      295253 :         myNextID = id;
     107             :     }
     108     1445987 :     return !wasBlocked;
     109             : }
     110             : 
     111             : 
     112             : void
     113       35765 : GUIGlObjectStorage::clear() {
     114       35765 :     FXMutexLock locker(myLock);
     115       35765 :     myObjects.clear();
     116       35765 :     myObjects.push_back(nullptr);
     117             :     myFullNameMap.clear();
     118       35765 :     myNextID = 1;
     119       35765 : }
     120             : 
     121             : 
     122             : void
     123       21238 : GUIGlObjectStorage::unblockObject(GUIGlID id) {
     124       21238 :     FXMutexLock locker(myLock);
     125       21238 :     if (id < myObjects.size() && myObjects[id] != nullptr) {
     126             :         myObjects[id]->setBlocked(false);
     127             :     }
     128       21238 : }
     129             : 
     130             : 
     131             : const std::vector<GUIGlObject*>&
     132           0 : GUIGlObjectStorage::getAllGLObjects() const {
     133           0 :     return myObjects;
     134             : }
     135             : 
     136             : /****************************************************************************/

Generated by: LCOV version 1.14