LCOV - code coverage report
Current view: top level - usr/include/boost/spirit/home/classic/symbols/impl - symbols.ipp (source / functions) Hit Total Coverage
Test: ROSE Lines: 0 14 0.0 %
Date: 2022-12-08 13:48:47 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*=============================================================================
       2             :     Copyright (c) 2001-2003 Joel de Guzman
       3             :     http://spirit.sourceforge.net/
       4             : 
       5             :     Use, modification and distribution is subject to the Boost Software
       6             :     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
       7             :     http://www.boost.org/LICENSE_1_0.txt)
       8             : =============================================================================*/
       9             : #ifndef BOOST_SPIRIT_SYMBOLS_IPP
      10             : #define BOOST_SPIRIT_SYMBOLS_IPP
      11             : 
      12             : ///////////////////////////////////////////////////////////////////////////////
      13             : #include <boost/spirit/home/classic/symbols/impl/tst.ipp>
      14             : #include <boost/detail/workaround.hpp>
      15             : 
      16             : // MSVC: void warning about the use of 'this' pointer in constructors
      17             : #if defined(BOOST_MSVC)
      18             : #pragma warning(push)
      19             : #pragma warning(disable : 4355)
      20             : #endif
      21             : 
      22             : ///////////////////////////////////////////////////////////////////////////////
      23             : namespace boost { namespace spirit {
      24             : 
      25             : BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
      26             : 
      27             : ///////////////////////////////////////////////////////////////////////////////
      28             : //
      29             : //  symbols class implementation
      30             : //
      31             : ///////////////////////////////////////////////////////////////////////////////
      32             : template <typename T, typename CharT, typename SetT>
      33           0 : inline symbols<T, CharT, SetT>::symbols()
      34             : : SetT()
      35           0 : , add(*this)
      36             : {
      37             : }
      38             : 
      39             : //////////////////////////////////
      40             : template <typename T, typename CharT, typename SetT>
      41             : symbols<T, CharT, SetT>::symbols(symbols const& other)
      42             : : SetT(other)
      43             : // Tru64 CXX seems to be confused by the explicit call of the default
      44             : // constructor and generates wrong code which invalidates the just contructed
      45             : // first base class in the line above.
      46             : #if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))
      47             : , parser<symbols<T, CharT, SetT> >()
      48             : #endif
      49             : , add(*this)
      50             : {
      51             : }
      52             : 
      53             : //////////////////////////////////
      54             : template <typename T, typename CharT, typename SetT>
      55           0 : inline symbols<T, CharT, SetT>::~symbols()
      56           0 : {}
      57             : 
      58             : //////////////////////////////////
      59             : template <typename T, typename CharT, typename SetT>
      60             : inline symbols<T, CharT, SetT>&
      61             : symbols<T, CharT, SetT>::operator=(symbols const& other)
      62             : {
      63             :     SetT::operator=(other);
      64             :     return *this;
      65             : }
      66             : 
      67             : //////////////////////////////////
      68             : template <typename T, typename CharT, typename SetT>
      69             : inline symbol_inserter<T, SetT> const&
      70             : symbols<T, CharT, SetT>::operator=(CharT const* str)
      71             : {
      72             :     return add, str;
      73             : }
      74             : 
      75             : ///////////////////////////////////////////////////////////////////////////////
      76             : //
      77             : //  Symbol table utilities
      78             : //
      79             : ///////////////////////////////////////////////////////////////////////////////
      80             : template <typename T, typename CharT, typename SetT>
      81             : inline T*
      82             : find(symbols<T, CharT, SetT> const& table, CharT const* sym)
      83             : {
      84             :     CharT const* last = sym;
      85             :     while (*last)
      86             :         last++;
      87             :     scanner<CharT const *> scan(sym, last);
      88             :     T* result = table.find(scan);
      89             :     return scan.at_end()? result: 0;
      90             : }
      91             : 
      92             : //////////////////////////////////
      93             : template <typename T, typename CharT, typename SetT>
      94             : inline T*
      95           0 : add(symbols<T, CharT, SetT>& table, CharT const* sym, T const& data)
      96             : {
      97           0 :     CharT const* first = sym;
      98           0 :     CharT const* last = sym;
      99           0 :     while (*last)
     100           0 :         last++;
     101           0 :     scanner<CharT const *> scan(first, last);
     102           0 :     if (table.find(scan) && scan.at_end())
     103             :         return 0;               // symbol already contained in symbol table
     104           0 :     table.add(sym, last, data);
     105           0 :     first = sym;
     106           0 :     return table.find(scan);    // refind the inserted symbol
     107             : }
     108             : 
     109             : ///////////////////////////////////////////////////////////////////////////////
     110             : BOOST_SPIRIT_CLASSIC_NAMESPACE_END
     111             : 
     112             : }} // namespace boost::spirit
     113             : 
     114             : #if defined(BOOST_MSVC)
     115             : #pragma warning(pop)
     116             : #endif
     117             : 
     118             : #endif

Generated by: LCOV version 1.14