LCOV - code coverage report
Current view: top level - src/utils/common - ScopedLocker.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 5 5 100.0 %
Date: 2024-05-02 15:31:40 Functions: 0 0 -

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2018-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    ScopedLocker.h
      15             : /// @author  Michael Behrisch
      16             : /// @date    2018-11-14
      17             : ///
      18             : // A scoped lock which only triggers on condition
      19             : /****************************************************************************/
      20             : #pragma once
      21             : #include <config.h>
      22             : 
      23             : 
      24             : // ===========================================================================
      25             : // class declarations
      26             : // ===========================================================================
      27             : namespace FX {
      28             : class FXMutex;
      29             : }
      30             : 
      31             : 
      32             : // ===========================================================================
      33             : // class definitions
      34             : // ===========================================================================
      35             : /**
      36             :  * @class ScopedLocker
      37             :  * @brief A scoped lock which only triggers on condition
      38             :  */
      39             : template<typename T = FX::FXMutex, bool IGNORE_COND = false>
      40             : class ScopedLocker {
      41             : 
      42             : public:
      43             :     /// Construct & lock associated mutex if the condition is true
      44             :     ScopedLocker(T& m, const bool condition = true)
      45             :         : myMutex(m), myCondition(condition) {
      46  1801643431 :         if (IGNORE_COND || condition) {
      47   120322037 :             m.lock();
      48             :         }
      49             :     }
      50             : 
      51             :     /// Destroy and unlock associated mutex
      52             :     ~ScopedLocker() {
      53  1801643431 :         if (IGNORE_COND || myCondition) {
      54   120322037 :             myMutex.unlock();
      55             :         }
      56   771547632 :     }
      57             : 
      58             : private:
      59             :     T& myMutex;
      60             :     const bool myCondition;
      61             : 
      62             : private:
      63             :     ScopedLocker& operator=(const ScopedLocker&) = delete;
      64             : };

Generated by: LCOV version 1.14