LCOV - code coverage report
Current view: top level - usr/include/antlr4-runtime/support - CPPUtils.h (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 3 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
       2             :  * Use of this file is governed by the BSD 3-clause license that
       3             :  * can be found in the LICENSE.txt file in the project root.
       4             :  */
       5             : 
       6             : #pragma once
       7             : 
       8             : #include "antlr4-common.h"
       9             : 
      10             : namespace antlrcpp {
      11             : 
      12             :   std::string join(std::vector<std::string> strings, const std::string &separator);
      13             :   std::map<std::string, size_t> toMap(const std::vector<std::string> &keys);
      14             :   std::string escapeWhitespace(std::string str, bool escapeSpaces);
      15             :   std::string toHexString(const int t);
      16             :   std::string arrayToString(const std::vector<std::string> &data);
      17             :   std::string replaceString(const std::string &s, const std::string &from, const std::string &to);
      18             :   std::vector<std::string> split(const std::string &s, const std::string &sep, int count);
      19             :   std::string indent(const std::string &s, const std::string &indentation, bool includingFirst = true);
      20             : 
      21             :   // Using RAII + a lambda to implement a "finally" replacement.
      22             :   struct FinalAction {
      23             :     FinalAction(std::function<void ()> f) : _cleanUp { f } {}
      24             :     FinalAction(FinalAction &&other) :
      25             :         _cleanUp(std::move(other._cleanUp)), _enabled(other._enabled) {
      26             :       other._enabled = false; // Don't trigger the lambda after ownership has moved.
      27             :     }
      28           0 :     ~FinalAction() { if (_enabled) _cleanUp(); }
      29             : 
      30             :     void disable() { _enabled = false; }
      31             :   private:
      32             :     std::function<void ()> _cleanUp;
      33             :     bool _enabled {true};
      34             :   };
      35             : 
      36             :   ANTLR4CPP_PUBLIC FinalAction finally(std::function<void ()> f);
      37             : 
      38             :   // Convenience functions to avoid lengthy dynamic_cast() != nullptr checks in many places.
      39             :   template <typename T1, typename T2>
      40           0 :   inline bool is(T2 *obj) { // For pointer types.
      41           0 :     return dynamic_cast<typename std::add_const<T1>::type>(obj) != nullptr;
      42             :   }
      43             : 
      44             :   template <typename T1, typename T2>
      45             :   inline bool is(Ref<T2> const& obj) { // For shared pointers.
      46             :     return dynamic_cast<T1 *>(obj.get()) != nullptr;
      47             :   }
      48             : 
      49             :   template <typename T>
      50             :   std::string toString(const T &o) {
      51             :     std::stringstream ss;
      52             :     // typeid gives the mangled class name, but that's all what's possible
      53             :     // in a portable way.
      54             :     ss << typeid(o).name() << "@" << std::hex << reinterpret_cast<uintptr_t>(&o);
      55             :     return ss.str();
      56             :   }
      57             : 
      58             :   // Get the error text from an exception pointer or the current exception.
      59             :   std::string what(std::exception_ptr eptr = std::current_exception());
      60             : 
      61             :   class SingleWriteMultipleReadLock {
      62             :   public:
      63             :     void readLock();
      64             :     void readUnlock();
      65             :     void writeLock();
      66             :     void writeUnlock();
      67             : 
      68             :   private:
      69             :     std::condition_variable _readerGate;
      70             :     std::condition_variable _writerGate;
      71             : 
      72             :     std::mutex _mutex;
      73             :     size_t _activeReaders = 0;
      74             :     size_t _waitingWriters = 0;
      75             :     size_t _activeWriters = 0;
      76             :   };
      77             : 
      78             : } // namespace antlrcpp

Generated by: LCOV version 1.14