LCOV - code coverage report
Current view: top level - src/utils/gui/globjects - GUIGlObjectStorage.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 87.2 % 47 41
Test Date: 2024-11-22 15:46:21 Functions: 80.0 % 10 8

            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         8103 : GUIGlObjectStorage::GUIGlObjectStorage() :
      40         8103 :     myNextID(1),
      41         8103 :     myLock(true) {
      42         8103 :     myObjects.push_back(nullptr);
      43         8103 : }
      44              : 
      45              : 
      46        16206 : GUIGlObjectStorage::~GUIGlObjectStorage() {}
      47              : 
      48              : 
      49              : GUIGlID
      50      1573610 : GUIGlObjectStorage::registerObject(GUIGlObject* object) {
      51      1573610 :     FXMutexLock locker(myLock);
      52      1573610 :     const GUIGlID id = myNextID;
      53      1573610 :     if (id == myObjects.size()) {
      54      1051601 :         myObjects.push_back(object);
      55              :     } else {
      56       522009 :         myObjects[id] = object;
      57              :     }
      58     35476664 :     while (myNextID < myObjects.size() && myObjects[myNextID] != nullptr) {
      59     33903054 :         myNextID++;
      60              :     }
      61      1573610 :     return id;
      62              : }
      63              : 
      64              : 
      65              : void
      66      1573610 : GUIGlObjectStorage::changeName(GUIGlObject* object, const std::string& fullName) {
      67      1573610 :     FXMutexLock locker(myLock);
      68              :     myFullNameMap.erase(object->getFullName());
      69      1573610 :     myFullNameMap[fullName] = object;
      70      1573610 : }
      71              : 
      72              : 
      73              : GUIGlObject*
      74            0 : GUIGlObjectStorage::getObjectBlocking(GUIGlID id) const {
      75            0 :     FXMutexLock locker(myLock);
      76            0 :     if (id < myObjects.size() && myObjects[id] != nullptr) {
      77              :         GUIGlObject* const o = myObjects[id];
      78              :         o->setBlocked();
      79            0 :         return o;
      80              :     }
      81              :     return nullptr;
      82              : }
      83              : 
      84              : 
      85              : GUIGlObject*
      86        55541 : GUIGlObjectStorage::getObjectBlocking(const std::string& fullName) const {
      87        55541 :     FXMutexLock locker(myLock);
      88              :     auto findIt = myFullNameMap.find(fullName);
      89        55541 :     if (findIt != myFullNameMap.end()) {
      90        28315 :         GUIGlObject* const o = findIt->second;
      91              :         o->setBlocked();
      92        28315 :         return o;
      93              :     }
      94              :     return nullptr;
      95              : }
      96              : 
      97              : 
      98              : bool
      99      1572124 : GUIGlObjectStorage::remove(GUIGlID id) {
     100      1572124 :     FXMutexLock locker(myLock);
     101              :     assert(id < myObjects.size() && myObjects[id] != nullptr);
     102      1572124 :     myFullNameMap.erase(myObjects[id]->getFullName());
     103      1572124 :     const bool wasBlocked = myObjects[id]->isBlocked();
     104      1572124 :     myObjects[id] = nullptr;
     105      1572124 :     if (id < myNextID) {
     106       311381 :         myNextID = id;
     107              :     }
     108      1572124 :     return !wasBlocked;
     109              : }
     110              : 
     111              : 
     112              : void
     113        37225 : GUIGlObjectStorage::clear() {
     114        37225 :     FXMutexLock locker(myLock);
     115              :     myObjects.clear();
     116        37225 :     myObjects.push_back(nullptr);
     117              :     myFullNameMap.clear();
     118        37225 :     myNextID = 1;
     119        37225 : }
     120              : 
     121              : 
     122              : void
     123        28315 : GUIGlObjectStorage::unblockObject(GUIGlID id) {
     124        28315 :     FXMutexLock locker(myLock);
     125        28315 :     if (id < myObjects.size() && myObjects[id] != nullptr) {
     126              :         myObjects[id]->setBlocked(false);
     127              :     }
     128        28315 : }
     129              : 
     130              : 
     131              : const std::vector<GUIGlObject*>&
     132            0 : GUIGlObjectStorage::getAllGLObjects() const {
     133            0 :     return myObjects;
     134              : }
     135              : 
     136              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1