_ZN5boost9algorithm13to_lower_copyINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEET_RKS9_RKNS2_6localeE:
   75|   301k|        {
   76|   301k|            return ::boost::algorithm::detail::transform_range_copy<SequenceT>(
   77|   301k|                Input,
   78|   301k|                ::boost::algorithm::detail::to_lowerF<
   79|   301k|                    typename range_value<SequenceT>::type >(Loc));
   80|   301k|        }

_ZN5boost9algorithm6detail20transform_range_copyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_NS1_9to_lowerFIcEEEET_RKT0_T1_:
  115|   301k|            {
  116|   301k|                return SequenceT(
  117|   301k|                    ::boost::make_transform_iterator(
  118|   301k|                        ::boost::begin(Input),
  119|   301k|                        Functor),
  120|   301k|                    ::boost::make_transform_iterator(
  121|   301k|                        ::boost::end(Input), 
  122|   301k|                        Functor));
  123|   301k|            }
_ZNK5boost9algorithm6detail9to_lowerFIcEclEc:
   45|  22.2M|                {
   46|       |                    #if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL)
   47|       |                        return std::tolower( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));
   48|       |                    #else
   49|  22.2M|                        return std::tolower<CharT>( Ch, *m_Loc );
   50|  22.2M|                    #endif
   51|  22.2M|                }
_ZN5boost9algorithm6detail9to_lowerFIcEC2ERKNSt3__16localeE:
   41|   301k|                to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {}

_ZN5boost8any_castImEET_RKNS_3anyE:
  340|  11.0k|    {
  341|  11.0k|        using nonref = typename std::remove_reference<ValueType>::type;
  342|  11.0k|        return boost::any_cast<const nonref &>(const_cast<any &>(operand));
  343|  11.0k|    }
_ZN5boost8any_castIRKmEET_RNS_3anyE:
  308|  11.0k|    {
  309|  11.0k|        using nonref = typename std::remove_reference<ValueType>::type;
  310|       |
  311|  11.0k|        nonref * result = boost::any_cast<nonref>(std::addressof(operand));
  312|  11.0k|        if(!result)
  ------------------
  |  Branch (312:12): [True: 0, False: 11.0k]
  ------------------
  313|      0|            boost::throw_exception(bad_any_cast());
  314|       |
  315|       |        // Attempt to avoid construction of a temporary object in cases when
  316|       |        // `ValueType` is not a reference. Example:
  317|       |        // `static_cast<std::string>(*result);`
  318|       |        // which is equal to `std::string(*result);`
  319|  11.0k|        typedef typename std::conditional<
  320|  11.0k|            std::is_reference<ValueType>::value,
  321|  11.0k|            ValueType,
  322|  11.0k|            typename std::add_lvalue_reference<ValueType>::type
  323|  11.0k|        >::type ref_type;
  324|       |
  325|       |#ifdef BOOST_MSVC
  326|       |#   pragma warning(push)
  327|       |#   pragma warning(disable: 4172) // "returning address of local variable or temporary" but *result is not local!
  328|       |#endif
  329|  11.0k|        return static_cast<ref_type>(*result);
  330|       |#ifdef BOOST_MSVC
  331|       |#   pragma warning(pop)
  332|       |#endif
  333|  11.0k|    }
_ZN5boost8any_castIKmEEPT_PNS_3anyE:
  289|  11.0k|    {
  290|  11.0k|        return operand && operand->type() == boost::typeindex::type_id<ValueType>()
  ------------------
  |  Branch (290:16): [True: 11.0k, False: 0]
  |  Branch (290:27): [True: 11.0k, False: 0]
  ------------------
  291|  11.0k|            ? boost::unsafe_any_cast<typename std::remove_cv<ValueType>::type>(operand)
  292|  11.0k|            : 0;
  293|  11.0k|    }
_ZNK5boost3any4typeEv:
  198|  33.0k|        {
  199|  33.0k|            return content ? content->type() : boost::typeindex::type_id<void>().type_info();
  ------------------
  |  Branch (199:20): [True: 33.0k, False: 0]
  ------------------
  200|  33.0k|        }
_ZN5boost15unsafe_any_castImEEPT_PNS_3anyE:
  272|  11.0k|    {
  273|  11.0k|        return std::addressof(
  274|  11.0k|            static_cast<any::holder<ValueType> *>(operand->content)->held
  275|  11.0k|        );
  276|  11.0k|    }
_ZN5boost3any6holderINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2ERKS8_:
  217|   452k|              : held(value)
  218|   452k|            {
  219|   452k|            }
_ZNK5boost3any6holderINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4typeEv:
  229|  22.0k|            {
  230|  22.0k|                return boost::typeindex::type_id<ValueType>().type_info();
  231|  22.0k|            }
_ZN5boost8any_castINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEET_RKNS_3anyE:
  340|  11.0k|    {
  341|  11.0k|        using nonref = typename std::remove_reference<ValueType>::type;
  342|  11.0k|        return boost::any_cast<const nonref &>(const_cast<any &>(operand));
  343|  11.0k|    }
_ZN5boost8any_castIRKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEET_RNS_3anyE:
  308|  11.0k|    {
  309|  11.0k|        using nonref = typename std::remove_reference<ValueType>::type;
  310|       |
  311|  11.0k|        nonref * result = boost::any_cast<nonref>(std::addressof(operand));
  312|  11.0k|        if(!result)
  ------------------
  |  Branch (312:12): [True: 0, False: 11.0k]
  ------------------
  313|      0|            boost::throw_exception(bad_any_cast());
  314|       |
  315|       |        // Attempt to avoid construction of a temporary object in cases when
  316|       |        // `ValueType` is not a reference. Example:
  317|       |        // `static_cast<std::string>(*result);`
  318|       |        // which is equal to `std::string(*result);`
  319|  11.0k|        typedef typename std::conditional<
  320|  11.0k|            std::is_reference<ValueType>::value,
  321|  11.0k|            ValueType,
  322|  11.0k|            typename std::add_lvalue_reference<ValueType>::type
  323|  11.0k|        >::type ref_type;
  324|       |
  325|       |#ifdef BOOST_MSVC
  326|       |#   pragma warning(push)
  327|       |#   pragma warning(disable: 4172) // "returning address of local variable or temporary" but *result is not local!
  328|       |#endif
  329|  11.0k|        return static_cast<ref_type>(*result);
  330|       |#ifdef BOOST_MSVC
  331|       |#   pragma warning(pop)
  332|       |#endif
  333|  11.0k|    }
_ZN5boost8any_castIKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEPT_PNS_3anyE:
  289|  11.0k|    {
  290|  11.0k|        return operand && operand->type() == boost::typeindex::type_id<ValueType>()
  ------------------
  |  Branch (290:16): [True: 11.0k, False: 0]
  |  Branch (290:27): [True: 11.0k, False: 0]
  ------------------
  291|  11.0k|            ? boost::unsafe_any_cast<typename std::remove_cv<ValueType>::type>(operand)
  292|  11.0k|            : 0;
  293|  11.0k|    }
_ZN5boost15unsafe_any_castINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEPT_PNS_3anyE:
  272|  11.0k|    {
  273|  11.0k|        return std::addressof(
  274|  11.0k|            static_cast<any::holder<ValueType> *>(operand->content)->held
  275|  11.0k|        );
  276|  11.0k|    }
_ZN5boost3anyC2ImEERKT_:
   52|  19.1k|          : content(new holder<
   53|  19.1k|                typename std::remove_cv<typename std::decay<const ValueType>::type>::type
   54|  19.1k|            >(value))
   55|  19.1k|        {
   56|  19.1k|            static_assert(
   57|  19.1k|                !anys::detail::is_basic_any<ValueType>::value,
   58|  19.1k|                "boost::any shall not be constructed from boost::anys::basic_any"
   59|  19.1k|            );
   60|  19.1k|        }
_ZN5boost3any6holderImEC2ERKm:
  217|  19.1k|              : held(value)
  218|  19.1k|            {
  219|  19.1k|            }
_ZNK5boost3any6holderImE4typeEv:
  229|  11.0k|            {
  230|  11.0k|                return boost::typeindex::type_id<ValueType>().type_info();
  231|  11.0k|            }
_ZN5boost3anyC2INSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEERKT_:
   52|   452k|          : content(new holder<
   53|   452k|                typename std::remove_cv<typename std::decay<const ValueType>::type>::type
   54|   452k|            >(value))
   55|   452k|        {
   56|   452k|            static_assert(
   57|   452k|                !anys::detail::is_basic_any<ValueType>::value,
   58|   452k|                "boost::any shall not be constructed from boost::anys::basic_any"
   59|   452k|            );
   60|   452k|        }
_ZN5boost3anyD2Ev:
  108|   904k|        {
  109|   904k|            delete content;
  110|   904k|        }
_ZN5boost3anyC2INS_6detail14edge_desc_implINS_12directed_tagEmEEEERKT_:
   52|   429k|          : content(new holder<
   53|   429k|                typename std::remove_cv<typename std::decay<const ValueType>::type>::type
   54|   429k|            >(value))
   55|   429k|        {
   56|   429k|            static_assert(
   57|   429k|                !anys::detail::is_basic_any<ValueType>::value,
   58|   429k|                "boost::any shall not be constructed from boost::anys::basic_any"
   59|   429k|            );
   60|   429k|        }
_ZN5boost3any6holderINS_6detail14edge_desc_implINS_12directed_tagEmEEEC2ERKS5_:
  217|   429k|              : held(value)
  218|   429k|            {
  219|   429k|            }
_ZN5boost3anyC2IPNS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEEERKT_:
   52|  3.33k|          : content(new holder<
   53|  3.33k|                typename std::remove_cv<typename std::decay<const ValueType>::type>::type
   54|  3.33k|            >(value))
   55|  3.33k|        {
   56|  3.33k|            static_assert(
   57|  3.33k|                !anys::detail::is_basic_any<ValueType>::value,
   58|  3.33k|                "boost::any shall not be constructed from boost::anys::basic_any"
   59|  3.33k|            );
   60|  3.33k|        }
_ZN5boost3any6holderIPNS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEEC2ERKSA_:
  217|  3.33k|              : held(value)
  218|  3.33k|            {
  219|  3.33k|            }

_ZN5boost4anys6detail11placeholderD2Ev:
   24|   904k|    virtual ~placeholder() {}

_ZN5boost14checked_deleteINS_11no_propertyEEEvPT_:
   32|  4.79k|{
   33|  4.79k|#if defined(__cpp_static_assert) && __cpp_static_assert >= 200410L
   34|       |
   35|  4.79k|    static_assert( sizeof(T) != 0, "Type must be complete" );
   36|       |
   37|       |#else
   38|       |
   39|       |    typedef char type_must_be_complete[ sizeof(T) ];
   40|       |    (void) sizeof(type_must_be_complete);
   41|       |
   42|       |#endif
   43|       |
   44|  4.79k|    delete x;
   45|  4.79k|}

_ZN5boost6detail16basic_pointerbufIcNSt3__115basic_stringbufIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2Ev:
   43|  2.91k|   basic_pointerbuf() : base_type() { this_type::setbuf(0, 0); }
_ZN5boost6detail16basic_pointerbufIcNSt3__115basic_stringbufIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE6setbufEPcl:
   66|  2.91k|{
   67|  2.91k|   this->setg(s, s, s + n);
   68|  2.91k|   return this;
   69|  2.91k|}

_ZN5boost13function_baseC2Ev:
  497|  9.58k|  function_base() : vtable(0) { }
_ZNK5boost13function_base5emptyEv:
  500|   887k|  bool empty() const { return !vtable; }
_ZNK5boost13function_base28has_trivial_copy_and_destroyEv:
  574|  14.3k|  bool has_trivial_copy_and_destroy() const {
  575|  14.3k|    return reinterpret_cast<std::size_t>(vtable) & 0x01;
  576|  14.3k|  }
_ZN5boost6detail8function15functor_managerIPFNS_10shared_ptrINS_20dynamic_property_mapEEERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE6manageERKNS1_15function_bufferERSL_NS1_30functor_manager_operation_typeE:
  363|  4.79k|        {
  364|  4.79k|          typedef typename get_function_tag<functor_type>::type tag_type;
  365|  4.79k|          if (op == get_functor_type_tag) {
  ------------------
  |  Branch (365:15): [True: 0, False: 4.79k]
  ------------------
  366|      0|            out_buffer.members.type.type = &BOOST_CORE_TYPEID(functor_type);
  ------------------
  |  |  163|      0|#define BOOST_CORE_TYPEID(T) typeid(T)
  ------------------
  367|      0|            out_buffer.members.type.const_qualified = false;
  368|      0|            out_buffer.members.type.volatile_qualified = false;
  369|  4.79k|          } else {
  370|  4.79k|            manager(in_buffer, out_buffer, op, tag_type());
  371|  4.79k|          }
  372|  4.79k|        }
_ZN5boost6detail8function15functor_managerIPFNS_10shared_ptrINS_20dynamic_property_mapEEERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE7managerERKNS1_15function_bufferERSL_NS1_30functor_manager_operation_typeENS1_16function_ptr_tagE:
  290|  4.79k|        {
  291|  4.79k|          functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);
  292|  4.79k|        }
_ZN5boost6detail8function22functor_manager_commonIPFNS_10shared_ptrINS_20dynamic_property_mapEEERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE10manage_ptrERKNS1_15function_bufferERSL_NS1_30functor_manager_operation_typeE:
  228|  4.79k|        {
  229|  4.79k|          if (op == clone_functor_tag)
  ------------------
  |  Branch (229:15): [True: 0, False: 4.79k]
  ------------------
  230|      0|            out_buffer.members.func_ptr = in_buffer.members.func_ptr;
  231|  4.79k|          else if (op == move_functor_tag) {
  ------------------
  |  Branch (231:20): [True: 0, False: 4.79k]
  ------------------
  232|      0|            out_buffer.members.func_ptr = in_buffer.members.func_ptr;
  233|      0|            in_buffer.members.func_ptr = 0;
  234|  4.79k|          } else if (op == destroy_functor_tag)
  ------------------
  |  Branch (234:22): [True: 4.79k, False: 0]
  ------------------
  235|  4.79k|            out_buffer.members.func_ptr = 0;
  236|      0|          else if (op == check_functor_type_tag) {
  ------------------
  |  Branch (236:20): [True: 0, False: 0]
  ------------------
  237|      0|            if (*out_buffer.members.type.type == BOOST_CORE_TYPEID(Functor))
  ------------------
  |  |  163|      0|#define BOOST_CORE_TYPEID(T) typeid(T)
  ------------------
  |  Branch (237:17): [True: 0, False: 0]
  ------------------
  238|      0|              out_buffer.members.obj_ptr = &in_buffer.members.func_ptr;
  239|      0|            else
  240|      0|              out_buffer.members.obj_ptr = 0;
  241|      0|          } else /* op == get_functor_type_tag */ {
  242|      0|            out_buffer.members.type.type = &BOOST_CORE_TYPEID(Functor);
  ------------------
  |  |  163|      0|#define BOOST_CORE_TYPEID(T) typeid(T)
  ------------------
  243|      0|            out_buffer.members.type.const_qualified = false;
  244|      0|            out_buffer.members.type.volatile_qualified = false;
  245|      0|          }
  246|  4.79k|        }

_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EEC2ERKSG_:
  772|  4.79k|    function_n(const function_n& f) : function_base()
  773|  4.79k|    {
  774|  4.79k|      this->assign_to_own(f);
  775|  4.79k|    }
_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EE13assign_to_ownERKSG_:
  892|  4.79k|    {
  893|  4.79k|      if (!f.empty()) {
  ------------------
  |  Branch (893:11): [True: 4.79k, False: 0]
  ------------------
  894|  4.79k|        this->vtable = f.vtable;
  895|  4.79k|        if (this->has_trivial_copy_and_destroy()) {
  ------------------
  |  Branch (895:13): [True: 4.79k, False: 0]
  ------------------
  896|       |          // Don't operate on storage directly since union type doesn't relax
  897|       |          // strict aliasing rules, despite of having member char type.
  898|       |#         if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
  899|       |#           pragma GCC diagnostic push
  900|       |            // This warning is technically correct, but we don't want to pay the price for initializing
  901|       |            // just to silence a warning: https://github.com/boostorg/function/issues/27
  902|       |#           pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  903|       |#           if (BOOST_GCC >= 110000)
  904|       |              // GCC 11.3, 12 emit a different warning: https://github.com/boostorg/function/issues/42
  905|       |#             pragma GCC diagnostic ignored "-Wuninitialized"
  906|       |#           endif
  907|       |#         endif
  908|  4.79k|          std::memcpy(this->functor.data, f.functor.data, sizeof(boost::detail::function::function_buffer));
  909|       |#         if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
  910|       |#           pragma GCC diagnostic pop
  911|       |#         endif
  912|  4.79k|        } else
  913|      0|          get_vtable()->base.manager(f.functor, this->functor,
  914|      0|                                     boost::detail::function::clone_functor_tag);
  915|  4.79k|      }
  916|  4.79k|    }
_ZNK5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EE10get_vtableEv:
  726|   441k|    vtable_type* get_vtable() const {
  727|   441k|      return reinterpret_cast<vtable_type*>(
  728|   441k|               reinterpret_cast<std::size_t>(vtable) & ~static_cast<std::size_t>(0x01));
  729|   441k|    }
_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EED2Ev:
  782|  9.58k|    ~function_n() { clear(); }
_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EE5clearEv:
  880|  9.58k|    {
  881|  9.58k|      if (vtable) {
  ------------------
  |  Branch (881:11): [True: 9.58k, False: 0]
  ------------------
  882|  9.58k|        if (!this->has_trivial_copy_and_destroy())
  ------------------
  |  Branch (882:13): [True: 0, False: 9.58k]
  ------------------
  883|      0|          get_vtable()->clear(this->functor);
  884|  9.58k|        vtable = 0;
  885|  9.58k|      }
  886|  9.58k|    }
_ZNK5boost6detail8function12basic_vtableINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE5clearERNS1_15function_bufferE:
  435|  4.79k|        {
  436|       |#if defined(BOOST_GCC) && (__GNUC__ >= 11)
  437|       |# pragma GCC diagnostic push
  438|       |// False positive in GCC 11/12 for empty function objects
  439|       |# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  440|       |#endif
  441|  4.79k|          if (base.manager)
  ------------------
  |  Branch (441:15): [True: 4.79k, False: 0]
  ------------------
  442|  4.79k|            base.manager(functor, functor, destroy_functor_tag);
  443|       |#if defined(BOOST_GCC) && (__GNUC__ >= 11)
  444|       |# pragma GCC diagnostic pop
  445|       |#endif
  446|  4.79k|        }
_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EEC2IPFS3_SC_SF_SF_EEET_NS4_9enable_ifIXntsr11is_integralISK_EE5valueEiE4typeE:
  755|  4.79k|      function_base()
  756|  4.79k|    {
  757|  4.79k|      this->assign_to(std::move(f));
  758|  4.79k|    }
_ZN5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EE9assign_toIPFS3_SC_SF_SF_EEEvT_:
  920|  4.79k|    {
  921|  4.79k|      using boost::detail::function::vtable_base;
  922|       |
  923|  4.79k|      typedef typename boost::detail::function::get_function_tag<Functor>::type tag;
  924|  4.79k|      typedef boost::detail::function::get_invoker<tag> get_invoker;
  925|  4.79k|      typedef typename get_invoker::
  926|  4.79k|                         template apply_<Functor, R,
  927|  4.79k|                        T...>
  928|  4.79k|        handler_type;
  929|       |
  930|  4.79k|      typedef typename handler_type::invoker_type invoker_type;
  931|  4.79k|      typedef typename handler_type::manager_type manager_type;
  932|       |
  933|       |      // Note: it is extremely important that this initialization use
  934|       |      // static initialization. Otherwise, we will have a race
  935|       |      // condition here in multi-threaded code. See
  936|       |      // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/.
  937|  4.79k|      static const vtable_type stored_vtable =
  938|  4.79k|        { { &manager_type::manage }, &invoker_type::invoke };
  939|       |
  940|  4.79k|      if (stored_vtable.assign_to(std::move(f), functor)) {
  ------------------
  |  Branch (940:11): [True: 4.79k, False: 0]
  ------------------
  941|  4.79k|        std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);
  942|       |        // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
  943|  4.79k|        if (boost::detail::function::is_trivially_copyable<Functor>::value &&
  ------------------
  |  Branch (943:13): [Folded - Ignored]
  ------------------
  944|  4.79k|            boost::detail::function::function_allows_small_object_optimization<Functor>::value)
  ------------------
  |  Branch (944:13): [Folded - Ignored]
  ------------------
  945|  4.79k|          value |= static_cast<std::size_t>(0x01);
  946|  4.79k|        vtable = reinterpret_cast<boost::detail::function::vtable_base *>(value);
  947|  4.79k|      } else
  948|      0|        vtable = 0;
  949|  4.79k|    }
_ZN5boost6detail8function16function_invokerIPFNS_10shared_ptrINS_20dynamic_property_mapEEERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_ES5_JSE_SH_SH_EE6invokeERNS1_15function_bufferESE_SH_SH_:
   40|   441k|        {
   41|   441k|          FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.members.func_ptr);
   42|   441k|          return f(static_cast<T&&>(a)...);
   43|   441k|        }
_ZNK5boost6detail8function12basic_vtableINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE9assign_toIPFS5_SE_SH_SH_EEEbT_RNS1_15function_bufferE:
  423|  4.79k|        {
  424|  4.79k|          typedef typename get_function_tag<F>::type tag;
  425|  4.79k|          return assign_to(std::move(f), functor, tag());
  426|  4.79k|        }
_ZNK5boost6detail8function12basic_vtableINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS_3anyESH_EE9assign_toIPFS5_SE_SH_SH_EEEbT_RNS1_15function_bufferENS1_16function_ptr_tagE:
  453|  4.79k|        {
  454|  4.79k|          this->clear(functor);
  455|  4.79k|          if (f) {
  ------------------
  |  Branch (455:15): [True: 4.79k, False: 0]
  ------------------
  456|  4.79k|            functor.members.func_ptr = reinterpret_cast<void (*)()>(f);
  457|  4.79k|            return true;
  458|  4.79k|          } else {
  459|      0|            return false;
  460|      0|          }
  461|  4.79k|        }
_ZNK5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EEcvbEv:
  888|   441k|    explicit operator bool () const { return !this->empty(); }
_ZNK5boost10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS_3anyESF_EEclESC_SF_SF_:
  785|   441k|    {
  786|   441k|      if (this->empty())
  ------------------
  |  Branch (786:11): [True: 0, False: 441k]
  ------------------
  787|      0|        boost::throw_exception(bad_function_call());
  788|       |
  789|   441k|      return get_vtable()->invoker
  790|   441k|               (this->functor, static_cast<T&&>(a)...);
  791|   441k|    }

_ZN5boost14adjacency_listINS_4vecSES1_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEC2ERKS5_:
  316|  4.79k|    : m_property(new graph_property_type(p))
  317|  4.79k|    {
  318|  4.79k|    }

_ZN5boost17vec_adj_list_implINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEEC2Ev:
 2121|  4.79k|    inline vec_adj_list_impl() {}
_ZN5boost3getINS_6detail12adj_list_genINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES4_S4_S5_S6_S7_S8_S9_E6configENS_21directed_graph_helperISC_EEMS6_NSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEEEENS_12property_mapINT_10graph_typeET1_vE4typeESQ_RNS_15adj_list_helperISO_T0_EE:
 1739|  4.79k|{
 1740|  4.79k|    typedef typename detail::property_kind_from_graph<
 1741|  4.79k|        adj_list_helper< Config, Base >, Property >::type Kind;
 1742|  4.79k|    return detail::get_dispatch(g, p, Kind());
 1743|  4.79k|}
_ZN5boost6detail12get_dispatchINS0_12adj_list_genINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES4_S4_S5_S6_S7_S8_S9_E6configENS_21directed_graph_helperISC_EEMS6_NSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEEEENS_12property_mapINT_10graph_typeET1_vE4typeERNS_15adj_list_helperISO_T0_EESQ_NS_19vertex_property_tagE:
 1715|  4.79k|    {
 1716|  4.79k|        typedef typename Config::graph_type Graph;
 1717|  4.79k|        typedef typename boost::property_map< Graph, Property >::type PA;
 1718|  4.79k|        return PA(&static_cast< Graph& >(g), p);
 1719|  4.79k|    }
_ZN5boost32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPS8_NSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEERSG_MS4_SG_EC2ES9_SI_:
 2559|  4.79k|    : m_g(g), m_tag(tag)
 2560|  4.79k|    {
 2561|  4.79k|    }
_ZNK5boost32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPS8_NSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEERSG_MS4_SG_EixEm:
 2563|  11.0k|    {
 2564|  11.0k|        return get_property_value(m_g->m_vertices[v].m_property, m_tag);
 2565|  11.0k|    }
_ZN5boost10add_vertexINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEEENT0_17vertex_descriptorERNS_17vec_adj_list_implIT_SF_T1_EE:
 2229|  11.0k|{
 2230|  11.0k|    Graph& g = static_cast< Graph& >(g_);
 2231|  11.0k|    g.m_vertices.resize(g.m_vertices.size() + 1);
 2232|  11.0k|    g.added_vertex(g.m_vertices.size() - 1);
 2233|  11.0k|    return g.m_vertices.size() - 1;
 2234|  11.0k|}
_ZN5boost6detail12adj_list_genINS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES3_S3_S4_S5_S6_S7_S8_E6config13stored_vertexC2Ev:
 2473|  11.0k|                stored_vertex() {}
_ZN5boost6detail12adj_list_genINS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES3_S3_S4_S5_S6_S7_S8_E6config18rand_stored_vertexC2Ev:
 2450|  11.0k|                rand_stored_vertex() {}
_ZN5boost8add_edgeINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEEENSt3__14pairINT0_15edge_descriptorEbEENSH_17vertex_descriptorESK_RNS_17vec_adj_list_implIT_SH_T1_EE:
 2273|  5.43M|{
 2274|  5.43M|    typename Config::edge_property_type p;
 2275|  5.43M|    return add_edge(u, v, p, g_);
 2276|  5.43M|}
_ZN5boost8add_edgeINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEEENSt3__14pairINT0_15edge_descriptorEbEENSH_17vertex_descriptorESK_RKNSH_18edge_property_typeERNS_17vec_adj_list_implIT_SH_T1_EE:
 2260|  5.43M|{
 2261|  5.43M|    BOOST_USING_STD_MAX();
 2262|  5.43M|    typename Config::vertex_descriptor x
 2263|  5.43M|        = max BOOST_PREVENT_MACRO_SUBSTITUTION(u, v);
 2264|  5.43M|    if (x >= num_vertices(g_))
  ------------------
  |  Branch (2264:9): [True: 0, False: 5.43M]
  ------------------
 2265|      0|        g_.m_vertices.resize(x + 1);
 2266|  5.43M|    adj_list_helper< Config, Base >& g = g_;
 2267|  5.43M|    return add_edge(u, v, p, g);
 2268|  5.43M|}
_ZN5boost12num_verticesINS_6detail12adj_list_genINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES4_S4_S5_S6_S7_S8_S9_E6configENS_21directed_graph_helperISC_EEEENT_18vertices_size_typeERKNS_15adj_list_helperISF_T0_EE:
 1626|  5.43M|{
 1627|  5.43M|    typedef typename Config::graph_type AdjList;
 1628|  5.43M|    const AdjList& g = static_cast< const AdjList& >(g_);
 1629|  5.43M|    return g.vertex_set().size();
 1630|  5.43M|}
_ZNK5boost17vec_adj_list_implINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEE10vertex_setEv:
 2169|  5.43M|    {
 2170|  5.43M|        return boost::integer_range< vertex_descriptor >(0, m_vertices.size());
 2171|  5.43M|    }
_ZN5boost8add_edgeINS_6detail12adj_list_genINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES4_S4_S5_S6_S7_S8_S9_E6configEEENSt3__14pairINS_21directed_graph_helperIT_E15edge_descriptorEbEENSG_17vertex_descriptorESK_RKNSG_18edge_property_typeERSH_:
  726|  5.43M|{
  727|  5.43M|    typedef typename Config::edge_descriptor edge_descriptor;
  728|  5.43M|    typedef typename Config::graph_type graph_type;
  729|  5.43M|    typedef typename Config::StoredEdge StoredEdge;
  730|  5.43M|    graph_type& g = static_cast< graph_type& >(g_);
  731|  5.43M|    typename Config::OutEdgeList::iterator i;
  732|  5.43M|    bool inserted;
  733|  5.43M|    boost::tie(i, inserted)
  734|  5.43M|        = boost::graph_detail::push(g.out_edge_list(u), StoredEdge(v, p));
  735|  5.43M|    return std::make_pair(
  736|  5.43M|        edge_descriptor(u, v, &(*i).get_property()), inserted);
  737|  5.43M|}
_ZN5boost6detail20stored_edge_propertyIm7DotEdgeEC2EOS3_:
  312|  5.43M|        : Base(static_cast< Base&& >(x)), m_property(std::move(x.m_property))
  313|  5.43M|        {
  314|  5.43M|        }
_ZN5boost6detail20stored_edge_propertyIm7DotEdgeEC2ERKS3_:
  316|  8.62M|        : Base(static_cast< Base const& >(x))
  317|  8.62M|        , m_property(std::move(const_cast< self& >(x).m_property))
  318|  8.62M|        {
  319|  8.62M|        }
_ZN5boost17vec_adj_list_implINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENS_6detail12adj_list_genIS8_S2_S2_S3_S4_S5_S6_S7_E6configENS_21directed_graph_helperISC_EEE13out_edge_listEm:
 2173|  5.43M|    {
 2174|  5.43M|        return m_vertices[v].m_out_edges;
 2175|  5.43M|    }
_ZN5boost6detail20stored_edge_propertyIm7DotEdgeEC2EmRKS2_:
  308|  5.43M|        : stored_edge< Vertex >(target), m_property(new Property(p))
  309|  5.43M|        {
  310|  5.43M|        }
_ZN5boost6detail11stored_edgeImEC2EmRKNS_11no_propertyE:
  216|  5.43M|        : m_target(target)
  217|  5.43M|        {
  218|  5.43M|        }
_ZN5boost6detail20stored_edge_propertyIm7DotEdgeE12get_propertyEv:
  336|  5.43M|        inline Property& get_property() { return *m_property; }
_ZN5boost8verticesINS_6detail12adj_list_genINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEES4_S4_S5_S6_S7_S8_S9_E6configENS_21directed_graph_helperISC_EEEENSt3__14pairINT_15vertex_iteratorESI_EERKNS_15adj_list_helperISH_T0_EE:
 1617|  1.12k|{
 1618|  1.12k|    typedef typename Config::graph_type AdjList;
 1619|  1.12k|    const AdjList& cg = static_cast< const AdjList& >(g_);
 1620|  1.12k|    AdjList& g = const_cast< AdjList& >(cg);
 1621|  1.12k|    return std::make_pair(g.vertex_set().begin(), g.vertex_set().end());
 1622|  1.12k|}

_ZN5boost6detail14edge_desc_implINS_12directed_tagEmEC2EmmPKv:
   44|  5.43M|        : Base(s, d), m_eproperty(const_cast< property_type* >(eplug))
   45|  5.43M|        {
   46|  5.43M|        }
_ZN5boost6detail9edge_baseINS_12directed_tagEmEC2Emm:
   27|  5.43M|        inline edge_base(Vertex s, Vertex d) : m_source(s), m_target(d) {}

_ZN5boost17read_graphviz_newINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEEEbRKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERT_RNS_18dynamic_propertiesESH_:
  116|  4.79k|{
  117|  4.79k|    boost::detail::graph::mutate_graph_impl< MutableGraph > mg(
  118|  4.79k|        graph, dp, node_id);
  119|  4.79k|    return detail::graph::read_graphviz_new(str, &mg);
  120|  4.79k|}
_ZN5boost20read_graphviz_detailltERKNS0_13node_and_portES3_:
   69|  4.49M|        {
   70|  4.49M|            if (a.name != b.name)
  ------------------
  |  Branch (70:17): [True: 4.11M, False: 375k]
  ------------------
   71|  4.11M|                return a.name < b.name;
   72|   375k|            if (a.angle != b.angle)
  ------------------
  |  Branch (72:17): [True: 0, False: 375k]
  ------------------
   73|      0|                return a.angle < b.angle;
   74|   375k|            return a.location < b.location;
   75|   375k|        }

_ZN5boost13read_graphvizINS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEEEbRKNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERT_RNS_18dynamic_propertiesESH_:
  944|  4.79k|{
  945|       |#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
  946|       |    return read_graphviz_spirit(data.begin(), data.end(), graph, dp, node_id);
  947|       |#else // Non-Spirit parser
  948|  4.79k|    return read_graphviz_new(data, graph, dp, node_id);
  949|  4.79k|#endif
  950|  4.79k|}
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEEC2ERSA_RNS_18dynamic_propertiesENSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEE:
  727|  4.79k|            : graph_(graph), dp_(dp), node_id_prop_(node_id_prop)
  728|  4.79k|            {
  729|  4.79k|            }
_ZN5boost6detail5graph12mutate_graphD2Ev:
  692|  4.79k|            virtual ~mutate_graph() {}
_ZNK5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE11is_directedEv:
  734|  4.79k|            {
  735|  4.79k|                return boost::is_convertible<
  736|  4.79k|                    typename boost::graph_traits<
  737|  4.79k|                        MutableGraph >::directed_category,
  738|  4.79k|                    boost::directed_tag >::value;
  739|  4.79k|            }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE13do_add_vertexERKNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEE:
  742|  11.0k|            {
  743|       |                // Add the node to the graph.
  744|  11.0k|                bgl_vertex_t v = add_vertex(graph_);
  745|       |
  746|       |                // Set up a mapping from name to BGL vertex.
  747|  11.0k|                bgl_nodes.insert(std::make_pair(node, v));
  748|       |
  749|       |                // node_id_prop_ allows the caller to see the real id names for
  750|       |                // nodes.
  751|  11.0k|                put(node_id_prop_, dp_, v, node);
  752|  11.0k|            }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE11do_add_edgeERKNS1_6edge_tERKNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEESN_:
  756|  5.43M|            {
  757|  5.43M|                std::pair< bgl_edge_t, bool > result
  758|  5.43M|                    = add_edge(bgl_nodes[source], bgl_nodes[target], graph_);
  759|       |
  760|  5.43M|                if (!result.second)
  ------------------
  |  Branch (760:21): [True: 0, False: 5.43M]
  ------------------
  761|      0|                {
  762|       |                    // In the case of no parallel edges allowed
  763|      0|                    boost::throw_exception(bad_parallel_edge(source, target));
  764|      0|                }
  765|  5.43M|                else
  766|  5.43M|                {
  767|  5.43M|                    bgl_edges.insert(std::make_pair(edge, result.first));
  768|  5.43M|                }
  769|  5.43M|            }
_ZNK5boost6detail5graph6edge_tltERKS2_:
  686|   365M|            bool operator<(const edge_t& rhs) const { return idx_ < rhs.idx_; }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE17set_node_propertyERKNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEESK_SK_:
  773|  8.15k|            {
  774|  8.15k|                put(key, dp_, bgl_nodes[node], value);
  775|  8.15k|            }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE17set_edge_propertyERKNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERKNS1_6edge_tESK_:
  779|   429k|            {
  780|   429k|                put(key, dp_, bgl_edges[edge], value);
  781|   429k|            }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE18set_graph_propertyERKNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEESK_:
  785|  3.33k|            {
  786|       |                /* RG: pointer to graph prevents copying */
  787|  3.33k|                put(key, dp_, &graph_, value);
  788|  3.33k|            }
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEE21finish_building_graphEv:
  790|  1.12k|            void finish_building_graph() BOOST_OVERRIDE {}
_ZN5boost6detail5graph17mutate_graph_implINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEED2Ev:
  731|  4.79k|            ~mutate_graph_impl() BOOST_OVERRIDE {}
_ZN5boost19bad_graphviz_syntaxC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  656|  3.65k|    bad_graphviz_syntax(const std::string& errmsg) : errmsg(errmsg) {}
_ZN5boost19bad_graphviz_syntaxD2Ev:
  658|  7.31k|    ~bad_graphviz_syntax() throw() BOOST_OVERRIDE {}
_ZN5boost6detail5graph6edge_tC2Ei:
  673|  5.43M|            explicit edge_t(int i) : idx_(i) {}
_ZN5boost6detail5graph6edge_t8new_edgeEv:
  677|  5.43M|            {
  678|  5.43M|                static int idx = 0;
  679|  5.43M|                return edge_t(idx++);
  680|  5.43M|            }

_ZN5boost5graph17maybe_named_graphINS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEmS5_vE12added_vertexEm:
  495|  11.0k|        void added_vertex(Vertex) {}

_ZN5boost9iterators16iterator_adaptorINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESC_EESB_cSC_cSC_EC2ERKSB_:
  264|   602k|          : m_iterator(iter)
  265|   602k|      {
  266|   602k|      }
_ZNK5boost9iterators16iterator_adaptorINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESC_EESB_cSC_cSC_E5equalISD_SB_cSC_cSC_EEbRKNS1_IT_T0_T1_T2_T3_T4_EE:
  300|  22.5M|      {
  301|       |        // Maybe readd with same_distance
  302|       |        //           BOOST_STATIC_ASSERT(
  303|       |        //               (detail::same_category_and_difference<Derived,OtherDerived>::value)
  304|       |        //               );
  305|  22.5M|          return m_iterator == x.base();
  306|  22.5M|      }
_ZNK5boost9iterators16iterator_adaptorINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESC_EESB_cSC_cSC_E4baseEv:
  271|  44.7M|        { return m_iterator; }
_ZN5boost9iterators16iterator_adaptorINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESC_EESB_cSC_cSC_E9incrementEv:
  321|  22.2M|      void increment() { ++m_iterator; }

_ZN5boost9iteratorsmiINS_12range_detail16integer_iteratorImEEmNS0_27random_access_traversal_tagEmlS4_mS5_mlEENS0_6detail51enable_if_interoperable_and_random_access_traversalIT_T4_NS_3mpl6apply2INS6_22choose_difference_typeES8_S9_E4typeEE4typeERKNS0_15iterator_facadeIS8_T0_T1_T2_T3_EERKNSH_IS9_T5_T6_T7_T8_EE:
  989|  5.43M|  {                                                                             \
  990|  5.43M|      /* For those compilers that do not support enable_if */                   \
  991|  5.43M|      BOOST_STATIC_ASSERT((                                                     \
  ------------------
  |  |   71|  5.43M|#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
  ------------------
  992|  5.43M|          is_interoperable< Derived1, Derived2 >::value &&                      \
  993|  5.43M|          boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived1 >::type, random_access_traversal_tag >::value && \
  994|  5.43M|          boost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived2 >::type, random_access_traversal_tag >::value \
  995|  5.43M|      ));                                                                       \
  996|  5.43M|      return_prefix iterator_core_access::base_op(                              \
  997|  5.43M|          *static_cast<Derived1 const*>(&lhs)                                   \
  998|  5.43M|        , *static_cast<Derived2 const*>(&rhs)                                   \
  999|  5.43M|        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \
  ------------------
  |  |  956|  5.43M|#  define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()
  ------------------
 1000|  5.43M|      );                                                                        \
 1001|  5.43M|  }
_ZN5boost9iterators20iterator_core_access13distance_fromINS_12range_detail16integer_iteratorImEES5_EENT_15difference_typeERKS6_RKT0_N4mpl_5bool_ILb1EEE:
  667|  5.43M|      {
  668|  5.43M|          return -f1.distance_to(f2);
  669|  5.43M|      }
_ZN5boost9iteratorsneINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESC_EEcNS0_27random_access_traversal_tagEclSD_cSE_clEENS0_6detail23enable_if_interoperableIT_T4_NS_3mpl6apply2INSF_12always_bool2ESH_SI_E4typeEE4typeERKNS0_15iterator_facadeISH_T0_T1_T2_T3_EERKNSQ_ISI_T5_T6_T7_T8_EE:
  961|  22.5M|  {                                                                             \
  962|  22.5M|      /* For those compilers that do not support enable_if */                   \
  963|  22.5M|      BOOST_STATIC_ASSERT((                                                     \
  ------------------
  |  |   71|  22.5M|#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
  ------------------
  964|  22.5M|          is_interoperable< Derived1, Derived2 >::value                         \
  965|  22.5M|      ));                                                                       \
  966|  22.5M|      return_prefix iterator_core_access::base_op(                              \
  967|  22.5M|          *static_cast<Derived1 const*>(&lhs)                                   \
  968|  22.5M|        , *static_cast<Derived2 const*>(&rhs)                                   \
  969|  22.5M|        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \
  ------------------
  |  |  956|  22.5M|#  define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()
  ------------------
  970|  22.5M|      );                                                                        \
  971|  22.5M|  }
_ZN5boost9iterators20iterator_core_access5equalINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EESE_EEbRKT_RKT0_N4mpl_5bool_ILb1EEE:
  648|  22.5M|      {
  649|  22.5M|          return f1.equal(f2);
  650|  22.5M|      }
_ZNK5boost9iterators6detail20iterator_facade_baseINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEcNS0_27random_access_traversal_tagEclLb0ELb0EEdeEv:
  736|  22.2M|        {
  737|  22.2M|            return iterator_core_access::dereference(this->derived());
  738|  22.2M|        }
_ZN5boost9iterators20iterator_core_access11dereferenceINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEEENT_9referenceERKSF_:
  630|  22.2M|      {
  631|  22.2M|          return f.dereference();
  632|  22.2M|      }
_ZNK5boost9iterators6detail20iterator_facade_baseINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEcNS0_27random_access_traversal_tagEclLb0ELb0EE7derivedEv:
  761|  22.2M|        {
  762|  22.2M|            return *static_cast<Derived const*>(this);
  763|  22.2M|        }
_ZN5boost9iterators6detail20iterator_facade_baseINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEcNS0_27random_access_traversal_tagEclLb0ELb0EEppEv:
  746|  22.2M|        {
  747|  22.2M|            iterator_core_access::increment(this->derived());
  748|  22.2M|            return this->derived();
  749|  22.2M|        }
_ZN5boost9iterators20iterator_core_access9incrementINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEEEvRT_:
  636|  22.2M|      {
  637|  22.2M|          f.increment();
  638|  22.2M|      }
_ZN5boost9iterators6detail20iterator_facade_baseINS0_18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESD_EEcNS0_27random_access_traversal_tagEclLb0ELb0EE7derivedEv:
  756|  44.4M|        {
  757|  44.4M|            return *static_cast<Derived*>(this);
  758|  44.4M|        }

_ZN5boost9iterators23make_transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEEEENS0_18transform_iteratorIT_T0_NS_11use_defaultESE_EESD_SC_:
  140|   602k|  {
  141|   602k|      return transform_iterator<UnaryFunc, Iterator>(it, fun);
  142|   602k|  }
_ZN5boost9iterators18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESB_EC2ERKSA_S5_:
   96|   602k|      : super_t(x), m_f(f) { }
_ZNK5boost9iterators18transform_iteratorINS_9algorithm6detail9to_lowerFIcEENSt3__111__wrap_iterIPKcEENS_11use_defaultESB_E11dereferenceEv:
  130|  22.2M|    { return m_f(*this->base()); }

_ZN5boost12lexical_castINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiEET_RKT0_:
   39|  89.9k|    {
   40|  89.9k|        Target result = Target();
   41|       |
   42|  89.9k|        if (!boost::conversion::detail::try_lexical_convert(arg, result)) {
  ------------------
  |  Branch (42:13): [True: 0, False: 89.9k]
  ------------------
   43|      0|            boost::conversion::detail::throw_bad_cast<Source, Target>();
   44|      0|        }
   45|       |
   46|  89.9k|        return result;
   47|  89.9k|    }
_ZN5boost12lexical_castINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_20read_graphviz_detail5tokenEEET_RKT0_:
   39|  2.91k|    {
   40|  2.91k|        Target result = Target();
   41|       |
   42|  2.91k|        if (!boost::conversion::detail::try_lexical_convert(arg, result)) {
  ------------------
  |  Branch (42:13): [True: 0, False: 2.91k]
  ------------------
   43|      0|            boost::conversion::detail::throw_bad_cast<Source, Target>();
   44|      0|        }
   45|       |
   46|  2.91k|        return result;
   47|  2.91k|    }

_ZN5boost6detail22lexical_converter_implINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiE11try_convertERKiRS8_:
  461|  89.9k|            static inline bool try_convert(const Source& arg, Target& result) {
  462|  89.9k|                from_src_stream src_stream;
  463|  89.9k|                if (!src_stream.stream_in(lcast::exact<Source>{arg}))
  ------------------
  |  Branch (463:21): [True: 0, False: 89.9k]
  ------------------
  464|      0|                    return false;
  465|       |
  466|  89.9k|                to_target_stream out(src_stream.cbegin(), src_stream.cend());
  467|  89.9k|                if (!out.stream_out(result))
  ------------------
  |  Branch (467:21): [True: 0, False: 89.9k]
  ------------------
  468|      0|                    return false;
  469|       |
  470|  89.9k|                return true;
  471|  89.9k|            }
_ZN5boost6detail22lexical_converter_implINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS_20read_graphviz_detail5tokenEE11try_convertERKSA_RS8_:
  461|  2.91k|            static inline bool try_convert(const Source& arg, Target& result) {
  462|  2.91k|                from_src_stream src_stream;
  463|  2.91k|                if (!src_stream.stream_in(lcast::exact<Source>{arg}))
  ------------------
  |  Branch (463:21): [True: 0, False: 2.91k]
  ------------------
  464|      0|                    return false;
  465|       |
  466|  2.91k|                to_target_stream out(src_stream.cbegin(), src_stream.cend());
  467|  2.91k|                if (!out.stream_out(result))
  ------------------
  |  Branch (467:21): [True: 0, False: 2.91k]
  ------------------
  468|      0|                    return false;
  469|       |
  470|  2.91k|                return true;
  471|  2.91k|            }

_ZN5boost6detail5lcast20optimized_src_streamIcNSt3__111char_traitsIcEELm21EEC2Ev:
  124|  89.9k|          : start(buffer)
  125|  89.9k|          , finish(buffer + CharacterBufferSize)
  126|  89.9k|        {}
_ZN5boost6detail5lcast20optimized_src_streamIcNSt3__111char_traitsIcEELm21EE9stream_inIiEENS_11enable_if_cIXaasr5boost9is_signedIT_EE5valuentsr5boost7is_enumIS9_EE5valueEbE4typeENS1_5exactIS9_EE:
  316|  89.9k|                stream_in(lcast::exact<Type> x)                  { return shl_signed(x.payload); }
_ZN5boost6detail5lcast20optimized_src_streamIcNSt3__111char_traitsIcEELm21EE10shl_signedIiEEbT_:
  186|  89.9k|        inline bool shl_signed(const T n) {
  187|  89.9k|            CharT* tmp_finish = buffer + CharacterBufferSize;
  188|  89.9k|            typedef typename boost::make_unsigned<T>::type utype;
  189|  89.9k|            CharT* tmp_start = lcast_put_unsigned<Traits, utype, CharT>(lcast_to_unsigned(n), tmp_finish).convert();
  190|  89.9k|            if (n < 0) {
  ------------------
  |  Branch (190:17): [True: 0, False: 89.9k]
  ------------------
  191|      0|                --tmp_start;
  192|      0|                CharT const minus = lcast_char_constants<CharT>::minus;
  193|      0|                Traits::assign(*tmp_start, minus);
  194|      0|            }
  195|  89.9k|            start = tmp_start;
  196|  89.9k|            finish = tmp_finish;
  197|  89.9k|            return true;
  198|  89.9k|        }
_ZNK5boost6detail5lcast20optimized_src_streamIcNSt3__111char_traitsIcEELm21EE6cbeginEv:
  128|  89.9k|        const CharT* cbegin() const noexcept {
  129|  89.9k|            return start;
  130|  89.9k|        }
_ZNK5boost6detail5lcast20optimized_src_streamIcNSt3__111char_traitsIcEELm21EE4cendEv:
  132|  89.9k|        const CharT* cend() const noexcept {
  133|  89.9k|            return finish;
  134|  89.9k|        }
_ZN5boost6detail5lcast16to_target_streamIcNSt3__111char_traitsIcEEEC2EPKcS8_:
  492|  92.8k|          : start(begin)
  493|  92.8k|          , finish(end)
  494|  92.8k|        {}
_ZN5boost6detail5lcast16to_target_streamIcNSt3__111char_traitsIcEEE10stream_outIS5_NS3_9allocatorIcEEEEbRNS3_12basic_stringIcT_T0_EE:
  657|  92.8k|        bool stream_out(std::basic_string<CharT,CharTraits,Alloc>& str) {
  658|  92.8k|            str.assign(start, finish); return true;
  659|  92.8k|        }
_ZN5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEEC2Ev:
  380|  2.91k|        ios_src_stream(): out_buffer(), out_stream(&out_buffer) {}
_ZN5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEE9stream_inINS_20read_graphviz_detail5tokenEEEbNS1_5exactIT_EE:
  475|  2.91k|        bool stream_in(lcast::exact<InStreamable> x)  { return shl_input_streamable(x.payload); }
_ZN5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEE20shl_input_streamableIKNS_20read_graphviz_detail5tokenEEEbRT_:
  397|  2.91k|        bool shl_input_streamable(InputStreamable& input) {
  398|       |#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
  399|       |            // If you have compilation error at this point, than your STL library
  400|       |            // does not support such conversions. Try updating it.
  401|       |            static_assert(boost::is_same<char, CharT>::value, "");
  402|       |#endif
  403|       |
  404|  2.91k|#ifndef BOOST_NO_EXCEPTIONS
  405|  2.91k|            out_stream.exceptions(std::ios::badbit);
  406|  2.91k|            try {
  407|  2.91k|#endif
  408|  2.91k|            bool const result = !(out_stream << input).fail();
  409|  2.91k|            const auto* const p = get_rdbuf();
  410|  2.91k|            start = p->pbase();
  411|  2.91k|            finish = p->pptr();
  412|  2.91k|            return result;
  413|  2.91k|#ifndef BOOST_NO_EXCEPTIONS
  414|  2.91k|            } catch (const ::std::ios_base::failure& /*f*/) {
  415|      0|                return false;
  416|      0|            }
  417|  2.91k|#endif
  418|  2.91k|        }
_ZNK5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEE9get_rdbufEv:
  390|  2.91k|        const deduced_out_buffer_t* get_rdbuf() const {
  391|  2.91k|            return static_cast<deduced_out_buffer_t*>(
  392|  2.91k|                out_stream.rdbuf()
  393|  2.91k|            );
  394|  2.91k|        }
_ZNK5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEE6cbeginEv:
  382|  2.91k|        const CharT* cbegin() const noexcept {
  383|  2.91k|            return start;
  384|  2.91k|        }
_ZNK5boost6detail5lcast14ios_src_streamIcNSt3__111char_traitsIcEEE4cendEv:
  386|  2.91k|        const CharT* cend() const noexcept {
  387|  2.91k|            return finish;
  388|  2.91k|        }

_ZN5boost6detail17lcast_to_unsignedIiEENS_13make_unsignedIT_E4typeES3_:
   63|  89.9k|        typename boost::make_unsigned<T>::type lcast_to_unsigned(const T value) noexcept {
   64|  89.9k|            typedef typename boost::make_unsigned<T>::type result_type;
   65|  89.9k|            return value < 0
  ------------------
  |  Branch (65:20): [True: 0, False: 89.9k]
  ------------------
   66|  89.9k|                ? static_cast<result_type>(0u - static_cast<result_type>(value))
   67|  89.9k|                : static_cast<result_type>(value);
   68|  89.9k|        }
_ZN5boost6detail18lcast_put_unsignedINSt3__111char_traitsIcEEjcEC2EjPc:
   87|  89.9k|                : m_value(n_param), m_finish(finish)
   88|  89.9k|                , m_czero(lcast_char_constants<CharT>::zero), m_zero(Traits::to_int_type(m_czero))
   89|  89.9k|            {
   90|  89.9k|#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
   91|  89.9k|                static_assert(!std::numeric_limits<T>::is_signed, "");
   92|  89.9k|#endif
   93|  89.9k|            }
_ZN5boost6detail18lcast_put_unsignedINSt3__111char_traitsIcEEjcE7convertEv:
   95|  89.9k|            CharT* convert() {
   96|  89.9k|#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
   97|  89.9k|                std::locale loc;
   98|  89.9k|                if (loc == std::locale::classic()) {
  ------------------
  |  Branch (98:21): [True: 89.9k, False: 0]
  ------------------
   99|  89.9k|                    return main_convert_loop();
  100|  89.9k|                }
  101|       |
  102|      0|                typedef std::numpunct<CharT> numpunct;
  103|      0|                numpunct const& np = BOOST_USE_FACET(numpunct, loc);
  104|      0|                std::string const grouping = np.grouping();
  105|      0|                std::string::size_type const grouping_size = grouping.size();
  106|       |
  107|      0|                if (!grouping_size || grouping[0] <= 0) {
  ------------------
  |  Branch (107:21): [True: 0, False: 0]
  |  Branch (107:39): [True: 0, False: 0]
  ------------------
  108|      0|                    return main_convert_loop();
  109|      0|                }
  110|       |
  111|      0|#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
  112|       |                // Check that ulimited group is unreachable:
  113|      0|                static_assert(std::numeric_limits<T>::digits10 < CHAR_MAX, "");
  114|      0|#endif
  115|      0|                CharT const thousands_sep = np.thousands_sep();
  116|      0|                std::string::size_type group = 0; // current group number
  117|      0|                char last_grp_size = grouping[0];
  118|      0|                char left = last_grp_size;
  119|       |
  120|      0|                do {
  121|      0|                    if (left == 0) {
  ------------------
  |  Branch (121:25): [True: 0, False: 0]
  ------------------
  122|      0|                        ++group;
  123|      0|                        if (group < grouping_size) {
  ------------------
  |  Branch (123:29): [True: 0, False: 0]
  ------------------
  124|      0|                            char const grp_size = grouping[group];
  125|      0|                            last_grp_size = (grp_size <= 0 ? static_cast<char>(CHAR_MAX) : grp_size);
  ------------------
  |  Branch (125:46): [True: 0, False: 0]
  ------------------
  126|      0|                        }
  127|       |
  128|      0|                        left = last_grp_size;
  129|      0|                        --m_finish;
  130|      0|                        Traits::assign(*m_finish, thousands_sep);
  131|      0|                    }
  132|       |
  133|      0|                    --left;
  134|      0|                } while (main_convert_iteration());
  ------------------
  |  Branch (134:26): [True: 0, False: 0]
  ------------------
  135|       |
  136|      0|                return m_finish;
  137|       |#else
  138|       |                return main_convert_loop();
  139|       |#endif
  140|      0|            }
_ZN5boost6detail18lcast_put_unsignedINSt3__111char_traitsIcEEjcE17main_convert_loopEv:
  151|  89.9k|            inline CharT* main_convert_loop() noexcept {
  152|   282k|                while (main_convert_iteration());
  ------------------
  |  Branch (152:24): [True: 192k, False: 89.9k]
  ------------------
  153|  89.9k|                return m_finish;
  154|  89.9k|            }
_ZN5boost6detail18lcast_put_unsignedINSt3__111char_traitsIcEEjcE22main_convert_iterationEv:
  143|   282k|            inline bool main_convert_iteration() noexcept {
  144|   282k|                --m_finish;
  145|   282k|                int_type const digit = static_cast<int_type>(m_value % 10U);
  146|   282k|                Traits::assign(*m_finish, Traits::to_char_type(m_zero + digit));
  147|   282k|                m_value /= 10;
  148|   282k|                return !!m_value; // suppressing warnings
  149|   282k|            }

_ZN5boost10conversion6detail19try_lexical_convertINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEiEEbRKT0_RT_:
   51|  89.9k|        {
   52|  89.9k|            static_assert(
   53|  89.9k|                !boost::is_volatile<Source>::value,
   54|  89.9k|                "Boost.LexicalCast does not support volatile input");
   55|       |
   56|  89.9k|            typedef typename boost::detail::array_to_pointer_decay<Source>::type src;
   57|       |
   58|  89.9k|            typedef boost::detail::is_arithmetic_and_not_xchars<Target, src >
   59|  89.9k|                shall_we_copy_with_dynamic_check_t;
   60|       |
   61|  89.9k|            typedef typename boost::conditional<
   62|  89.9k|                 shall_we_copy_with_dynamic_check_t::value,
   63|  89.9k|                 boost::detail::dynamic_num_converter_impl<Target, src >,
   64|  89.9k|                 boost::detail::lexical_converter_impl<Target, src >
   65|  89.9k|            >::type caster_type;
   66|       |
   67|  89.9k|            return caster_type::try_convert(arg, result);
   68|  89.9k|        }
_ZN5boost10conversion6detail19try_lexical_convertINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS_20read_graphviz_detail5tokenEEEbRKT0_RT_:
   51|  2.91k|        {
   52|  2.91k|            static_assert(
   53|  2.91k|                !boost::is_volatile<Source>::value,
   54|  2.91k|                "Boost.LexicalCast does not support volatile input");
   55|       |
   56|  2.91k|            typedef typename boost::detail::array_to_pointer_decay<Source>::type src;
   57|       |
   58|  2.91k|            typedef boost::detail::is_arithmetic_and_not_xchars<Target, src >
   59|  2.91k|                shall_we_copy_with_dynamic_check_t;
   60|       |
   61|  2.91k|            typedef typename boost::conditional<
   62|  2.91k|                 shall_we_copy_with_dynamic_check_t::value,
   63|  2.91k|                 boost::detail::dynamic_num_converter_impl<Target, src >,
   64|  2.91k|                 boost::detail::lexical_converter_impl<Target, src >
   65|  2.91k|            >::type caster_type;
   66|       |
   67|  2.91k|            return caster_type::try_convert(arg, result);
   68|  2.91k|        }

_ZN5boost5priorINSt3__111__wrap_iterIPNS_6detail20stored_edge_propertyIm7DotEdgeEEEEEET_S9_:
  144|  5.43M|inline T prior(T x) { return --x; }

_ZN5boost12graph_detail4pushINSt3__16vectorINS_6detail20stored_edge_propertyIm7DotEdgeEENS2_9allocatorIS7_EEEES7_EENS2_4pairINT_8iteratorEbEERSC_OT0_:
  605|  5.43M|    {
  606|  5.43M|        return push_dispatch(
  607|  5.43M|            c, BOOST_PENDING_FWD_VALUE(T, v), container_category(c));
  ------------------
  |  |   39|  5.43M|#define BOOST_PENDING_FWD_VALUE(type, var) (std::forward< type >((var)))
  ------------------
  608|  5.43M|    }
_ZN5boost12graph_detail13push_dispatchINSt3__16vectorINS_6detail20stored_edge_propertyIm7DotEdgeEENS2_9allocatorIS7_EEEES7_EENS2_4pairINT_8iteratorEbEERSC_OT0_NS0_27back_insertion_sequence_tagE:
  573|  5.43M|    {
  574|  5.43M|        c.push_back(BOOST_PENDING_FWD_VALUE(T, v));
  ------------------
  |  |   39|  5.43M|#define BOOST_PENDING_FWD_VALUE(type, var) (std::forward< type >((var)))
  ------------------
  575|  5.43M|        return std::make_pair(boost::prior(c.end()), true);
  576|  5.43M|    }
_ZN5boost12graph_detail18container_categoryINS_6detail20stored_edge_propertyIm7DotEdgeEENSt3__19allocatorIS5_EEEENS0_10vector_tagERKNS6_6vectorIT_T0_EE:
  142|  5.43M|    {
  143|  5.43M|        return vector_tag();
  144|  5.43M|    }

_ZN5boost18get_property_valueI9DotVertexMS1_NSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEERNS_19lookup_one_propertyIT_T0_E4typeERSB_SC_:
  281|  11.0k|{
  282|  11.0k|    return lookup_one_property< PropertyList, Tag >::lookup(p, tag);
  283|  11.0k|}
_ZN5boost28lookup_one_property_internalI9DotVertexMS1_NSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvE6lookupERS1_S9_:
  227|  11.0k|    static R& lookup(T& x, R TMaybeBase::*ptr) { return x.*ptr; }

_ZN5boost23ignore_other_propertiesERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEERKNS_3anyESB_:
  349|   441k|                        const boost::any&) {
  350|   441k|  return boost::shared_ptr<boost::dynamic_property_map>();
  351|   441k|}
_ZN5boost18dynamic_propertiesC2ERKNS_10function_nINS_10shared_ptrINS_20dynamic_property_mapEEEJRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS_3anyESG_EEE:
  224|  4.79k|  dynamic_properties(const generate_fn_type& g) : generate_fn(g) {}
_ZN5boost18dynamic_propertiesD2Ev:
  226|  4.79k|  ~dynamic_properties() {}
_ZN5boost18dynamic_properties8propertyINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSA_NSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERSI_MS6_SI_EEEERS0_RKSI_T_:
  231|  4.79k|  {
  232|  4.79k|    boost::shared_ptr<dynamic_property_map> pm(
  233|  4.79k|      boost::static_pointer_cast<dynamic_property_map>(
  234|  4.79k|        boost::make_shared<detail::dynamic_property_map_adaptor<PropertyMap> >(property_map_)));
  235|  4.79k|    property_maps.insert(property_maps_type::value_type(name, pm));
  236|       |
  237|  4.79k|    return *this;
  238|  4.79k|  }
_ZN5boost6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSA_NSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERSI_MS6_SI_EEEC2ERKSL_:
  173|  4.79k|    : property_map_(property_map_) { }
_ZN5boost20dynamic_property_mapD2Ev:
   61|  4.79k|  virtual ~dynamic_property_map() { }
_ZN5boost6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSA_NSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERSI_MS6_SI_EEE3putERKNS_3anyESP_:
  188|  11.0k|  {
  189|  11.0k|    do_put(in_key, in_value,
  190|  11.0k|           mpl::bool_<(is_convertible<category*,
  191|  11.0k|                                      writable_property_map_tag*>::value)>());
  192|  11.0k|  }
_ZN5boost6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSA_NSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERSI_MS6_SI_EEE6do_putERKNS_3anyESP_N4mpl_5bool_ILb1EEE:
  149|  11.0k|  {
  150|  11.0k|    using boost::put;
  151|       |
  152|  11.0k|    key_type key_ = any_cast<key_type>(in_key);
  153|  11.0k|    if (in_value.type() == boost::typeindex::type_id<value_type>()) {
  ------------------
  |  Branch (153:9): [True: 11.0k, False: 0]
  ------------------
  154|  11.0k|      put(property_map_, key_, any_cast<value_type>(in_value));
  155|  11.0k|    } else {
  156|       |      //  if in_value is an empty string, put a default constructed value_type.
  157|      0|      std::string v = any_cast<std::string>(in_value);
  158|      0|      if (v.empty()) {
  ------------------
  |  Branch (158:11): [True: 0, False: 0]
  ------------------
  159|      0|        put(property_map_, key_, value_type());
  160|      0|      } else {
  161|      0|        put(property_map_, key_, detail::read_value<value_type>(v));
  162|      0|      }
  163|      0|    }
  164|  11.0k|  }
_ZNK5boost6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES4_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSA_NSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEERSI_MS6_SI_EEE3keyEv:
  194|  11.3k|  const std::type_info& key()   const BOOST_OVERRIDE { return typeid(key_type); }
_ZN5boost3putImNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEbRKS7_RNS_18dynamic_propertiesERKT_RKT0_:
  286|  19.1k|{
  287|  19.1k|  for (dynamic_properties::iterator i = dp.lower_bound(name);
  288|  19.1k|       i != dp.end() && i->first == name; ++i) {
  ------------------
  |  Branch (288:8): [True: 17.8k, False: 1.33k]
  |  Branch (288:8): [True: 11.0k, False: 8.15k]
  |  Branch (288:25): [True: 11.0k, False: 6.82k]
  ------------------
  289|  11.0k|    if (i->second->key() == typeid(key)) {
  ------------------
  |  Branch (289:9): [True: 11.0k, False: 0]
  ------------------
  290|  11.0k|      i->second->put(key, value);
  291|  11.0k|      return true;
  292|  11.0k|    }
  293|  11.0k|  }
  294|       |
  295|  8.15k|  boost::shared_ptr<dynamic_property_map> new_map = dp.generate(name, key, value);
  296|  8.15k|  if (new_map.get()) {
  ------------------
  |  Branch (296:7): [True: 0, False: 8.15k]
  ------------------
  297|      0|    new_map->put(key, value);
  298|      0|    dp.insert(name, new_map);
  299|      0|    return true;
  300|  8.15k|  } else {
  301|  8.15k|    return false;
  302|  8.15k|  }
  303|  8.15k|}
_ZN5boost18dynamic_properties11lower_boundERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  255|   452k|  { return property_maps.lower_bound(name); }
_ZN5boost18dynamic_properties3endEv:
  251|   452k|  iterator       end()         { return property_maps.end(); }
_ZN5boost18dynamic_properties8generateImNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS_10shared_ptrINS_20dynamic_property_mapEEERKS8_RKT_RKT0_:
  269|  8.15k|  {
  270|  8.15k|    if(!generate_fn) {
  ------------------
  |  Branch (270:8): [True: 0, False: 8.15k]
  ------------------
  271|      0|      BOOST_THROW_EXCEPTION(property_not_found(name));
  ------------------
  |  |  182|      0|#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
  |  |  ------------------
  |  |  |  |  175|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  ------------------
  272|  8.15k|    } else {
  273|  8.15k|      return generate_fn(name,key,value);
  274|  8.15k|    }
  275|  8.15k|  }
_ZN5boost3putINS_6detail14edge_desc_implINS_12directed_tagEmEENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEbRKSB_RNS_18dynamic_propertiesERKT_RKT0_:
  286|   429k|{
  287|   429k|  for (dynamic_properties::iterator i = dp.lower_bound(name);
  288|   430k|       i != dp.end() && i->first == name; ++i) {
  ------------------
  |  Branch (288:8): [True: 268k, False: 161k]
  |  Branch (288:8): [True: 360, False: 429k]
  |  Branch (288:25): [True: 360, False: 267k]
  ------------------
  289|    360|    if (i->second->key() == typeid(key)) {
  ------------------
  |  Branch (289:9): [True: 0, False: 360]
  ------------------
  290|      0|      i->second->put(key, value);
  291|      0|      return true;
  292|      0|    }
  293|    360|  }
  294|       |
  295|   429k|  boost::shared_ptr<dynamic_property_map> new_map = dp.generate(name, key, value);
  296|   429k|  if (new_map.get()) {
  ------------------
  |  Branch (296:7): [True: 0, False: 429k]
  ------------------
  297|      0|    new_map->put(key, value);
  298|      0|    dp.insert(name, new_map);
  299|      0|    return true;
  300|   429k|  } else {
  301|   429k|    return false;
  302|   429k|  }
  303|   429k|}
_ZN5boost18dynamic_properties8generateINS_6detail14edge_desc_implINS_12directed_tagEmEENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEENS_10shared_ptrINS_20dynamic_property_mapEEERKSC_RKT_RKT0_:
  269|   429k|  {
  270|   429k|    if(!generate_fn) {
  ------------------
  |  Branch (270:8): [True: 0, False: 429k]
  ------------------
  271|      0|      BOOST_THROW_EXCEPTION(property_not_found(name));
  ------------------
  |  |  182|      0|#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
  |  |  ------------------
  |  |  |  |  175|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  ------------------
  272|   429k|    } else {
  273|   429k|      return generate_fn(name,key,value);
  274|   429k|    }
  275|   429k|  }
_ZN5boost3putIPNS_14adjacency_listINS_4vecSES2_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEEEEbRKSG_RNS_18dynamic_propertiesERKT_RKT0_:
  286|  3.33k|{
  287|  3.33k|  for (dynamic_properties::iterator i = dp.lower_bound(name);
  288|  3.33k|       i != dp.end() && i->first == name; ++i) {
  ------------------
  |  Branch (288:8): [True: 2.85k, False: 486]
  |  Branch (288:8): [True: 2, False: 3.33k]
  |  Branch (288:25): [True: 2, False: 2.84k]
  ------------------
  289|      2|    if (i->second->key() == typeid(key)) {
  ------------------
  |  Branch (289:9): [True: 0, False: 2]
  ------------------
  290|      0|      i->second->put(key, value);
  291|      0|      return true;
  292|      0|    }
  293|      2|  }
  294|       |
  295|  3.33k|  boost::shared_ptr<dynamic_property_map> new_map = dp.generate(name, key, value);
  296|  3.33k|  if (new_map.get()) {
  ------------------
  |  Branch (296:7): [True: 0, False: 3.33k]
  ------------------
  297|      0|    new_map->put(key, value);
  298|      0|    dp.insert(name, new_map);
  299|      0|    return true;
  300|  3.33k|  } else {
  301|  3.33k|    return false;
  302|  3.33k|  }
  303|  3.33k|}
_ZN5boost18dynamic_properties8generateIPNS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEENSt3__112basic_stringIcNSB_11char_traitsIcEENSB_9allocatorIcEEEEEENS_10shared_ptrINS_20dynamic_property_mapEEERKSH_RKT_RKT0_:
  269|  3.33k|  {
  270|  3.33k|    if(!generate_fn) {
  ------------------
  |  Branch (270:8): [True: 0, False: 3.33k]
  ------------------
  271|      0|      BOOST_THROW_EXCEPTION(property_not_found(name));
  ------------------
  |  |  182|      0|#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
  |  |  ------------------
  |  |  |  |  175|      0|# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
  |  |  ------------------
  ------------------
  272|  3.33k|    } else {
  273|  3.33k|      return generate_fn(name,key,value);
  274|  3.33k|    }
  275|  3.33k|  }

_ZN5boost3putINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES3_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPS9_NSt3__112basic_stringIcNSB_11char_traitsIcEENSB_9allocatorIcEEEERSH_MS5_SH_EESI_mSH_EEvRKNS_14put_get_helperIT0_T_EET1_RKT2_:
  310|  11.0k|  {
  311|  11.0k|    static_cast<const PropertyMap&>(pa)[k] = v;
  312|  11.0k|  }

_ZN5boost17range_adl_barrier5beginINSt3__14pairINS_12range_detail16integer_iteratorImEES6_EEEENS_14range_iteratorIKT_vE4typeERSA_:
  111|  1.12k|{
  112|  1.12k|#if !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
  113|  1.12k|    using namespace range_detail;
  114|  1.12k|#endif
  115|  1.12k|    return range_begin( r );
  116|  1.12k|}
_ZN5boost12range_detail11range_beginINS0_16integer_iteratorImEEEET_RKNSt3__14pairIS4_S4_EE:
   54|  1.12k|    {
   55|  1.12k|        return p.first;
   56|  1.12k|    }
_ZN5boost17range_adl_barrier5beginINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS_14range_iteratorIKT_vE4typeERSB_:
  111|   301k|{
  112|   301k|#if !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
  113|   301k|    using namespace range_detail;
  114|   301k|#endif
  115|   301k|    return range_begin( r );
  116|   301k|}
_ZN5boost12range_detail11range_beginIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS_14range_iteratorIT_vE4typeERSB_:
   39|   301k|    {
   40|       |        //
   41|       |        // If you get a compile-error here, it is most likely because
   42|       |        // you have not implemented range_begin() properly in
   43|       |        // the namespace of C
   44|       |        //
   45|   301k|        return c.begin();
   46|   301k|    }

_ZN5boost17range_adl_barrier3endINSt3__14pairINS_12range_detail16integer_iteratorImEES6_EEEENS_14range_iteratorIKT_vE4typeERSA_:
  105|  1.12k|{
  106|  1.12k|#if !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
  107|  1.12k|    using namespace range_detail;
  108|  1.12k|#endif
  109|  1.12k|    return range_end( r );
  110|  1.12k|}
_ZN5boost12range_detail9range_endINS0_16integer_iteratorImEEEET_RKNSt3__14pairIS4_S4_EE:
   55|  1.12k|        {
   56|  1.12k|            return p.second;
   57|  1.12k|        }
_ZN5boost17range_adl_barrier3endINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS_14range_iteratorIKT_vE4typeERSB_:
  105|   301k|{
  106|   301k|#if !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
  107|   301k|    using namespace range_detail;
  108|   301k|#endif
  109|   301k|    return range_end( r );
  110|   301k|}
_ZN5boost12range_detail9range_endIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS_14range_iteratorIT_vE4typeERSB_:
   40|   301k|        {
   41|       |            //
   42|       |            // If you get a compile-error here, it is most likely because
   43|       |            // you have not implemented range_begin() properly in
   44|       |            // the namespace of C
   45|       |            //
   46|   301k|            return c.end();
   47|   301k|        }

_ZN5boost13integer_rangeImEC2Emm:
  187|  5.43M|            : base_t(iterator_t(first), iterator_t(last))
  188|  5.43M|        {
  189|  5.43M|        }
_ZN5boost12range_detail16integer_iteratorImEC2Em:
   57|  10.8M|            explicit integer_iterator(value_type x) : m_value(x) {}
_ZNK5boost12range_detail16integer_iteratorImE11distance_toERKS2_:
   76|  5.43M|            {
   77|  5.43M|                return is_signed<value_type>::value
  ------------------
  |  Branch (77:24): [Folded - Ignored]
  ------------------
   78|  5.43M|                    ? (other.m_value - m_value)
   79|  5.43M|                    : (other.m_value >= m_value)
  ------------------
  |  Branch (79:23): [True: 0, False: 5.43M]
  ------------------
   80|  5.43M|                        ? static_cast<difference_type>(other.m_value - m_value)
   81|  5.43M|                        : -static_cast<difference_type>(m_value - other.m_value);
   82|  5.43M|            }

_ZN5boost14iterator_rangeINS_12range_detail16integer_iteratorImEEEC2IS3_EET_S6_:
  484|  5.43M|                : base_type(first, last)
  485|  5.43M|            {
  486|  5.43M|            }
_ZN5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27random_access_traversal_tagEEC2IS4_EET_S9_:
  382|  5.44M|        : base_type(first, last)
  383|  5.44M|    {
  384|  5.44M|    }
_ZN5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27bidirectional_traversal_tagEEC2IS4_EET_S9_:
  313|  5.44M|        : base_type(first, last)
  314|  5.44M|    {
  315|  5.44M|    }
_ZN5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27incrementable_traversal_tagEEC2IS4_EET_S9_:
  216|  5.44M|        : m_Begin(Begin)
  217|  5.44M|        , m_End(End)
  218|  5.44M|    {
  219|  5.44M|    }
_ZNK5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27random_access_traversal_tagEE4sizeEv:
  407|  5.43M|    {
  408|  5.43M|        return this->m_End - this->m_Begin;
  409|  5.43M|    }
_ZNK5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27incrementable_traversal_tagEE5beginEv:
  223|  1.12k|    {
  224|  1.12k|        return m_Begin;
  225|  1.12k|    }
_ZNK5boost21iterator_range_detail19iterator_range_baseINS_12range_detail16integer_iteratorImEENS_9iterators27incrementable_traversal_tagEE3endEv:
  228|  1.12k|    {
  229|  1.12k|        return m_End;
  230|  1.12k|    }
_ZN5boost19make_iterator_rangeINSt3__14pairINS_12range_detail16integer_iteratorImEES5_EEEENS_14iterator_rangeINS_14range_iteratorIKT_vE4typeEEERSA_:
  784|  1.12k|        {
  785|  1.12k|           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >
  786|  1.12k|                ( r, iterator_range_detail::const_range_tag() );
  787|  1.12k|        }
_ZN5boost14iterator_rangeINS_12range_detail16integer_iteratorImEEEC2INSt3__14pairIS3_S3_EEEERKT_NS_21iterator_range_detail15const_range_tagE:
  513|  1.12k|                : base_type(impl::adl_begin(r), impl::adl_end(r))
  514|  1.12k|            {
  515|  1.12k|            }
_ZN5boost21iterator_range_detail19iterator_range_implINS_12range_detail16integer_iteratorImEEE9adl_beginIKNSt3__14pairIS4_S4_EEEES4_RT_:
   69|  1.12k|            {
   70|  1.12k|                return IteratorT( boost::begin( r ) );
   71|  1.12k|            }
_ZN5boost21iterator_range_detail19iterator_range_implINS_12range_detail16integer_iteratorImEEE7adl_endIKNSt3__14pairIS4_S4_EEEES4_RT_:
   75|  1.12k|            {
   76|  1.12k|                return IteratorT( boost::end( r ) );
   77|  1.12k|            }

_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2Ev:
  338|  33.5k|   explicit basic_regex(){}
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEaSINSt3__111char_traitsIcEENS7_9allocatorIcEEEERS5_RKNS7_12basic_stringIcT_T0_EE:
  415|  4.79k|   {
  416|  4.79k|      return assign(p.data(), p.data() + p.size(), regex_constants::normal);
  417|  4.79k|   }
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j:
  386|  33.5k|   {
  387|  33.5k|      return do_assign(p1, p2, f);
  388|  33.5k|   }
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9do_assignEPKcS7_j:
  636|  33.5k|{
  637|  33.5k|   std::shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > temp;
  638|  33.5k|   if(!m_pimpl.get())
  ------------------
  |  Branch (638:7): [True: 33.5k, False: 0]
  ------------------
  639|  33.5k|   {
  640|  33.5k|      temp = std::shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>());
  ------------------
  |  |  158|  33.5k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  33.5k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  33.5k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  33.5k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|  33.5k|   }
  642|      0|   else
  643|      0|   {
  644|      0|      temp = std::shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits));
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  645|      0|   }
  646|  33.5k|   temp->assign(p1, p2, f);
  647|  33.5k|   temp.swap(m_pimpl);
  648|  33.5k|   return *this;
  649|  33.5k|}
_ZN5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2Ev:
  212|  33.5k|   basic_regex_implementation(){}
_ZN5boost13re_detail_50010regex_dataIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2Ev:
  172|  33.5k|      : m_ptraits(new ::boost::regex_traits_wrapper<traits>()), m_flags(0), m_status(0), m_expression(0), m_expression_len(0), 
  173|  33.5k|         m_mark_count(0), m_first_state(0), m_restart_type(0), 
  174|  33.5k|      m_startmap{ 0 },
  175|  33.5k|         m_can_be_null(0), m_word_mask(0), m_has_recursions(false), m_disable_match_any(false) {}
_ZN5boost13re_detail_50020named_subexpressionsC2Ev:
  111|  33.5k|   named_subexpressions(){}
_ZN5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS8_j:
  219|  33.5k|   {
  220|  33.5k|      regex_data<charT, traits>* pdat = this;
  221|  33.5k|      basic_regex_parser<charT, traits> parser(pdat);
  222|  33.5k|      parser.parse(arg_first, arg_last, f);
  223|  33.5k|   }
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEaSEPKc:
  359|  28.7k|   {
  360|  28.7k|      return assign(ptr);
  361|  28.7k|   }
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcj:
  371|  28.7k|   {
  372|  28.7k|      return assign(p, p + traits::length(p), f);
  373|  28.7k|   }
_ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEED2Ev:
  353|  33.5k|   ~basic_regex(){}
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5flagsEv:
  459|  39.6M|   { 
  460|  39.6M|      return m_pimpl.get() ? m_pimpl->flags() : 0;
  ------------------
  |  Branch (460:14): [True: 39.6M, False: 0]
  ------------------
  461|  39.6M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5flagsEv:
  261|  39.6M|   {
  262|  39.6M|      return this->m_flags;
  263|  39.6M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10get_traitsEv:
  603|  13.2M|   {
  604|  13.2M|      BOOST_REGEX_ASSERT(0 != m_pimpl.get());
  ------------------
  |  |   58|  13.2M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  13.2M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  605|  13.2M|      return m_pimpl->get_traits();
  606|  13.2M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10get_traitsEv:
  289|  13.2M|   {
  290|  13.2M|      return *(this->m_ptraits);
  291|  13.2M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5emptyEv:
  510|  13.2M|   { 
  511|  13.2M|      return (m_pimpl.get() ? 0 != m_pimpl->status() : true); 
  ------------------
  |  Branch (511:15): [True: 13.2M, False: 0]
  ------------------
  512|  13.2M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6statusEv:
  269|  13.2M|   {
  270|  13.2M|      return this->m_status;
  271|  13.2M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4sizeEv:
  498|  13.2M|   { 
  499|  13.2M|      return (m_pimpl.get() ? m_pimpl->size() : 0); 
  ------------------
  |  Branch (499:15): [True: 13.2M, False: 0]
  ------------------
  500|  13.2M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4sizeEv:
  265|  13.2M|   {
  266|  13.2M|      return this->m_expression_len;
  267|  13.2M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8get_dataEv:
  613|  26.4M|   {
  614|  26.4M|      BOOST_REGEX_ASSERT(0 != m_pimpl.get());
  ------------------
  |  |   58|  26.4M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  26.4M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  615|  26.4M|      return m_pimpl->get_data();
  616|  26.4M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8get_dataEv:
  297|  26.4M|   {
  298|  26.4M|      basic_regex_implementation<charT, traits> const* p = this;
  299|  26.4M|      return *static_cast<const regex_data<charT, traits>*>(p);
  300|  26.4M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15get_first_stateEv:
  588|  26.4M|   {
  589|  26.4M|      BOOST_REGEX_ASSERT(0 != m_pimpl.get());
  ------------------
  |  |   58|  26.4M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  26.4M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  590|  26.4M|      return m_pimpl->get_first_state();
  591|  26.4M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15get_first_stateEv:
  277|  26.4M|   {
  278|  26.4M|      return this->m_first_state;
  279|  26.4M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10mark_countEv:
  515|  13.2M|   { 
  516|  13.2M|      return (m_pimpl.get() ? m_pimpl->mark_count() : 0); 
  ------------------
  |  Branch (516:15): [True: 13.2M, False: 0]
  ------------------
  517|  13.2M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10mark_countEv:
  273|  13.2M|   {
  274|  13.2M|      return this->m_mark_count - 1;
  275|  13.2M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14get_named_subsEv:
  618|  13.2M|   {
  619|  13.2M|      return m_pimpl;
  620|  13.2M|   }
_ZNK5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16get_restart_typeEv:
  593|  13.2M|   {
  594|  13.2M|      BOOST_REGEX_ASSERT(0 != m_pimpl.get());
  ------------------
  |  |   58|  13.2M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  13.2M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  595|  13.2M|      return m_pimpl->get_restart_type();
  596|  13.2M|   }
_ZNK5boost13re_detail_50026basic_regex_implementationIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16get_restart_typeEv:
  281|  13.2M|   {
  282|  13.2M|      return this->m_restart_type;
  283|  13.2M|   }

_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2EPNS0_10regex_dataIcS5_EE:
  262|  33.5k|   : m_pdata(data), m_traits(*(data->m_ptraits)), m_last_state(0), m_icase(false), m_repeater_id(0), 
  263|  33.5k|   m_has_backrefs(false), m_bad_repeats(0), m_has_recursions(false), m_word_mask(0), m_mask_space(0), m_lower_mask(0), m_upper_mask(0), m_alpha_mask(0)
  264|  33.5k|{
  265|  33.5k|   m_pdata->m_data.clear();
  266|  33.5k|   m_pdata->m_status = ::boost::regex_constants::error_ok;
  267|  33.5k|   static const charT w = 'w';
  268|  33.5k|   static const charT s = 's';
  269|  33.5k|   static const charT l[5] = { 'l', 'o', 'w', 'e', 'r', };
  270|  33.5k|   static const charT u[5] = { 'u', 'p', 'p', 'e', 'r', };
  271|  33.5k|   static const charT a[5] = { 'a', 'l', 'p', 'h', 'a', };
  272|  33.5k|   m_word_mask = m_traits.lookup_classname(&w, &w +1);
  273|  33.5k|   m_mask_space = m_traits.lookup_classname(&s, &s +1);
  274|  33.5k|   m_lower_mask = m_traits.lookup_classname(l, l + 5);
  275|  33.5k|   m_upper_mask = m_traits.lookup_classname(u, u + 5);
  276|  33.5k|   m_alpha_mask = m_traits.lookup_classname(a, a + 5);
  277|  33.5k|   m_pdata->m_word_mask = m_word_mask;
  278|  33.5k|   BOOST_REGEX_ASSERT(m_word_mask != 0); 
  ------------------
  |  |   58|  33.5k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  33.5k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  279|  33.5k|   BOOST_REGEX_ASSERT(m_mask_space != 0); 
  ------------------
  |  |   58|  33.5k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  33.5k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  280|  33.5k|   BOOST_REGEX_ASSERT(m_lower_mask != 0); 
  ------------------
  |  |   58|  33.5k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  33.5k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  281|  33.5k|   BOOST_REGEX_ASSERT(m_upper_mask != 0); 
  ------------------
  |  |   58|  33.5k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  33.5k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  282|  33.5k|   BOOST_REGEX_ASSERT(m_alpha_mask != 0); 
  ------------------
  |  |   58|  33.5k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  33.5k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  283|  33.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4initEj:
  204|  33.5k|   {
  205|  33.5k|      m_pdata->m_flags = l_flags;
  206|  33.5k|      m_icase = l_flags & regex_constants::icase;
  207|  33.5k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10getaddressEl:
  196|   321k|   {
  197|   321k|      return getaddress(off, m_pdata->m_data.data());
  198|   321k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12insert_stateElNS0_19syntax_element_typeEm:
  306|   129k|{
  307|       |   // append a new state, start by aligning our last one:
  308|   129k|   m_pdata->m_data.align();
  309|       |   // set the offset to the next state in our last one:
  310|   129k|   if(m_last_state)
  ------------------
  |  Branch (310:7): [True: 129k, False: 0]
  ------------------
  311|   129k|      m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state);
  312|       |   // remember the last state position:
  313|   129k|   std::ptrdiff_t off = getoffset(m_last_state) + s;
  314|       |   // now actually insert our data:
  315|   129k|   re_syntax_base* new_state = static_cast<re_syntax_base*>(m_pdata->m_data.insert(pos, s));
  316|       |   // fill in boilerplate options in the new state:
  317|   129k|   new_state->next.i = s;
  318|   129k|   new_state->type = t;
  319|   129k|   m_last_state = getaddress(off);
  320|   129k|   return new_state;
  321|   129k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10getaddressElPv:
  200|  1.32M|   {
  201|  1.32M|      return static_cast<re_syntax_base*>(static_cast<void*>(static_cast<char*>(base) + off));
  202|  1.32M|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9getoffsetEPv:
  188|  1.36M|   {
  189|  1.36M|      return getoffset(addr, m_pdata->m_data.data());
  190|  1.36M|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9getoffsetEPKvS8_:
  192|  1.36M|   {
  193|  1.36M|      return static_cast<const char*>(addr) - static_cast<const char*>(base);
  194|  1.36M|   }
_ZN5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2Ev:
   65|  81.4k|   {
   66|  81.4k|      m_negate = false;
   67|  81.4k|      m_has_digraphs = false;
   68|  81.4k|      m_classes = 0;
   69|  81.4k|      m_negated_classes = 0;
   70|  81.4k|      m_empty = true;
   71|  81.4k|   }
_ZN5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6negateEv:
  117|  19.1k|   { 
  118|  19.1k|      m_negate = true;
  119|       |      //m_empty = false;
  120|  19.1k|   }
_ZN5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9add_classEj:
   97|  28.7k|   {
   98|  28.7k|      m_classes |= m;
   99|  28.7k|      m_empty = false;
  100|  28.7k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10append_setERKNS0_14basic_char_setIcS5_EE:
  351|  81.4k|{
  352|  81.4k|   typedef std::integral_constant<bool, (sizeof(charT) == 1) > truth_type;
  353|  81.4k|   return char_set.has_digraphs() 
  ------------------
  |  Branch (353:11): [True: 0, False: 81.4k]
  ------------------
  354|  81.4k|      ? append_set(char_set, static_cast<std::integral_constant<bool, false>*>(0))
  355|  81.4k|      : append_set(char_set, static_cast<truth_type*>(0));
  356|  81.4k|}
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12has_digraphsEv:
  126|  81.4k|   {
  127|  81.4k|      return m_has_digraphs;
  128|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13singles_beginEv:
  136|  81.4k|   {
  137|  81.4k|      return m_singles.begin();
  138|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE11singles_endEv:
  140|  81.4k|   {
  141|  81.4k|      return m_singles.end();
  142|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12ranges_beginEv:
  144|  81.4k|   {
  145|  81.4k|      return m_ranges.begin();
  146|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10ranges_endEv:
  148|  81.4k|   {
  149|  81.4k|      return m_ranges.end();
  150|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE17equivalents_beginEv:
  152|  81.4k|   {
  153|  81.4k|      return m_equivalents.begin();
  154|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15equivalents_endEv:
  156|  81.4k|   {
  157|  81.4k|      return m_equivalents.end();
  158|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE7classesEv:
  160|  81.4k|   {
  161|  81.4k|      return m_classes;
  162|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15negated_classesEv:
  164|  81.4k|   {
  165|  81.4k|      return m_negated_classes;
  166|  81.4k|   }
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10is_negatedEv:
  130|  81.4k|   {
  131|  81.4k|      return m_negate;
  132|  81.4k|   }
_ZN5boost13re_detail_5007digraphIcEC2ERKS2_:
   44|   134k|   digraph(const digraph<charT>& d) : std::pair<charT, charT>(d.first, d.second){}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10append_setERKNS0_14basic_char_setIcS5_EEPNSt3__117integral_constantIbLb1EEE:
  520|  81.4k|{
  521|  81.4k|   typedef typename traits::string_type string_type;
  522|  81.4k|   typedef typename basic_char_set<charT, traits>::list_iterator item_iterator;
  523|  81.4k|   typedef typename basic_char_set<charT, traits>::set_iterator set_iterator;
  524|       |
  525|  81.4k|   re_set* result = static_cast<re_set*>(append_state(syntax_element_set, sizeof(re_set)));
  526|  81.4k|   bool negate = char_set.is_negated();
  527|  81.4k|   std::memset(result->_map, 0, sizeof(result->_map));
  528|       |   //
  529|       |   // handle singles first:
  530|       |   //
  531|  81.4k|   item_iterator first, last;
  532|  81.4k|   set_iterator sfirst, slast;
  533|  81.4k|   sfirst = char_set.singles_begin();
  534|  81.4k|   slast = char_set.singles_end();
  535|   215k|   while(sfirst != slast)
  ------------------
  |  Branch (535:10): [True: 134k, False: 81.4k]
  ------------------
  536|   134k|   {
  537|  34.4M|      for(unsigned int i = 0; i < (1 << CHAR_BIT); ++i)
  ------------------
  |  Branch (537:31): [True: 34.3M, False: 134k]
  ------------------
  538|  34.3M|      {
  539|  34.3M|         if(this->m_traits.translate(static_cast<charT>(i), this->m_icase)
  ------------------
  |  Branch (539:13): [True: 134k, False: 34.2M]
  ------------------
  540|  34.3M|            == this->m_traits.translate(sfirst->first, this->m_icase))
  541|   134k|            result->_map[i] = true;
  542|  34.3M|      }
  543|   134k|      ++sfirst;
  544|   134k|   }
  545|       |   //
  546|       |   // OK now handle ranges:
  547|       |   //
  548|  81.4k|   first = char_set.ranges_begin();
  549|  81.4k|   last = char_set.ranges_end();
  550|  81.4k|   while(first != last)
  ------------------
  |  Branch (550:10): [True: 0, False: 81.4k]
  ------------------
  551|      0|   {
  552|       |      // first grab the endpoints of the range:
  553|      0|      charT c1 = this->m_traits.translate(first->first, this->m_icase);
  554|      0|      ++first;
  555|      0|      charT c2 = this->m_traits.translate(first->first, this->m_icase);
  556|      0|      ++first;
  557|       |      // different actions now depending upon whether collation is turned on:
  558|      0|      if(flags() & regex_constants::collate)
  ------------------
  |  Branch (558:10): [True: 0, False: 0]
  ------------------
  559|      0|      {
  560|       |         // we need to transform our range into sort keys:
  561|      0|         charT c3[2] = { c1, charT(0), };
  562|      0|         string_type s1 = this->m_traits.transform(c3, c3+1);
  563|      0|         c3[0] = c2;
  564|      0|         string_type s2 = this->m_traits.transform(c3, c3+1);
  565|      0|         if(s1 > s2)
  ------------------
  |  Branch (565:13): [True: 0, False: 0]
  ------------------
  566|      0|         {
  567|       |            // Oops error:
  568|      0|            return 0;
  569|      0|         }
  570|      0|         BOOST_REGEX_ASSERT(c3[1] == charT(0));
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  571|      0|         for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (571:30): [True: 0, False: 0]
  ------------------
  572|      0|         {
  573|      0|            c3[0] = static_cast<charT>(i);
  574|      0|            string_type s3 = this->m_traits.transform(c3, c3 +1);
  575|      0|            if((s1 <= s3) && (s3 <= s2))
  ------------------
  |  Branch (575:16): [True: 0, False: 0]
  |  Branch (575:30): [True: 0, False: 0]
  ------------------
  576|      0|               result->_map[i] = true;
  577|      0|         }
  578|      0|      }
  579|      0|      else
  580|      0|      {
  581|      0|         if(char_less(c2, c1))
  ------------------
  |  Branch (581:13): [True: 0, False: 0]
  ------------------
  582|      0|         {
  583|       |            // Oops error:
  584|      0|            return 0;
  585|      0|         }
  586|       |         // everything in range matches:
  587|      0|         std::memset(result->_map + static_cast<unsigned char>(c1), true, static_cast<unsigned char>(1u) + static_cast<unsigned char>(static_cast<unsigned char>(c2) - static_cast<unsigned char>(c1)));
  588|      0|      }
  589|      0|   }
  590|       |   //
  591|       |   // and now the classes:
  592|       |   //
  593|  81.4k|   typedef typename traits::char_class_type m_type;
  594|  81.4k|   m_type m = char_set.classes();
  595|  81.4k|   if(flags() & regbase::icase)
  ------------------
  |  Branch (595:7): [True: 0, False: 81.4k]
  ------------------
  596|      0|   {
  597|       |      // adjust m as needed:
  598|      0|      if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask))
  ------------------
  |  Branch (598:10): [True: 0, False: 0]
  |  Branch (598:50): [True: 0, False: 0]
  ------------------
  599|      0|         m |= m_alpha_mask;
  600|      0|   }
  601|  81.4k|   if(m != 0)
  ------------------
  |  Branch (601:7): [True: 28.7k, False: 52.7k]
  ------------------
  602|  28.7k|   {
  603|  7.38M|      for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (603:27): [True: 7.36M, False: 28.7k]
  ------------------
  604|  7.36M|      {
  605|  7.36M|         if(this->m_traits.isctype(static_cast<charT>(i), m))
  ------------------
  |  Branch (605:13): [True: 723k, False: 6.63M]
  ------------------
  606|   723k|            result->_map[i] = true;
  607|  7.36M|      }
  608|  28.7k|   }
  609|       |   //
  610|       |   // and now the negated classes:
  611|       |   //
  612|  81.4k|   m = char_set.negated_classes();
  613|  81.4k|   if(flags() & regbase::icase)
  ------------------
  |  Branch (613:7): [True: 0, False: 81.4k]
  ------------------
  614|      0|   {
  615|       |      // adjust m as needed:
  616|      0|      if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask))
  ------------------
  |  Branch (616:10): [True: 0, False: 0]
  |  Branch (616:50): [True: 0, False: 0]
  ------------------
  617|      0|         m |= m_alpha_mask;
  618|      0|   }
  619|  81.4k|   if(m != 0)
  ------------------
  |  Branch (619:7): [True: 0, False: 81.4k]
  ------------------
  620|      0|   {
  621|      0|      for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (621:27): [True: 0, False: 0]
  ------------------
  622|      0|      {
  623|      0|         if(0 == this->m_traits.isctype(static_cast<charT>(i), m))
  ------------------
  |  Branch (623:13): [True: 0, False: 0]
  ------------------
  624|      0|            result->_map[i] = true;
  625|      0|      }
  626|      0|   }
  627|       |   //
  628|       |   // now process the equivalence classes:
  629|       |   //
  630|  81.4k|   sfirst = char_set.equivalents_begin();
  631|  81.4k|   slast = char_set.equivalents_end();
  632|  81.4k|   while(sfirst != slast)
  ------------------
  |  Branch (632:10): [True: 0, False: 81.4k]
  ------------------
  633|      0|   {
  634|      0|      string_type s;
  635|      0|      BOOST_REGEX_ASSERT(static_cast<charT>(0) == sfirst->second);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  636|      0|      s = m_traits.transform_primary(&sfirst->first, &sfirst->first+1);
  637|      0|      if(s.empty())
  ------------------
  |  Branch (637:10): [True: 0, False: 0]
  ------------------
  638|      0|         return 0;  // invalid or unsupported equivalence class
  639|      0|      for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (639:27): [True: 0, False: 0]
  ------------------
  640|      0|      {
  641|      0|         charT c[2] = { (static_cast<charT>(i)), charT(0), };
  642|      0|         string_type s2 = this->m_traits.transform_primary(c, c+1);
  643|      0|         if(s == s2)
  ------------------
  |  Branch (643:13): [True: 0, False: 0]
  ------------------
  644|      0|            result->_map[i] = true;
  645|      0|      }
  646|      0|      ++sfirst;
  647|      0|   }
  648|  81.4k|   if(negate)
  ------------------
  |  Branch (648:7): [True: 19.1k, False: 62.2k]
  ------------------
  649|  19.1k|   {
  650|  4.92M|      for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (650:27): [True: 4.90M, False: 19.1k]
  ------------------
  651|  4.90M|      {
  652|  4.90M|         result->_map[i] = !(result->_map[i]);
  653|  4.90M|      }
  654|  19.1k|   }
  655|  81.4k|   return result;
  656|  81.4k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14append_literalEc:
  325|   148k|{
  326|   148k|   re_literal* result;
  327|       |   // start by seeing if we have an existing re_literal we can extend:
  328|   148k|   if((0 == m_last_state) || (m_last_state->type != syntax_element_literal))
  ------------------
  |  Branch (328:7): [True: 0, False: 148k]
  |  Branch (328:30): [True: 86.2k, False: 62.2k]
  ------------------
  329|  86.2k|   {
  330|       |      // no existing re_literal, create a new one:
  331|  86.2k|      result = static_cast<re_literal*>(append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT)));
  332|  86.2k|      result->length = 1;
  333|  86.2k|      *static_cast<charT*>(static_cast<void*>(result+1)) = m_traits.translate(c, m_icase);
  334|  86.2k|   }
  335|  62.2k|   else
  336|  62.2k|   {
  337|       |      // we have an existing re_literal, extend it:
  338|  62.2k|      std::ptrdiff_t off = getoffset(m_last_state);
  339|  62.2k|      m_pdata->m_data.extend(sizeof(charT));
  340|  62.2k|      m_last_state = result = static_cast<re_literal*>(getaddress(off));
  341|  62.2k|      charT* characters = static_cast<charT*>(static_cast<void*>(result+1));
  342|  62.2k|      characters[result->length] = m_traits.translate(c, m_icase);
  343|  62.2k|      result->length += 1;
  344|  62.2k|   }
  345|   148k|   return result;
  346|   148k|}
_ZN5boost13re_detail_5007digraphIcEC2Ev:
   40|   134k|   digraph() : std::pair<charT, charT>(charT(0), charT(0)){}
_ZNK5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5emptyEv:
  168|  14.3k|   {
  169|  14.3k|      return m_empty;
  170|  14.3k|   }
_ZN5boost13re_detail_5007digraphIcEC2Ec:
   41|   115k|   digraph(charT c1) : std::pair<charT, charT>(c1, charT(0)){}
_ZN5boost13re_detail_5007digraphIcEaSERKS2_:
   45|   115k|   digraph<charT>& operator=(const digraph<charT>&) = default;
_ZN5boost13re_detail_50014basic_char_setIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10add_singleERKNS0_7digraphIcEE:
   74|   134k|   {
   75|   134k|      m_singles.insert(s);
   76|   134k|      if(s.second)
  ------------------
  |  Branch (76:10): [True: 0, False: 134k]
  ------------------
   77|      0|         m_has_digraphs = true;
   78|   134k|      m_empty = false;
   79|   134k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12append_stateENS0_19syntax_element_typeEm:
  287|   646k|{
  288|       |   // if the state is a backref then make a note of it:
  289|   646k|   if(t == syntax_element_backref)
  ------------------
  |  Branch (289:7): [True: 0, False: 646k]
  ------------------
  290|      0|      this->m_has_backrefs = true;
  291|       |   // append a new state, start by aligning our last one:
  292|   646k|   m_pdata->m_data.align();
  293|       |   // set the offset to the next state in our last one:
  294|   646k|   if(m_last_state)
  ------------------
  |  Branch (294:7): [True: 613k, False: 33.5k]
  ------------------
  295|   613k|      m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state);
  296|       |   // now actually extend our data:
  297|   646k|   m_last_state = static_cast<re_syntax_base*>(m_pdata->m_data.extend(s));
  298|       |   // fill in boilerplate options in the new state:
  299|   646k|   m_last_state->next.i = 0;
  300|   646k|   m_last_state->type = t;
  301|   646k|   return m_last_state;
  302|   646k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5flagsEv:
  209|  1.11M|   {
  210|  1.11M|      return m_pdata->m_flags;
  211|  1.11M|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5flagsEj:
  213|   138k|   {
  214|   138k|      m_pdata->m_flags = f;
  215|   138k|      if(m_icase != static_cast<bool>(f & regbase::icase))
  ------------------
  |  Branch (215:10): [True: 0, False: 138k]
  ------------------
  216|      0|      {
  217|      0|         m_icase = static_cast<bool>(f & regbase::icase);
  218|      0|      }
  219|   138k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8finalizeEPKcS8_:
  660|  33.5k|{
  661|  33.5k|   if(this->m_pdata->m_status)
  ------------------
  |  Branch (661:7): [True: 0, False: 33.5k]
  ------------------
  662|      0|      return;
  663|       |   // we've added all the states we need, now finish things off.
  664|       |   // start by adding a terminating state:
  665|  33.5k|   append_state(syntax_element_match);
  666|       |   // extend storage to store original expression:
  667|  33.5k|   std::ptrdiff_t len = p2 - p1;
  668|  33.5k|   m_pdata->m_expression_len = len;
  669|  33.5k|   charT* ps = static_cast<charT*>(m_pdata->m_data.extend(sizeof(charT) * (1 + (p2 - p1))));
  670|  33.5k|   m_pdata->m_expression = ps;
  671|  33.5k|   BOOST_REGEX_DETAIL_NS::copy(p1, p2, ps);
  ------------------
  |  |  158|  33.5k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  33.5k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  33.5k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  33.5k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  33.5k|   ps[p2 - p1] = 0;
  673|       |   // fill in our other data...
  674|       |   // successful parsing implies a zero status:
  675|  33.5k|   m_pdata->m_status = 0;
  676|       |   // get the first state of the machine:
  677|  33.5k|   m_pdata->m_first_state = static_cast<re_syntax_base*>(m_pdata->m_data.data());
  678|       |   // fixup pointers in the machine:
  679|  33.5k|   fixup_pointers(m_pdata->m_first_state);
  680|  33.5k|   if(m_has_recursions)
  ------------------
  |  Branch (680:7): [True: 0, False: 33.5k]
  ------------------
  681|      0|   {
  682|      0|      m_pdata->m_has_recursions = true;
  683|      0|      fixup_recursions(m_pdata->m_first_state);
  684|      0|      if(this->m_pdata->m_status)
  ------------------
  |  Branch (684:10): [True: 0, False: 0]
  ------------------
  685|      0|         return;
  686|      0|   }
  687|  33.5k|   else
  688|  33.5k|      m_pdata->m_has_recursions = false;
  689|       |   // create nested startmaps:
  690|  33.5k|   create_startmaps(m_pdata->m_first_state);
  691|       |   // create main startmap:
  692|  33.5k|   std::memset(m_pdata->m_startmap, 0, sizeof(m_pdata->m_startmap));
  693|  33.5k|   m_pdata->m_can_be_null = 0;
  694|       |
  695|  33.5k|   m_bad_repeats = 0;
  696|  33.5k|   if(m_has_recursions)
  ------------------
  |  Branch (696:7): [True: 0, False: 33.5k]
  ------------------
  697|      0|      m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u);
  698|  33.5k|   create_startmap(m_pdata->m_first_state, m_pdata->m_startmap, &(m_pdata->m_can_be_null), mask_all);
  699|       |   // get the restart type:
  700|  33.5k|   m_pdata->m_restart_type = get_restart_type(m_pdata->m_first_state);
  701|       |   // optimise a leading repeat if there is one:
  702|  33.5k|   probe_leading_repeat(m_pdata->m_first_state);
  703|  33.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14fixup_pointersEPNS0_14re_syntax_baseE:
  707|  33.5k|{
  708|   809k|   while(state)
  ------------------
  |  Branch (708:10): [True: 776k, False: 33.5k]
  ------------------
  709|   776k|   {
  710|   776k|      switch(state->type)
  711|   776k|      {
  712|      0|      case syntax_element_recurse:
  ------------------
  |  Branch (712:7): [True: 0, False: 776k]
  ------------------
  713|      0|         m_has_recursions = true;
  714|      0|         if(state->next.i)
  ------------------
  |  Branch (714:13): [True: 0, False: 0]
  ------------------
  715|      0|            state->next.p = getaddress(state->next.i, state);
  716|      0|         else
  717|      0|            state->next.p = 0;
  718|      0|         break;
  719|  86.2k|      case syntax_element_rep:
  ------------------
  |  Branch (719:7): [True: 86.2k, False: 690k]
  ------------------
  720|  86.2k|      case syntax_element_dot_rep:
  ------------------
  |  Branch (720:7): [True: 0, False: 776k]
  ------------------
  721|  86.2k|      case syntax_element_char_rep:
  ------------------
  |  Branch (721:7): [True: 0, False: 776k]
  ------------------
  722|  86.2k|      case syntax_element_short_set_rep:
  ------------------
  |  Branch (722:7): [True: 0, False: 776k]
  ------------------
  723|  86.2k|      case syntax_element_long_set_rep:
  ------------------
  |  Branch (723:7): [True: 0, False: 776k]
  ------------------
  724|       |         // set the state_id of this repeat:
  725|  86.2k|         static_cast<re_repeat*>(state)->state_id = m_repeater_id++;
  726|  86.2k|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|  86.2k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|  86.2k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  727|   129k|      case syntax_element_alt:
  ------------------
  |  Branch (727:7): [True: 43.1k, False: 733k]
  ------------------
  728|   129k|         std::memset(static_cast<re_alt*>(state)->_map, 0, sizeof(static_cast<re_alt*>(state)->_map));
  729|   129k|         static_cast<re_alt*>(state)->can_be_null = 0;
  730|   129k|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|   129k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|   129k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  731|   258k|      case syntax_element_jump:
  ------------------
  |  Branch (731:7): [True: 129k, False: 646k]
  ------------------
  732|   258k|         static_cast<re_jump*>(state)->alt.p = getaddress(static_cast<re_jump*>(state)->alt.i, state);
  733|   258k|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|   258k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|   258k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  734|   776k|      default:
  ------------------
  |  Branch (734:7): [True: 517k, False: 258k]
  ------------------
  735|   776k|         if(state->next.i)
  ------------------
  |  Branch (735:13): [True: 742k, False: 33.5k]
  ------------------
  736|   742k|            state->next.p = getaddress(state->next.i, state);
  737|  33.5k|         else
  738|  33.5k|            state->next.p = 0;
  739|   776k|      }
  740|   776k|      state = state->next.p;
  741|   776k|   }
  742|  33.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16create_startmapsEPNS0_14re_syntax_baseE:
  882|  33.5k|{
  883|       |   // non-recursive implementation:
  884|       |   // create the last map in the machine first, so that earlier maps
  885|       |   // can make use of the result...
  886|       |   //
  887|       |   // This was originally a recursive implementation, but that caused stack
  888|       |   // overflows with complex expressions on small stacks (think COM+).
  889|       |
  890|       |   // start by saving the case setting:
  891|  33.5k|   bool l_icase = m_icase;
  892|  33.5k|   std::vector<std::pair<bool, re_syntax_base*> > v;
  893|       |
  894|   809k|   while(state)
  ------------------
  |  Branch (894:10): [True: 776k, False: 33.5k]
  ------------------
  895|   776k|   {
  896|   776k|      switch(state->type)
  897|   776k|      {
  898|      0|      case syntax_element_toggle_case:
  ------------------
  |  Branch (898:7): [True: 0, False: 776k]
  ------------------
  899|       |         // we need to track case changes here:
  900|      0|         m_icase = static_cast<re_case*>(state)->icase;
  901|      0|         state = state->next.p;
  902|      0|         continue;
  903|  43.1k|      case syntax_element_alt:
  ------------------
  |  Branch (903:7): [True: 43.1k, False: 733k]
  ------------------
  904|   129k|      case syntax_element_rep:
  ------------------
  |  Branch (904:7): [True: 86.2k, False: 690k]
  ------------------
  905|   129k|      case syntax_element_dot_rep:
  ------------------
  |  Branch (905:7): [True: 0, False: 776k]
  ------------------
  906|   129k|      case syntax_element_char_rep:
  ------------------
  |  Branch (906:7): [True: 0, False: 776k]
  ------------------
  907|   129k|      case syntax_element_short_set_rep:
  ------------------
  |  Branch (907:7): [True: 0, False: 776k]
  ------------------
  908|   129k|      case syntax_element_long_set_rep:
  ------------------
  |  Branch (908:7): [True: 0, False: 776k]
  ------------------
  909|       |         // just push the state onto our stack for now:
  910|   129k|         v.push_back(std::pair<bool, re_syntax_base*>(m_icase, state));
  911|   129k|         state = state->next.p;
  912|   129k|         break;
  913|      0|      case syntax_element_backstep:
  ------------------
  |  Branch (913:7): [True: 0, False: 776k]
  ------------------
  914|       |         // we need to calculate how big the backstep is:
  915|      0|         static_cast<re_brace*>(state)->index
  916|      0|            = this->calculate_backstep(state->next.p);
  917|      0|         if(static_cast<re_brace*>(state)->index < 0)
  ------------------
  |  Branch (917:13): [True: 0, False: 0]
  ------------------
  918|      0|         {
  919|       |            // Oops error:
  920|      0|            if(0 == this->m_pdata->m_status) // update the error code if not already set
  ------------------
  |  Branch (920:16): [True: 0, False: 0]
  ------------------
  921|      0|               this->m_pdata->m_status = boost::regex_constants::error_bad_pattern;
  922|       |            //
  923|       |            // clear the expression, we should be empty:
  924|       |            //
  925|      0|            this->m_pdata->m_expression = 0;
  926|      0|            this->m_pdata->m_expression_len = 0;
  927|       |            //
  928|       |            // and throw if required:
  929|       |            //
  930|      0|            if(0 == (this->flags() & regex_constants::no_except))
  ------------------
  |  Branch (930:16): [True: 0, False: 0]
  ------------------
  931|      0|            {
  932|      0|               std::string message = "Invalid lookbehind assertion encountered in the regular expression.";
  933|      0|               boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0);
  934|      0|               e.raise();
  935|      0|            }
  936|      0|         }
  937|      0|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  938|   646k|      default:
  ------------------
  |  Branch (938:7): [True: 646k, False: 129k]
  ------------------
  939|   646k|         state = state->next.p;
  940|   776k|      }
  941|   776k|   }
  942|       |
  943|       |   // now work through our list, building all the maps as we go:
  944|   162k|   while(!v.empty())
  ------------------
  |  Branch (944:10): [True: 129k, False: 33.5k]
  ------------------
  945|   129k|   {
  946|       |      // Initialize m_recursion_checks if we need it:
  947|   129k|      if(m_has_recursions)
  ------------------
  |  Branch (947:10): [True: 0, False: 129k]
  ------------------
  948|      0|         m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u);
  949|       |
  950|   129k|      const std::pair<bool, re_syntax_base*>& p = v.back();
  951|   129k|      m_icase = p.first;
  952|   129k|      state = p.second;
  953|   129k|      v.pop_back();
  954|       |
  955|       |      // Build maps:
  956|   129k|      m_bad_repeats = 0;
  957|   129k|      create_startmap(state->next.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_take);
  958|   129k|      m_bad_repeats = 0;
  959|       |
  960|   129k|      if(m_has_recursions)
  ------------------
  |  Branch (960:10): [True: 0, False: 129k]
  ------------------
  961|      0|         m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u);
  962|   129k|      create_startmap(static_cast<re_alt*>(state)->alt.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_skip);
  963|       |      // adjust the type of the state to allow for faster matching:
  964|   129k|      state->type = this->get_repeat_type(state);
  965|   129k|   }
  966|       |   // restore case sensitivity:
  967|  33.5k|   m_icase = l_icase;
  968|  33.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15get_repeat_typeEPNS0_14re_syntax_baseE:
 1480|   129k|{
 1481|   129k|   typedef typename traits::char_class_type m_type;
 1482|   129k|   if(state->type == syntax_element_rep)
  ------------------
  |  Branch (1482:7): [True: 86.2k, False: 43.1k]
  ------------------
 1483|  86.2k|   {
 1484|       |      // check to see if we are repeating a single state:
 1485|  86.2k|      if(state->next.p->next.p->next.p == static_cast<re_alt*>(state)->alt.p)
  ------------------
  |  Branch (1485:10): [True: 67.0k, False: 19.1k]
  ------------------
 1486|  67.0k|      {
 1487|  67.0k|         switch(state->next.p->type)
 1488|  67.0k|         {
 1489|  19.1k|         case BOOST_REGEX_DETAIL_NS::syntax_element_wild:
  ------------------
  |  |  158|  19.1k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  19.1k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  19.1k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  19.1k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1489:10): [True: 19.1k, False: 47.9k]
  ------------------
 1490|  19.1k|            return BOOST_REGEX_DETAIL_NS::syntax_element_dot_rep;
  ------------------
  |  |  158|  19.1k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  19.1k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  19.1k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  19.1k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1491|  9.58k|         case BOOST_REGEX_DETAIL_NS::syntax_element_literal:
  ------------------
  |  |  158|  9.58k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  9.58k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  9.58k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  9.58k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1491:10): [True: 9.58k, False: 57.5k]
  ------------------
 1492|  9.58k|            return BOOST_REGEX_DETAIL_NS::syntax_element_char_rep;
  ------------------
  |  |  158|  9.58k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  9.58k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  9.58k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  9.58k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1493|  38.3k|         case BOOST_REGEX_DETAIL_NS::syntax_element_set:
  ------------------
  |  |  158|  38.3k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  38.3k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  38.3k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  38.3k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1493:10): [True: 38.3k, False: 28.7k]
  ------------------
 1494|  38.3k|            return BOOST_REGEX_DETAIL_NS::syntax_element_short_set_rep;
  ------------------
  |  |  158|  38.3k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  38.3k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  38.3k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  38.3k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1495|      0|         case BOOST_REGEX_DETAIL_NS::syntax_element_long_set:
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1495:10): [True: 0, False: 67.0k]
  ------------------
 1496|      0|            if(static_cast<BOOST_REGEX_DETAIL_NS::re_set_long<m_type>*>(state->next.p)->singleton)
  ------------------
  |  Branch (1496:16): [True: 0, False: 0]
  ------------------
 1497|      0|               return BOOST_REGEX_DETAIL_NS::syntax_element_long_set_rep;
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1498|      0|            break;
 1499|      0|         default:
  ------------------
  |  Branch (1499:10): [True: 0, False: 67.0k]
  ------------------
 1500|      0|            break;
 1501|  67.0k|         }
 1502|  67.0k|      }
 1503|  86.2k|   }
 1504|  62.2k|   return state->type;
 1505|   129k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15create_startmapEPNS0_14re_syntax_baseEPhPjh:
 1078|   416k|{
 1079|   416k|   recursion_saver saved_recursions(&m_recursion_checks);
 1080|   416k|   int not_last_jump = 1;
 1081|   416k|   re_syntax_base* recursion_start = 0;
 1082|   416k|   int recursion_sub = 0;
 1083|   416k|   re_syntax_base* recursion_restart = 0;
 1084|       |
 1085|       |   // track case sensitivity:
 1086|   416k|   bool l_icase = m_icase;
 1087|       |
 1088|   781k|   while(state)
  ------------------
  |  Branch (1088:10): [True: 781k, False: 0]
  ------------------
 1089|   781k|   {
 1090|   781k|      switch(state->type)
 1091|   781k|      {
 1092|      0|      case syntax_element_toggle_case:
  ------------------
  |  Branch (1092:7): [True: 0, False: 781k]
  ------------------
 1093|      0|         l_icase = static_cast<re_case*>(state)->icase;
 1094|      0|         state = state->next.p;
 1095|      0|         break;
 1096|   110k|      case syntax_element_literal:
  ------------------
  |  Branch (1096:7): [True: 110k, False: 670k]
  ------------------
 1097|   110k|      {
 1098|       |         // don't set anything in *pnull, set each element in l_map
 1099|       |         // that could match the first character in the literal:
 1100|   110k|         if(l_map)
  ------------------
  |  Branch (1100:13): [True: 91.0k, False: 19.1k]
  ------------------
 1101|  91.0k|         {
 1102|  91.0k|            l_map[0] |= mask_init;
 1103|  91.0k|            charT first_char = *static_cast<charT*>(static_cast<void*>(static_cast<re_literal*>(state) + 1));
 1104|  23.3M|            for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1104:37): [True: 23.3M, False: 91.0k]
  ------------------
 1105|  23.3M|            {
 1106|  23.3M|               if(m_traits.translate(static_cast<charT>(i), l_icase) == first_char)
  ------------------
  |  Branch (1106:19): [True: 91.0k, False: 23.2M]
  ------------------
 1107|  91.0k|                  l_map[i] |= mask;
 1108|  23.3M|            }
 1109|  91.0k|         }
 1110|   110k|         return;
 1111|      0|      }
 1112|  9.58k|      case syntax_element_end_line:
  ------------------
  |  Branch (1112:7): [True: 9.58k, False: 771k]
  ------------------
 1113|  9.58k|      {
 1114|       |         // next character must be a line separator (if there is one):
 1115|  9.58k|         if(l_map)
  ------------------
  |  Branch (1115:13): [True: 9.58k, False: 0]
  ------------------
 1116|  9.58k|         {
 1117|  9.58k|            l_map[0] |= mask_init;
 1118|  9.58k|            l_map[static_cast<unsigned>('\n')] |= mask;
 1119|  9.58k|            l_map[static_cast<unsigned>('\r')] |= mask;
 1120|  9.58k|            l_map[static_cast<unsigned>('\f')] |= mask;
 1121|  9.58k|            l_map[0x85] |= mask;
 1122|  9.58k|         }
 1123|       |         // now figure out if we can match a NULL string at this point:
 1124|  9.58k|         if(pnull)
  ------------------
  |  Branch (1124:13): [True: 9.58k, False: 0]
  ------------------
 1125|  9.58k|            create_startmap(state->next.p, 0, pnull, mask);
 1126|  9.58k|         return;
 1127|      0|      }
 1128|      0|      case syntax_element_recurse:
  ------------------
  |  Branch (1128:7): [True: 0, False: 781k]
  ------------------
 1129|      0|         {
 1130|      0|            BOOST_REGEX_ASSERT(static_cast<const re_jump*>(state)->alt.p->type == syntax_element_startmark);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1131|      0|            recursion_sub = static_cast<re_brace*>(static_cast<const re_jump*>(state)->alt.p)->index;
 1132|      0|            if(m_recursion_checks[recursion_sub] & 1u)
  ------------------
  |  Branch (1132:16): [True: 0, False: 0]
  ------------------
 1133|      0|            {
 1134|       |               // Infinite recursion!!
 1135|      0|               if(0 == this->m_pdata->m_status) // update the error code if not already set
  ------------------
  |  Branch (1135:19): [True: 0, False: 0]
  ------------------
 1136|      0|                  this->m_pdata->m_status = boost::regex_constants::error_bad_pattern;
 1137|       |               //
 1138|       |               // clear the expression, we should be empty:
 1139|       |               //
 1140|      0|               this->m_pdata->m_expression = 0;
 1141|      0|               this->m_pdata->m_expression_len = 0;
 1142|       |               //
 1143|       |               // and throw if required:
 1144|       |               //
 1145|      0|               if(0 == (this->flags() & regex_constants::no_except))
  ------------------
  |  Branch (1145:19): [True: 0, False: 0]
  ------------------
 1146|      0|               {
 1147|      0|                  std::string message = "Encountered an infinite recursion.";
 1148|      0|                  boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0);
 1149|      0|                  e.raise();
 1150|      0|               }
 1151|      0|            }
 1152|      0|            else if(recursion_start == 0)
  ------------------
  |  Branch (1152:21): [True: 0, False: 0]
  ------------------
 1153|      0|            {
 1154|      0|               recursion_start = state;
 1155|      0|               recursion_restart = state->next.p;
 1156|      0|               state = static_cast<re_jump*>(state)->alt.p;
 1157|      0|               m_recursion_checks[recursion_sub] |= 1u;
 1158|      0|               break;
 1159|      0|            }
 1160|      0|            m_recursion_checks[recursion_sub] |= 1u;
 1161|       |            // can't handle nested recursion here...
 1162|      0|            BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
 1163|      0|         }
 1164|      0|      case syntax_element_backref:
  ------------------
  |  Branch (1164:7): [True: 0, False: 781k]
  ------------------
 1165|       |         // can be null, and any character can match:
 1166|      0|         if(pnull)
  ------------------
  |  Branch (1166:13): [True: 0, False: 0]
  ------------------
 1167|      0|            *pnull |= mask;
 1168|      0|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
 1169|  19.1k|      case syntax_element_wild:
  ------------------
  |  Branch (1169:7): [True: 19.1k, False: 761k]
  ------------------
 1170|  19.1k|      {
 1171|       |         // can't be null, any character can match:
 1172|  19.1k|         set_all_masks(l_map, mask);
 1173|  19.1k|         return;
 1174|      0|      }
 1175|      0|      case syntax_element_accept:
  ------------------
  |  Branch (1175:7): [True: 0, False: 781k]
  ------------------
 1176|  38.3k|      case syntax_element_match:
  ------------------
  |  Branch (1176:7): [True: 38.3k, False: 742k]
  ------------------
 1177|  38.3k|      {
 1178|       |         // must be null, any character can match:
 1179|  38.3k|         set_all_masks(l_map, mask);
 1180|  38.3k|         if(pnull)
  ------------------
  |  Branch (1180:13): [True: 38.3k, False: 0]
  ------------------
 1181|  38.3k|            *pnull |= mask;
 1182|  38.3k|         return;
 1183|      0|      }
 1184|      0|      case syntax_element_word_start:
  ------------------
  |  Branch (1184:7): [True: 0, False: 781k]
  ------------------
 1185|      0|      {
 1186|       |         // recurse, then AND with all the word characters:
 1187|      0|         create_startmap(state->next.p, l_map, pnull, mask);
 1188|      0|         if(l_map)
  ------------------
  |  Branch (1188:13): [True: 0, False: 0]
  ------------------
 1189|      0|         {
 1190|      0|            l_map[0] |= mask_init;
 1191|      0|            for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1191:37): [True: 0, False: 0]
  ------------------
 1192|      0|            {
 1193|      0|               if(!m_traits.isctype(static_cast<charT>(i), m_word_mask))
  ------------------
  |  Branch (1193:19): [True: 0, False: 0]
  ------------------
 1194|      0|                  l_map[i] &= static_cast<unsigned char>(~mask);
 1195|      0|            }
 1196|      0|         }
 1197|      0|         return;
 1198|      0|      }
 1199|      0|      case syntax_element_word_end:
  ------------------
  |  Branch (1199:7): [True: 0, False: 781k]
  ------------------
 1200|      0|      {
 1201|       |         // recurse, then AND with all the word characters:
 1202|      0|         create_startmap(state->next.p, l_map, pnull, mask);
 1203|      0|         if(l_map)
  ------------------
  |  Branch (1203:13): [True: 0, False: 0]
  ------------------
 1204|      0|         {
 1205|      0|            l_map[0] |= mask_init;
 1206|      0|            for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1206:37): [True: 0, False: 0]
  ------------------
 1207|      0|            {
 1208|      0|               if(m_traits.isctype(static_cast<charT>(i), m_word_mask))
  ------------------
  |  Branch (1208:19): [True: 0, False: 0]
  ------------------
 1209|      0|                  l_map[i] &= static_cast<unsigned char>(~mask);
 1210|      0|            }
 1211|      0|         }
 1212|      0|         return;
 1213|      0|      }
 1214|      0|      case syntax_element_buffer_end:
  ------------------
  |  Branch (1214:7): [True: 0, False: 781k]
  ------------------
 1215|      0|      {
 1216|       |         // we *must be null* :
 1217|      0|         if(pnull)
  ------------------
  |  Branch (1217:13): [True: 0, False: 0]
  ------------------
 1218|      0|            *pnull |= mask;
 1219|      0|         return;
 1220|      0|      }
 1221|      0|      case syntax_element_long_set:
  ------------------
  |  Branch (1221:7): [True: 0, False: 781k]
  ------------------
 1222|      0|         if(l_map)
  ------------------
  |  Branch (1222:13): [True: 0, False: 0]
  ------------------
 1223|      0|         {
 1224|      0|            typedef typename traits::char_class_type m_type;
 1225|      0|            if(static_cast<re_set_long<m_type>*>(state)->singleton)
  ------------------
  |  Branch (1225:16): [True: 0, False: 0]
  ------------------
 1226|      0|            {
 1227|      0|               l_map[0] |= mask_init;
 1228|      0|               for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1228:40): [True: 0, False: 0]
  ------------------
 1229|      0|               {
 1230|      0|                  charT c = static_cast<charT>(i);
 1231|      0|                  if(&c != re_is_set_member(&c, &c + 1, static_cast<re_set_long<m_type>*>(state), *m_pdata, l_icase))
  ------------------
  |  Branch (1231:22): [True: 0, False: 0]
  ------------------
 1232|      0|                     l_map[i] |= mask;
 1233|      0|               }
 1234|      0|            }
 1235|      0|            else
 1236|      0|               set_all_masks(l_map, mask);
 1237|      0|         }
 1238|      0|         return;
 1239|  86.2k|      case syntax_element_set:
  ------------------
  |  Branch (1239:7): [True: 86.2k, False: 694k]
  ------------------
 1240|  86.2k|         if(l_map)
  ------------------
  |  Branch (1240:13): [True: 71.8k, False: 14.3k]
  ------------------
 1241|  71.8k|         {
 1242|  71.8k|            l_map[0] |= mask_init;
 1243|  18.4M|            for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1243:37): [True: 18.4M, False: 71.8k]
  ------------------
 1244|  18.4M|            {
 1245|  18.4M|               if(static_cast<re_set*>(state)->_map[
  ------------------
  |  Branch (1245:19): [True: 5.67M, False: 12.7M]
  ------------------
 1246|  18.4M|                  static_cast<unsigned char>(m_traits.translate(static_cast<charT>(i), l_icase))])
 1247|  5.67M|                  l_map[i] |= mask;
 1248|  18.4M|            }
 1249|  71.8k|         }
 1250|  86.2k|         return;
 1251|  38.3k|      case syntax_element_jump:
  ------------------
  |  Branch (1251:7): [True: 38.3k, False: 742k]
  ------------------
 1252|       |         // take the jump:
 1253|  38.3k|         state = static_cast<re_alt*>(state)->alt.p;
 1254|  38.3k|         not_last_jump = -1;
 1255|  38.3k|         break;
 1256|  86.2k|      case syntax_element_alt:
  ------------------
  |  Branch (1256:7): [True: 86.2k, False: 694k]
  ------------------
 1257|   134k|      case syntax_element_rep:
  ------------------
  |  Branch (1257:7): [True: 47.9k, False: 733k]
  ------------------
 1258|   134k|      case syntax_element_dot_rep:
  ------------------
  |  Branch (1258:7): [True: 0, False: 781k]
  ------------------
 1259|   138k|      case syntax_element_char_rep:
  ------------------
  |  Branch (1259:7): [True: 4.79k, False: 776k]
  ------------------
 1260|   153k|      case syntax_element_short_set_rep:
  ------------------
  |  Branch (1260:7): [True: 14.3k, False: 766k]
  ------------------
 1261|   153k|      case syntax_element_long_set_rep:
  ------------------
  |  Branch (1261:7): [True: 0, False: 781k]
  ------------------
 1262|   153k|         {
 1263|   153k|            re_alt* rep = static_cast<re_alt*>(state);
 1264|   153k|            if(rep->_map[0] & mask_init)
  ------------------
  |  Branch (1264:16): [True: 91.0k, False: 62.2k]
  ------------------
 1265|  91.0k|            {
 1266|  91.0k|               if(l_map)
  ------------------
  |  Branch (1266:19): [True: 86.2k, False: 4.79k]
  ------------------
 1267|  86.2k|               {
 1268|       |                  // copy previous results:
 1269|  86.2k|                  l_map[0] |= mask_init;
 1270|  22.1M|                  for(unsigned int i = 0; i <= UCHAR_MAX; ++i)
  ------------------
  |  Branch (1270:43): [True: 22.0M, False: 86.2k]
  ------------------
 1271|  22.0M|                  {
 1272|  22.0M|                     if(rep->_map[i] & mask_any)
  ------------------
  |  Branch (1272:25): [True: 12.4M, False: 9.67M]
  ------------------
 1273|  12.4M|                        l_map[i] |= mask;
 1274|  22.0M|                  }
 1275|  86.2k|               }
 1276|  91.0k|               if(pnull)
  ------------------
  |  Branch (1276:19): [True: 91.0k, False: 0]
  ------------------
 1277|  91.0k|               {
 1278|  91.0k|                  if(rep->can_be_null & mask_any)
  ------------------
  |  Branch (1278:22): [True: 33.5k, False: 57.5k]
  ------------------
 1279|  33.5k|                     *pnull |= mask;
 1280|  91.0k|               }
 1281|  91.0k|            }
 1282|  62.2k|            else
 1283|  62.2k|            {
 1284|       |               // we haven't created a startmap for this alternative yet
 1285|       |               // so take the union of the two options:
 1286|  62.2k|               if(is_bad_repeat(state))
  ------------------
  |  Branch (1286:19): [True: 0, False: 62.2k]
  ------------------
 1287|      0|               {
 1288|      0|                  set_all_masks(l_map, mask);
 1289|      0|                  if(pnull)
  ------------------
  |  Branch (1289:22): [True: 0, False: 0]
  ------------------
 1290|      0|                     *pnull |= mask;
 1291|      0|                  return;
 1292|      0|               }
 1293|  62.2k|               set_bad_repeat(state);
 1294|  62.2k|               create_startmap(state->next.p, l_map, pnull, mask);
 1295|  62.2k|               if((state->type == syntax_element_alt)
  ------------------
  |  Branch (1295:19): [True: 33.5k, False: 28.7k]
  ------------------
 1296|  62.2k|                  || (static_cast<re_repeat*>(state)->min == 0)
  ------------------
  |  Branch (1296:22): [True: 19.1k, False: 9.58k]
  ------------------
 1297|  62.2k|                  || (not_last_jump == 0))
  ------------------
  |  Branch (1297:22): [True: 0, False: 9.58k]
  ------------------
 1298|  52.7k|                  create_startmap(rep->alt.p, l_map, pnull, mask);
 1299|  62.2k|            }
 1300|   153k|         }
 1301|   153k|         return;
 1302|   153k|      case syntax_element_soft_buffer_end:
  ------------------
  |  Branch (1302:7): [True: 0, False: 781k]
  ------------------
 1303|       |         // match newline or null:
 1304|      0|         if(l_map)
  ------------------
  |  Branch (1304:13): [True: 0, False: 0]
  ------------------
 1305|      0|         {
 1306|      0|            l_map[0] |= mask_init;
 1307|      0|            l_map[static_cast<unsigned>('\n')] |= mask;
 1308|      0|            l_map[static_cast<unsigned>('\r')] |= mask;
 1309|      0|         }
 1310|      0|         if(pnull)
  ------------------
  |  Branch (1310:13): [True: 0, False: 0]
  ------------------
 1311|      0|            *pnull |= mask;
 1312|      0|         return;
 1313|  95.8k|      case syntax_element_endmark:
  ------------------
  |  Branch (1313:7): [True: 95.8k, False: 685k]
  ------------------
 1314|       |         // need to handle independent subs as a special case:
 1315|  95.8k|         if(static_cast<re_brace*>(state)->index < 0)
  ------------------
  |  Branch (1315:13): [True: 0, False: 95.8k]
  ------------------
 1316|      0|         {
 1317|       |            // can be null, any character can match:
 1318|      0|            set_all_masks(l_map, mask);
 1319|      0|            if(pnull)
  ------------------
  |  Branch (1319:16): [True: 0, False: 0]
  ------------------
 1320|      0|               *pnull |= mask;
 1321|      0|            return;
 1322|      0|         }
 1323|  95.8k|         else if(recursion_start && (recursion_sub != 0) && (recursion_sub == static_cast<re_brace*>(state)->index))
  ------------------
  |  Branch (1323:18): [True: 0, False: 95.8k]
  |  Branch (1323:37): [True: 0, False: 0]
  |  Branch (1323:61): [True: 0, False: 0]
  ------------------
 1324|      0|         {
 1325|       |            // recursion termination:
 1326|      0|            recursion_start = 0;
 1327|      0|            state = recursion_restart;
 1328|      0|            break;
 1329|      0|         }
 1330|       |
 1331|       |         //
 1332|       |         // Normally we just go to the next state... but if this sub-expression is
 1333|       |         // the target of a recursion, then we might be ending a recursion, in which
 1334|       |         // case we should check whatever follows that recursion, as well as whatever
 1335|       |         // follows this state:
 1336|       |         //
 1337|  95.8k|         if(m_pdata->m_has_recursions && static_cast<re_brace*>(state)->index)
  ------------------
  |  Branch (1337:13): [True: 0, False: 95.8k]
  |  Branch (1337:42): [True: 0, False: 0]
  ------------------
 1338|      0|         {
 1339|      0|            bool ok = false;
 1340|      0|            re_syntax_base* p = m_pdata->m_first_state;
 1341|      0|            while(p)
  ------------------
  |  Branch (1341:19): [True: 0, False: 0]
  ------------------
 1342|      0|            {
 1343|      0|               if(p->type == syntax_element_recurse)
  ------------------
  |  Branch (1343:19): [True: 0, False: 0]
  ------------------
 1344|      0|               {
 1345|      0|                  re_brace* p2 = static_cast<re_brace*>(static_cast<re_jump*>(p)->alt.p);
 1346|      0|                  if((p2->type == syntax_element_startmark) && (p2->index == static_cast<re_brace*>(state)->index))
  ------------------
  |  Branch (1346:22): [True: 0, False: 0]
  |  Branch (1346:64): [True: 0, False: 0]
  ------------------
 1347|      0|                  {
 1348|      0|                     ok = true;
 1349|      0|                     break;
 1350|      0|                  }
 1351|      0|               }
 1352|      0|               p = p->next.p;
 1353|      0|            }
 1354|      0|            if(ok && ((m_recursion_checks[static_cast<re_brace*>(state)->index] & 2u) == 0))
  ------------------
  |  Branch (1354:16): [True: 0, False: 0]
  |  Branch (1354:22): [True: 0, False: 0]
  ------------------
 1355|      0|            {
 1356|      0|               m_recursion_checks[static_cast<re_brace*>(state)->index] |= 2u;
 1357|      0|               create_startmap(p->next.p, l_map, pnull, mask);
 1358|      0|            }
 1359|      0|         }
 1360|  95.8k|         state = state->next.p;
 1361|  95.8k|         break;
 1362|       |
 1363|      0|      case syntax_element_commit:
  ------------------
  |  Branch (1363:7): [True: 0, False: 781k]
  ------------------
 1364|      0|         set_all_masks(l_map, mask);
 1365|       |         // Continue scanning so we can figure out whether we can be null:
 1366|      0|         state = state->next.p;
 1367|      0|         break;
 1368|   186k|      case syntax_element_startmark:
  ------------------
  |  Branch (1368:7): [True: 186k, False: 594k]
  ------------------
 1369|       |         // need to handle independent subs as a special case:
 1370|   186k|         if(static_cast<re_brace*>(state)->index == -3)
  ------------------
  |  Branch (1370:13): [True: 0, False: 186k]
  ------------------
 1371|      0|         {
 1372|      0|            state = state->next.p->next.p;
 1373|      0|            break;
 1374|      0|         }
 1375|   186k|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|   186k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|   186k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
 1376|   230k|      default:
  ------------------
  |  Branch (1376:7): [True: 43.1k, False: 737k]
  ------------------
 1377|   230k|         state = state->next.p;
 1378|   781k|      }
 1379|   364k|      ++not_last_jump;
 1380|   364k|   }
 1381|   416k|}
_ZN5boost13re_detail_50015recursion_saverC2EPNSt3__16vectorIhNS2_9allocatorIhEEEE:
 1069|   416k|   recursion_saver(std::vector<unsigned char>* p) : saved_state(*p), state(p) {}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13set_all_masksEPhh:
 1415|  57.5k|{
 1416|       |   //
 1417|       |   // set mask in all of bits elements, 
 1418|       |   // if bits[0] has mask_init not set then we can 
 1419|       |   // optimise this to a call to memset:
 1420|       |   //
 1421|  57.5k|   if(bits)
  ------------------
  |  Branch (1421:7): [True: 47.9k, False: 9.58k]
  ------------------
 1422|  47.9k|   {
 1423|  47.9k|      if(bits[0] == 0)
  ------------------
  |  Branch (1423:10): [True: 19.1k, False: 28.7k]
  ------------------
 1424|  19.1k|         (std::memset)(bits, mask, 1u << CHAR_BIT);
 1425|  28.7k|      else
 1426|  28.7k|      {
 1427|  7.38M|         for(unsigned i = 0; i < (1u << CHAR_BIT); ++i)
  ------------------
  |  Branch (1427:30): [True: 7.36M, False: 28.7k]
  ------------------
 1428|  7.36M|            bits[i] |= mask;
 1429|  28.7k|      }
 1430|  47.9k|      bits[0] |= mask_init;
 1431|  47.9k|   }
 1432|  57.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13is_bad_repeatEPNS0_14re_syntax_baseE:
 1436|  62.2k|{
 1437|  62.2k|   switch(pt->type)
 1438|  62.2k|   {
 1439|  28.7k|   case syntax_element_rep:
  ------------------
  |  Branch (1439:4): [True: 28.7k, False: 33.5k]
  ------------------
 1440|  28.7k|   case syntax_element_dot_rep:
  ------------------
  |  Branch (1440:4): [True: 0, False: 62.2k]
  ------------------
 1441|  28.7k|   case syntax_element_char_rep:
  ------------------
  |  Branch (1441:4): [True: 0, False: 62.2k]
  ------------------
 1442|  28.7k|   case syntax_element_short_set_rep:
  ------------------
  |  Branch (1442:4): [True: 0, False: 62.2k]
  ------------------
 1443|  28.7k|   case syntax_element_long_set_rep:
  ------------------
  |  Branch (1443:4): [True: 0, False: 62.2k]
  ------------------
 1444|  28.7k|      {
 1445|  28.7k|         unsigned state_id = static_cast<re_repeat*>(pt)->state_id;
 1446|  28.7k|         if(state_id >= sizeof(m_bad_repeats) * CHAR_BIT)
  ------------------
  |  Branch (1446:13): [True: 0, False: 28.7k]
  ------------------
 1447|      0|            return true;  // run out of bits, assume we can't traverse this one.
 1448|  28.7k|         static const std::uintmax_t one = 1uL;
 1449|  28.7k|         return m_bad_repeats & (one << state_id);
 1450|  28.7k|      }
 1451|  33.5k|   default:
  ------------------
  |  Branch (1451:4): [True: 33.5k, False: 28.7k]
  ------------------
 1452|  33.5k|      return false;
 1453|  62.2k|   }
 1454|  62.2k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14set_bad_repeatEPNS0_14re_syntax_baseE:
 1458|  62.2k|{
 1459|  62.2k|   switch(pt->type)
 1460|  62.2k|   {
 1461|  28.7k|   case syntax_element_rep:
  ------------------
  |  Branch (1461:4): [True: 28.7k, False: 33.5k]
  ------------------
 1462|  28.7k|   case syntax_element_dot_rep:
  ------------------
  |  Branch (1462:4): [True: 0, False: 62.2k]
  ------------------
 1463|  28.7k|   case syntax_element_char_rep:
  ------------------
  |  Branch (1463:4): [True: 0, False: 62.2k]
  ------------------
 1464|  28.7k|   case syntax_element_short_set_rep:
  ------------------
  |  Branch (1464:4): [True: 0, False: 62.2k]
  ------------------
 1465|  28.7k|   case syntax_element_long_set_rep:
  ------------------
  |  Branch (1465:4): [True: 0, False: 62.2k]
  ------------------
 1466|  28.7k|      {
 1467|  28.7k|         unsigned state_id = static_cast<re_repeat*>(pt)->state_id;
 1468|  28.7k|         static const std::uintmax_t one = 1uL;
 1469|  28.7k|         if(state_id <= sizeof(m_bad_repeats) * CHAR_BIT)
  ------------------
  |  Branch (1469:13): [True: 28.7k, False: 0]
  ------------------
 1470|  28.7k|            m_bad_repeats |= (one << state_id);
 1471|  28.7k|      }
 1472|  28.7k|      break;
 1473|  33.5k|   default:
  ------------------
  |  Branch (1473:4): [True: 33.5k, False: 28.7k]
  ------------------
 1474|  33.5k|      break;
 1475|  62.2k|   }
 1476|  62.2k|}
_ZN5boost13re_detail_50015recursion_saverD2Ev:
 1071|   416k|   {
 1072|   416k|      state->swap(saved_state);
 1073|   416k|   }
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16get_restart_typeEPNS0_14re_syntax_baseE:
 1385|  33.5k|{
 1386|       |   //
 1387|       |   // find out how the machine starts, so we can optimise the search:
 1388|       |   //
 1389|  67.0k|   while(state)
  ------------------
  |  Branch (1389:10): [True: 67.0k, False: 0]
  ------------------
 1390|  67.0k|   {
 1391|  67.0k|      switch(state->type)
 1392|  67.0k|      {
 1393|  33.5k|      case syntax_element_startmark:
  ------------------
  |  Branch (1393:7): [True: 33.5k, False: 33.5k]
  ------------------
 1394|  33.5k|      case syntax_element_endmark:
  ------------------
  |  Branch (1394:7): [True: 0, False: 67.0k]
  ------------------
 1395|  33.5k|         state = state->next.p;
 1396|  33.5k|         continue;
 1397|      0|      case syntax_element_start_line:
  ------------------
  |  Branch (1397:7): [True: 0, False: 67.0k]
  ------------------
 1398|      0|         return regbase::restart_line;
 1399|      0|      case syntax_element_word_start:
  ------------------
  |  Branch (1399:7): [True: 0, False: 67.0k]
  ------------------
 1400|      0|         return regbase::restart_word;
 1401|  33.5k|      case syntax_element_buffer_start:
  ------------------
  |  Branch (1401:7): [True: 33.5k, False: 33.5k]
  ------------------
 1402|  33.5k|         return regbase::restart_buf;
 1403|      0|      case syntax_element_restart_continue:
  ------------------
  |  Branch (1403:7): [True: 0, False: 67.0k]
  ------------------
 1404|      0|         return regbase::restart_continue;
 1405|      0|      default:
  ------------------
  |  Branch (1405:7): [True: 0, False: 67.0k]
  ------------------
 1406|      0|         state = 0;
 1407|      0|         continue;
 1408|  67.0k|      }
 1409|  67.0k|   }
 1410|      0|   return regbase::restart_any;
 1411|  33.5k|}
_ZN5boost13re_detail_50019basic_regex_creatorIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE20probe_leading_repeatEPNS0_14re_syntax_baseE:
 1509|  33.5k|{
 1510|       |   // enumerate our states, and see if we have a leading repeat 
 1511|       |   // for which failed search restarts can be optimized;
 1512|  33.5k|   do
 1513|   119k|   {
 1514|   119k|      switch(state->type)
 1515|   119k|      {
 1516|  52.7k|      case syntax_element_startmark:
  ------------------
  |  Branch (1516:7): [True: 52.7k, False: 67.0k]
  ------------------
 1517|  52.7k|         if(static_cast<re_brace*>(state)->index >= 0)
  ------------------
  |  Branch (1517:13): [True: 52.7k, False: 0]
  ------------------
 1518|  52.7k|         {
 1519|  52.7k|            state = state->next.p;
 1520|  52.7k|            continue;
 1521|  52.7k|         }
 1522|       |#ifdef BOOST_REGEX_MSVC
 1523|       |#  pragma warning(push)
 1524|       |#pragma warning(disable:6011)
 1525|       |#endif
 1526|      0|         if((static_cast<re_brace*>(state)->index == -1)
  ------------------
  |  Branch (1526:13): [True: 0, False: 0]
  ------------------
 1527|      0|            || (static_cast<re_brace*>(state)->index == -2))
  ------------------
  |  Branch (1527:16): [True: 0, False: 0]
  ------------------
 1528|      0|         {
 1529|       |            // skip past the zero width assertion:
 1530|      0|            state = static_cast<const re_jump*>(state->next.p)->alt.p->next.p;
 1531|      0|            continue;
 1532|      0|         }
 1533|       |#ifdef BOOST_REGEX_MSVC
 1534|       |#  pragma warning(pop)
 1535|       |#endif
 1536|      0|         if(static_cast<re_brace*>(state)->index == -3)
  ------------------
  |  Branch (1536:13): [True: 0, False: 0]
  ------------------
 1537|      0|         {
 1538|       |            // Have to skip the leading jump state:
 1539|      0|            state = state->next.p->next.p;
 1540|      0|            continue;
 1541|      0|         }
 1542|      0|         return;
 1543|      0|      case syntax_element_endmark:
  ------------------
  |  Branch (1543:7): [True: 0, False: 119k]
  ------------------
 1544|      0|      case syntax_element_start_line:
  ------------------
  |  Branch (1544:7): [True: 0, False: 119k]
  ------------------
 1545|      0|      case syntax_element_end_line:
  ------------------
  |  Branch (1545:7): [True: 0, False: 119k]
  ------------------
 1546|      0|      case syntax_element_word_boundary:
  ------------------
  |  Branch (1546:7): [True: 0, False: 119k]
  ------------------
 1547|      0|      case syntax_element_within_word:
  ------------------
  |  Branch (1547:7): [True: 0, False: 119k]
  ------------------
 1548|      0|      case syntax_element_word_start:
  ------------------
  |  Branch (1548:7): [True: 0, False: 119k]
  ------------------
 1549|      0|      case syntax_element_word_end:
  ------------------
  |  Branch (1549:7): [True: 0, False: 119k]
  ------------------
 1550|  33.5k|      case syntax_element_buffer_start:
  ------------------
  |  Branch (1550:7): [True: 33.5k, False: 86.2k]
  ------------------
 1551|  33.5k|      case syntax_element_buffer_end:
  ------------------
  |  Branch (1551:7): [True: 0, False: 119k]
  ------------------
 1552|  33.5k|      case syntax_element_restart_continue:
  ------------------
  |  Branch (1552:7): [True: 0, False: 119k]
  ------------------
 1553|  33.5k|         state = state->next.p;
 1554|  33.5k|         break;
 1555|      0|      case syntax_element_dot_rep:
  ------------------
  |  Branch (1555:7): [True: 0, False: 119k]
  ------------------
 1556|      0|      case syntax_element_char_rep:
  ------------------
  |  Branch (1556:7): [True: 0, False: 119k]
  ------------------
 1557|  4.79k|      case syntax_element_short_set_rep:
  ------------------
  |  Branch (1557:7): [True: 4.79k, False: 115k]
  ------------------
 1558|  4.79k|      case syntax_element_long_set_rep:
  ------------------
  |  Branch (1558:7): [True: 0, False: 119k]
  ------------------
 1559|  4.79k|         if(this->m_has_backrefs == 0)
  ------------------
  |  Branch (1559:13): [True: 4.79k, False: 0]
  ------------------
 1560|  4.79k|            static_cast<re_repeat*>(state)->leading = true;
 1561|  4.79k|         BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|  4.79k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|  4.79k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
 1562|  33.5k|      default:
  ------------------
  |  Branch (1562:7): [True: 28.7k, False: 91.0k]
  ------------------
 1563|  33.5k|         return;
 1564|   119k|      }
 1565|   119k|   }while(state);
  ------------------
  |  Branch (1565:11): [True: 86.2k, False: 0]
  ------------------
 1566|  33.5k|}

_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2EPNS0_10regex_dataIcS5_EE:
  117|  33.5k|   : basic_regex_creator<charT, traits>(data), m_parser_proc(), m_base(0), m_end(0), m_position(0), 
  118|  33.5k|   m_mark_count(0), m_mark_reset(-1), m_max_mark(0), m_paren_start(0), m_alt_insert_point(0), m_has_case_change(false), m_recursion_count(0), m_max_backref(0)
  119|  33.5k|{
  120|  33.5k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE5parseEPKcS8_j:
  124|  33.5k|{
  125|       |   // pass l_flags on to base class:
  126|  33.5k|   this->init(l_flags);
  127|       |   // set up pointers:
  128|  33.5k|   m_position = m_base = p1;
  129|  33.5k|   m_end = p2;
  130|       |   // empty strings are errors:
  131|  33.5k|   if((p1 == p2) && 
  ------------------
  |  Branch (131:7): [True: 0, False: 33.5k]
  ------------------
  132|  33.5k|      (
  133|      0|         ((l_flags & regbase::main_option_type) != regbase::perl_syntax_group)
  ------------------
  |  Branch (133:10): [True: 0, False: 0]
  ------------------
  134|      0|         || (l_flags & regbase::no_empty_expressions)
  ------------------
  |  Branch (134:13): [True: 0, False: 0]
  ------------------
  135|      0|      )
  136|  33.5k|     )
  137|      0|   {
  138|      0|      fail(regex_constants::error_empty, 0);
  139|      0|      return;
  140|      0|   }
  141|       |   // select which parser to use:
  142|  33.5k|   switch(l_flags & regbase::main_option_type)
  143|  33.5k|   {
  144|  33.5k|   case regbase::perl_syntax_group:
  ------------------
  |  Branch (144:4): [True: 33.5k, False: 0]
  ------------------
  145|  33.5k|      {
  146|  33.5k|         m_parser_proc = &basic_regex_parser<charT, traits>::parse_extended;
  147|       |         //
  148|       |         // Add a leading paren with index zero to give recursions a target:
  149|       |         //
  150|  33.5k|         re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
  151|  33.5k|         br->index = 0;
  152|  33.5k|         br->icase = this->flags() & regbase::icase;
  153|  33.5k|         break;
  154|      0|      }
  155|      0|   case regbase::basic_syntax_group:
  ------------------
  |  Branch (155:4): [True: 0, False: 33.5k]
  ------------------
  156|      0|      m_parser_proc = &basic_regex_parser<charT, traits>::parse_basic;
  157|      0|      break;
  158|      0|   case regbase::literal:
  ------------------
  |  Branch (158:4): [True: 0, False: 33.5k]
  ------------------
  159|      0|      m_parser_proc = &basic_regex_parser<charT, traits>::parse_literal;
  160|      0|      break;
  161|      0|   default:
  ------------------
  |  Branch (161:4): [True: 0, False: 33.5k]
  ------------------
  162|       |      // Oops, someone has managed to set more than one of the main option flags, 
  163|       |      // so this must be an error:
  164|      0|      fail(regex_constants::error_unknown, 0, "An invalid combination of regular expression syntax flags was used.");
  165|      0|      return;
  166|  33.5k|   }
  167|       |
  168|       |   // parse all our characters:
  169|  33.5k|   bool result = parse_all();
  170|       |   //
  171|       |   // Unwind our alternatives:
  172|       |   //
  173|  33.5k|   unwind_alts(-1);
  174|       |   // reset l_flags as a global scope (?imsx) may have altered them:
  175|  33.5k|   this->flags(l_flags);
  176|       |   // if we haven't gobbled up all the characters then we must
  177|       |   // have had an unexpected ')' :
  178|  33.5k|   if(!result)
  ------------------
  |  Branch (178:7): [True: 0, False: 33.5k]
  ------------------
  179|      0|   {
  180|      0|      fail(regex_constants::error_paren, std::distance(m_base, m_position), "Found a closing ) with no corresponding opening parenthesis.");
  181|      0|      return;
  182|      0|   }
  183|       |   // if an error has been set then give up now:
  184|  33.5k|   if(this->m_pdata->m_status)
  ------------------
  |  Branch (184:7): [True: 0, False: 33.5k]
  ------------------
  185|      0|      return;
  186|       |   // fill in our sub-expression count:
  187|  33.5k|   this->m_pdata->m_mark_count = 1u + (std::size_t)m_mark_count;
  188|       |   //
  189|       |   // Check we don't have backreferences to sub-expressions which don't exist:
  190|       |   //
  191|  33.5k|   if (m_max_backref > m_mark_count)
  ------------------
  |  Branch (191:8): [True: 0, False: 33.5k]
  ------------------
  192|      0|   {
  193|      0|      fail(regex_constants::error_backref, std::distance(m_base, m_position), "Found a backreference to a non-existant sub-expression.");
  194|      0|   }
  195|  33.5k|   this->finalize(p1, p2);
  196|  33.5k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14parse_extendedEv:
  328|   594k|{
  329|   594k|   bool result = true;
  330|   594k|   switch(this->m_traits.syntax_type(*m_position))
  331|   594k|   {
  332|   105k|   case regex_constants::syntax_open_mark:
  ------------------
  |  Branch (332:4): [True: 105k, False: 488k]
  ------------------
  333|   105k|      return parse_open_paren();
  334|   105k|   case regex_constants::syntax_close_mark:
  ------------------
  |  Branch (334:4): [True: 105k, False: 488k]
  ------------------
  335|   105k|      return false;
  336|  86.2k|   case regex_constants::syntax_escape:
  ------------------
  |  Branch (336:4): [True: 86.2k, False: 507k]
  ------------------
  337|  86.2k|      return parse_extended_escape();
  338|  23.9k|   case regex_constants::syntax_dot:
  ------------------
  |  Branch (338:4): [True: 23.9k, False: 570k]
  ------------------
  339|  23.9k|      return parse_match_any();
  340|  4.79k|   case regex_constants::syntax_caret:
  ------------------
  |  Branch (340:4): [True: 4.79k, False: 589k]
  ------------------
  341|  4.79k|      ++m_position;
  342|  4.79k|      this->append_state(
  343|  4.79k|         (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_start : syntax_element_start_line));
  ------------------
  |  Branch (343:11): [True: 0, False: 4.79k]
  ------------------
  344|  4.79k|      break;
  345|  9.58k|   case regex_constants::syntax_dollar:
  ------------------
  |  Branch (345:4): [True: 9.58k, False: 584k]
  ------------------
  346|  9.58k|      ++m_position;
  347|  9.58k|      this->append_state(
  348|  9.58k|         (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_end : syntax_element_end_line));
  ------------------
  |  Branch (348:11): [True: 0, False: 9.58k]
  ------------------
  349|  9.58k|      break;
  350|  52.7k|   case regex_constants::syntax_star:
  ------------------
  |  Branch (350:4): [True: 52.7k, False: 541k]
  ------------------
  351|  52.7k|      if(m_position == this->m_base)
  ------------------
  |  Branch (351:10): [True: 0, False: 52.7k]
  ------------------
  352|      0|      {
  353|      0|         fail(regex_constants::error_badrepeat, 0, "The repeat operator \"*\" cannot start a regular expression.");
  354|      0|         return false;
  355|      0|      }
  356|  52.7k|      ++m_position;
  357|  52.7k|      return parse_repeat();
  358|  19.1k|   case regex_constants::syntax_question:
  ------------------
  |  Branch (358:4): [True: 19.1k, False: 575k]
  ------------------
  359|  19.1k|      if(m_position == this->m_base)
  ------------------
  |  Branch (359:10): [True: 0, False: 19.1k]
  ------------------
  360|      0|      {
  361|      0|         fail(regex_constants::error_badrepeat, 0, "The repeat operator \"?\" cannot start a regular expression.");
  362|      0|         return false;
  363|      0|      }
  364|  19.1k|      ++m_position;
  365|  19.1k|      return parse_repeat(0,1);
  366|  14.3k|   case regex_constants::syntax_plus:
  ------------------
  |  Branch (366:4): [True: 14.3k, False: 579k]
  ------------------
  367|  14.3k|      if(m_position == this->m_base)
  ------------------
  |  Branch (367:10): [True: 0, False: 14.3k]
  ------------------
  368|      0|      {
  369|      0|         fail(regex_constants::error_badrepeat, 0, "The repeat operator \"+\" cannot start a regular expression.");
  370|      0|         return false;
  371|      0|      }
  372|  14.3k|      ++m_position;
  373|  14.3k|      return parse_repeat(1);
  374|      0|   case regex_constants::syntax_open_brace:
  ------------------
  |  Branch (374:4): [True: 0, False: 594k]
  ------------------
  375|      0|      ++m_position;
  376|      0|      return parse_repeat_range(false);
  377|      0|   case regex_constants::syntax_close_brace:
  ------------------
  |  Branch (377:4): [True: 0, False: 594k]
  ------------------
  378|      0|      if((this->flags() & regbase::no_perl_ex) == regbase::no_perl_ex)
  ------------------
  |  Branch (378:10): [True: 0, False: 0]
  ------------------
  379|      0|      {
  380|      0|         fail(regex_constants::error_brace, this->m_position - this->m_base, "Found a closing repetition operator } with no corresponding {.");
  381|      0|         return false;
  382|      0|      }
  383|      0|      result = parse_literal();
  384|      0|      break;
  385|  43.1k|   case regex_constants::syntax_or:
  ------------------
  |  Branch (385:4): [True: 43.1k, False: 551k]
  ------------------
  386|  43.1k|      return parse_alt();
  387|  57.5k|   case regex_constants::syntax_open_set:
  ------------------
  |  Branch (387:4): [True: 57.5k, False: 536k]
  ------------------
  388|  57.5k|      return parse_set();
  389|      0|   case regex_constants::syntax_newline:
  ------------------
  |  Branch (389:4): [True: 0, False: 594k]
  ------------------
  390|      0|      if(this->flags() & regbase::newline_alt)
  ------------------
  |  Branch (390:10): [True: 0, False: 0]
  ------------------
  391|      0|         return parse_alt();
  392|      0|      else
  393|      0|         return parse_literal();
  394|  4.79k|   case regex_constants::syntax_hash:
  ------------------
  |  Branch (394:4): [True: 4.79k, False: 589k]
  ------------------
  395|       |      //
  396|       |      // If we have a mod_x flag set, then skip until
  397|       |      // we get to a newline character:
  398|       |      //
  399|  4.79k|      if((this->flags() 
  ------------------
  |  Branch (399:10): [True: 0, False: 4.79k]
  ------------------
  400|  4.79k|         & (regbase::no_perl_ex|regbase::mod_x))
  401|  4.79k|         == regbase::mod_x)
  402|      0|      {
  403|      0|         while((m_position != m_end) && !is_separator(*m_position++)){}
  ------------------
  |  Branch (403:16): [True: 0, False: 0]
  |  Branch (403:41): [True: 0, False: 0]
  ------------------
  404|      0|         return true;
  405|      0|      }
  406|  4.79k|      BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|  4.79k|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|  4.79k|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  407|  71.8k|   default:
  ------------------
  |  Branch (407:4): [True: 67.0k, False: 527k]
  ------------------
  408|  71.8k|      result = parse_literal();
  409|  71.8k|      break;
  410|   594k|   }
  411|  86.2k|   return result;
  412|   594k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16parse_open_parenEv:
  437|   105k|{
  438|       |   //
  439|       |   // skip the '(' and error check:
  440|       |   //
  441|   105k|   if(++m_position == m_end)
  ------------------
  |  Branch (441:7): [True: 0, False: 105k]
  ------------------
  442|      0|   {
  443|      0|      fail(regex_constants::error_paren, m_position - m_base);
  444|      0|      return false;
  445|      0|   }
  446|       |   //
  447|       |   // begin by checking for a perl-style (?...) extension:
  448|       |   //
  449|   105k|   if(
  450|   105k|         ((this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) == 0)
  ------------------
  |  Branch (450:10): [True: 105k, False: 0]
  ------------------
  451|   105k|         || ((this->flags() & (regbase::main_option_type | regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
  ------------------
  |  Branch (451:13): [True: 0, False: 0]
  ------------------
  452|   105k|     )
  453|   105k|   {
  454|   105k|      if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question)
  ------------------
  |  Branch (454:10): [True: 76.6k, False: 28.7k]
  ------------------
  455|  76.6k|         return parse_perl_extension();
  456|  28.7k|      if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_star)
  ------------------
  |  Branch (456:10): [True: 0, False: 28.7k]
  ------------------
  457|      0|         return parse_perl_verb();
  458|  28.7k|   }
  459|       |   //
  460|       |   // update our mark count, and append the required state:
  461|       |   //
  462|  28.7k|   unsigned markid = 0;
  463|  28.7k|   if(0 == (this->flags() & regbase::nosubs))
  ------------------
  |  Branch (463:7): [True: 28.7k, False: 0]
  ------------------
  464|  28.7k|   {
  465|  28.7k|      markid = ++m_mark_count;
  466|  28.7k|      if(this->flags() & regbase::save_subexpression_location)
  ------------------
  |  Branch (466:10): [True: 0, False: 28.7k]
  ------------------
  467|      0|         this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>(std::distance(m_base, m_position) - 1, 0));
  468|  28.7k|   }
  469|  28.7k|   re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
  470|  28.7k|   pb->index = markid;
  471|  28.7k|   pb->icase = this->flags() & regbase::icase;
  472|  28.7k|   std::ptrdiff_t last_paren_start = this->getoffset(pb);
  473|       |   // back up insertion point for alternations, and set new point:
  474|  28.7k|   std::ptrdiff_t last_alt_point = m_alt_insert_point;
  475|  28.7k|   this->m_pdata->m_data.align();
  476|  28.7k|   m_alt_insert_point = this->m_pdata->m_data.size();
  477|       |   //
  478|       |   // back up the current flags in case we have a nested (?imsx) group:
  479|       |   //
  480|  28.7k|   regex_constants::syntax_option_type opts = this->flags();
  481|  28.7k|   bool old_case_change = m_has_case_change;
  482|  28.7k|   m_has_case_change = false; // no changes to this scope as yet...
  483|       |   //
  484|       |   // Back up branch reset data in case we have a nested (?|...)
  485|       |   //
  486|  28.7k|   int mark_reset = m_mark_reset;
  487|  28.7k|   m_mark_reset = -1;
  488|       |   //
  489|       |   // now recursively add more states, this will terminate when we get to a
  490|       |   // matching ')' :
  491|       |   //
  492|  28.7k|   parse_all();
  493|       |   //
  494|       |   // Unwind pushed alternatives:
  495|       |   //
  496|  28.7k|   if(0 == unwind_alts(last_paren_start))
  ------------------
  |  Branch (496:7): [True: 0, False: 28.7k]
  ------------------
  497|      0|      return false;
  498|       |   //
  499|       |   // restore flags:
  500|       |   //
  501|  28.7k|   if(m_has_case_change)
  ------------------
  |  Branch (501:7): [True: 0, False: 28.7k]
  ------------------
  502|      0|   {
  503|       |      // the case has changed in one or more of the alternatives
  504|       |      // within the scoped (...) block: we have to add a state
  505|       |      // to reset the case sensitivity:
  506|      0|      static_cast<re_case*>(
  507|      0|         this->append_state(syntax_element_toggle_case, sizeof(re_case))
  508|      0|         )->icase = opts & regbase::icase;
  509|      0|   }
  510|  28.7k|   this->flags(opts);
  511|  28.7k|   m_has_case_change = old_case_change;
  512|       |   //
  513|       |   // restore branch reset:
  514|       |   //
  515|  28.7k|   m_mark_reset = mark_reset;
  516|       |   //
  517|       |   // we either have a ')' or we have run out of characters prematurely:
  518|       |   //
  519|  28.7k|   if(m_position == m_end)
  ------------------
  |  Branch (519:7): [True: 0, False: 28.7k]
  ------------------
  520|      0|   {
  521|      0|      this->fail(regex_constants::error_paren, std::distance(m_base, m_end));
  522|      0|      return false;
  523|      0|   }
  524|  28.7k|   if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (524:7): [True: 0, False: 28.7k]
  ------------------
  525|      0|      return false;
  526|  28.7k|   if(markid && (this->flags() & regbase::save_subexpression_location))
  ------------------
  |  Branch (526:7): [True: 28.7k, False: 0]
  |  Branch (526:17): [True: 0, False: 28.7k]
  ------------------
  527|      0|      this->m_pdata->m_subs.at(markid - 1).second = std::distance(m_base, m_position);
  528|  28.7k|   ++m_position;
  529|       |   //
  530|       |   // append closing parenthesis state:
  531|       |   //
  532|  28.7k|   pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace)));
  533|  28.7k|   pb->index = markid;
  534|  28.7k|   pb->icase = this->flags() & regbase::icase;
  535|  28.7k|   this->m_paren_start = last_paren_start;
  536|       |   //
  537|       |   // restore the alternate insertion point:
  538|       |   //
  539|  28.7k|   this->m_alt_insert_point = last_alt_point;
  540|       |
  541|  28.7k|   return true;
  542|  28.7k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE20parse_perl_extensionEv:
 2017|  76.6k|{
 2018|  76.6k|   if(++m_position == m_end)
  ------------------
  |  Branch (2018:7): [True: 0, False: 76.6k]
  ------------------
 2019|      0|   {
 2020|       |      // Rewind to start of (? sequence:
 2021|      0|      --m_position;
 2022|      0|      while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2022:13): [True: 0, False: 0]
  ------------------
 2023|      0|      fail(regex_constants::error_perl_extension, m_position - m_base);
 2024|      0|      return false;
 2025|      0|   }
 2026|       |   //
 2027|       |   // treat comments as a special case, as these
 2028|       |   // are the only ones that don't start with a leading
 2029|       |   // startmark state:
 2030|       |   //
 2031|  76.6k|   if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_hash)
  ------------------
  |  Branch (2031:7): [True: 0, False: 76.6k]
  ------------------
 2032|      0|   {
 2033|      0|      while((m_position != m_end) 
  ------------------
  |  Branch (2033:13): [True: 0, False: 0]
  ------------------
 2034|      0|         && (this->m_traits.syntax_type(*m_position++) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2034:13): [True: 0, False: 0]
  ------------------
 2035|      0|      {}
 2036|      0|      return true;
 2037|      0|   }
 2038|       |   //
 2039|       |   // backup some state, and prepare the way:
 2040|       |   //
 2041|  76.6k|   int markid = 0;
 2042|  76.6k|   std::ptrdiff_t jump_offset = 0;
 2043|  76.6k|   re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
 2044|  76.6k|   pb->icase = this->flags() & regbase::icase;
 2045|  76.6k|   std::ptrdiff_t last_paren_start = this->getoffset(pb);
 2046|       |   // back up insertion point for alternations, and set new point:
 2047|  76.6k|   std::ptrdiff_t last_alt_point = m_alt_insert_point;
 2048|  76.6k|   this->m_pdata->m_data.align();
 2049|  76.6k|   m_alt_insert_point = this->m_pdata->m_data.size();
 2050|  76.6k|   std::ptrdiff_t expected_alt_point = m_alt_insert_point;
 2051|  76.6k|   bool restore_flags = true;
 2052|  76.6k|   regex_constants::syntax_option_type old_flags = this->flags();
 2053|  76.6k|   bool old_case_change = m_has_case_change;
 2054|  76.6k|   m_has_case_change = false;
 2055|  76.6k|   charT name_delim;
 2056|  76.6k|   int mark_reset = m_mark_reset;
 2057|  76.6k|   int max_mark = m_max_mark;
 2058|  76.6k|   m_mark_reset = -1;
 2059|  76.6k|   m_max_mark = m_mark_count;
 2060|  76.6k|   std::intmax_t v;
 2061|       |   //
 2062|       |   // select the actual extension used:
 2063|       |   //
 2064|  76.6k|   switch(this->m_traits.syntax_type(*m_position))
 2065|  76.6k|   {
 2066|      0|   case regex_constants::syntax_or:
  ------------------
  |  Branch (2066:4): [True: 0, False: 76.6k]
  ------------------
 2067|      0|      m_mark_reset = m_mark_count;
 2068|      0|      BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
 2069|  76.6k|   case regex_constants::syntax_colon:
  ------------------
  |  Branch (2069:4): [True: 76.6k, False: 0]
  ------------------
 2070|       |      //
 2071|       |      // a non-capturing mark:
 2072|       |      //
 2073|  76.6k|      pb->index = markid = 0;
 2074|  76.6k|      ++m_position;
 2075|  76.6k|      break;
 2076|      0|   case regex_constants::syntax_digit:
  ------------------
  |  Branch (2076:4): [True: 0, False: 76.6k]
  ------------------
 2077|      0|      {
 2078|       |      //
 2079|       |      // a recursive subexpression:
 2080|       |      //
 2081|      0|      v = this->m_traits.toi(m_position, m_end, 10);
 2082|      0|      if((v < 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2082:10): [True: 0, False: 0]
  |  Branch (2082:21): [True: 0, False: 0]
  ------------------
 2083|      0|      {
 2084|       |         // Rewind to start of (? sequence:
 2085|      0|         --m_position;
 2086|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2086:16): [True: 0, False: 0]
  ------------------
 2087|      0|         fail(regex_constants::error_perl_extension, m_position - m_base, "The recursive sub-expression refers to an invalid marking group, or is unterminated.");
 2088|      0|         return false;
 2089|      0|      }
 2090|      0|insert_recursion:
 2091|      0|      pb->index = markid = 0;
 2092|      0|      re_recurse* pr = static_cast<re_recurse*>(this->append_state(syntax_element_recurse, sizeof(re_recurse)));
 2093|      0|      pr->alt.i = (std::ptrdiff_t)v;
 2094|      0|      pr->state_id = 0;
 2095|      0|      static_cast<re_case*>(
 2096|      0|            this->append_state(syntax_element_toggle_case, sizeof(re_case))
 2097|      0|            )->icase = this->flags() & regbase::icase;
 2098|      0|      break;
 2099|      0|      }
 2100|      0|   case regex_constants::syntax_plus:
  ------------------
  |  Branch (2100:4): [True: 0, False: 76.6k]
  ------------------
 2101|       |      //
 2102|       |      // A forward-relative recursive subexpression:
 2103|       |      //
 2104|      0|      ++m_position;
 2105|      0|      v = this->m_traits.toi(m_position, m_end, 10);
 2106|      0|      if((v <= 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2106:10): [True: 0, False: 0]
  |  Branch (2106:22): [True: 0, False: 0]
  ------------------
 2107|      0|      {
 2108|       |         // Rewind to start of (? sequence:
 2109|      0|         --m_position;
 2110|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2110:16): [True: 0, False: 0]
  ------------------
 2111|      0|         fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression.");
 2112|      0|         return false;
 2113|      0|      }
 2114|      0|      if ((std::numeric_limits<std::intmax_t>::max)() - m_mark_count < v)
  ------------------
  |  Branch (2114:11): [True: 0, False: 0]
  ------------------
 2115|      0|      {
 2116|      0|         fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression.");
 2117|      0|         return false;
 2118|      0|      }
 2119|      0|      v += m_mark_count;
 2120|      0|      goto insert_recursion;
 2121|      0|   case regex_constants::syntax_dash:
  ------------------
  |  Branch (2121:4): [True: 0, False: 76.6k]
  ------------------
 2122|       |      //
 2123|       |      // Possibly a backward-relative recursive subexpression:
 2124|       |      //
 2125|      0|      ++m_position;
 2126|      0|      v = this->m_traits.toi(m_position, m_end, 10);
 2127|      0|      if(v <= 0)
  ------------------
  |  Branch (2127:10): [True: 0, False: 0]
  ------------------
 2128|      0|      {
 2129|      0|         --m_position;
 2130|       |         // Oops not a relative recursion at all, but a (?-imsx) group:
 2131|      0|         goto option_group_jump;
 2132|      0|      }
 2133|      0|      v = static_cast<std::intmax_t>(m_mark_count) + 1 - v;
 2134|      0|      if(v <= 0)
  ------------------
  |  Branch (2134:10): [True: 0, False: 0]
  ------------------
 2135|      0|      {
 2136|       |         // Rewind to start of (? sequence:
 2137|      0|         --m_position;
 2138|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2138:16): [True: 0, False: 0]
  ------------------
 2139|      0|         fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression.");
 2140|      0|         return false;
 2141|      0|      }
 2142|      0|      goto insert_recursion;
 2143|      0|   case regex_constants::syntax_equal:
  ------------------
  |  Branch (2143:4): [True: 0, False: 76.6k]
  ------------------
 2144|      0|      pb->index = markid = -1;
 2145|      0|      ++m_position;
 2146|      0|      jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
 2147|      0|      this->m_pdata->m_data.align();
 2148|      0|      m_alt_insert_point = this->m_pdata->m_data.size();
 2149|      0|      break;
 2150|      0|   case regex_constants::syntax_not:
  ------------------
  |  Branch (2150:4): [True: 0, False: 76.6k]
  ------------------
 2151|      0|      pb->index = markid = -2;
 2152|      0|      ++m_position;
 2153|      0|      jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
 2154|      0|      this->m_pdata->m_data.align();
 2155|      0|      m_alt_insert_point = this->m_pdata->m_data.size();
 2156|      0|      break;
 2157|      0|   case regex_constants::escape_type_left_word:
  ------------------
  |  Branch (2157:4): [True: 0, False: 76.6k]
  ------------------
 2158|      0|      {
 2159|       |         // a lookbehind assertion:
 2160|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2160:13): [True: 0, False: 0]
  ------------------
 2161|      0|         {
 2162|       |            // Rewind to start of (? sequence:
 2163|      0|            --m_position;
 2164|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2164:19): [True: 0, False: 0]
  ------------------
 2165|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2166|      0|            return false;
 2167|      0|         }
 2168|      0|         regex_constants::syntax_type t = this->m_traits.syntax_type(*m_position);
 2169|      0|         if(t == regex_constants::syntax_not)
  ------------------
  |  Branch (2169:13): [True: 0, False: 0]
  ------------------
 2170|      0|            pb->index = markid = -2;
 2171|      0|         else if(t == regex_constants::syntax_equal)
  ------------------
  |  Branch (2171:18): [True: 0, False: 0]
  ------------------
 2172|      0|            pb->index = markid = -1;
 2173|      0|         else
 2174|      0|         {
 2175|       |            // Probably a named capture which also starts (?< :
 2176|      0|            name_delim = '>';
 2177|      0|            --m_position;
 2178|      0|            goto named_capture_jump;
 2179|      0|         }
 2180|      0|         ++m_position;
 2181|      0|         jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
 2182|      0|         this->append_state(syntax_element_backstep, sizeof(re_brace));
 2183|      0|         this->m_pdata->m_data.align();
 2184|      0|         m_alt_insert_point = this->m_pdata->m_data.size();
 2185|      0|         break;
 2186|      0|      }
 2187|      0|   case regex_constants::escape_type_right_word:
  ------------------
  |  Branch (2187:4): [True: 0, False: 76.6k]
  ------------------
 2188|       |      //
 2189|       |      // an independent sub-expression:
 2190|       |      //
 2191|      0|      pb->index = markid = -3;
 2192|      0|      ++m_position;
 2193|      0|      jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump)));
 2194|      0|      this->m_pdata->m_data.align();
 2195|      0|      m_alt_insert_point = this->m_pdata->m_data.size();
 2196|      0|      break;
 2197|      0|   case regex_constants::syntax_open_mark:
  ------------------
  |  Branch (2197:4): [True: 0, False: 76.6k]
  ------------------
 2198|      0|      {
 2199|       |      // a conditional expression:
 2200|      0|      pb->index = markid = -4;
 2201|      0|      if(++m_position == m_end)
  ------------------
  |  Branch (2201:10): [True: 0, False: 0]
  ------------------
 2202|      0|      {
 2203|       |         // Rewind to start of (? sequence:
 2204|      0|         --m_position;
 2205|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2205:16): [True: 0, False: 0]
  ------------------
 2206|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2207|      0|         return false;
 2208|      0|      }
 2209|      0|      v = this->m_traits.toi(m_position, m_end, 10);
 2210|      0|      if(m_position == m_end)
  ------------------
  |  Branch (2210:10): [True: 0, False: 0]
  ------------------
 2211|      0|      {
 2212|       |         // Rewind to start of (? sequence:
 2213|      0|         --m_position;
 2214|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2214:16): [True: 0, False: 0]
  ------------------
 2215|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2216|      0|         return false;
 2217|      0|      }
 2218|      0|      if(*m_position == charT('R'))
  ------------------
  |  Branch (2218:10): [True: 0, False: 0]
  ------------------
 2219|      0|      {
 2220|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2220:13): [True: 0, False: 0]
  ------------------
 2221|      0|         {
 2222|       |            // Rewind to start of (? sequence:
 2223|      0|            --m_position;
 2224|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2224:19): [True: 0, False: 0]
  ------------------
 2225|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2226|      0|            return false;
 2227|      0|         }
 2228|      0|         if(*m_position == charT('&'))
  ------------------
  |  Branch (2228:13): [True: 0, False: 0]
  ------------------
 2229|      0|         {
 2230|      0|            const charT* base = ++m_position;
 2231|      0|            while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2231:19): [True: 0, False: 0]
  |  Branch (2231:44): [True: 0, False: 0]
  ------------------
 2232|      0|               ++m_position;
 2233|      0|            if(m_position == m_end)
  ------------------
  |  Branch (2233:16): [True: 0, False: 0]
  ------------------
 2234|      0|            {
 2235|       |               // Rewind to start of (? sequence:
 2236|      0|               --m_position;
 2237|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2237:22): [True: 0, False: 0]
  ------------------
 2238|      0|               fail(regex_constants::error_perl_extension, m_position - m_base);
 2239|      0|               return false;
 2240|      0|            }
 2241|      0|            v = -static_cast<int>(hash_value_from_capture_name(base, m_position));
 2242|      0|         }
 2243|      0|         else
 2244|      0|         {
 2245|      0|            v = -this->m_traits.toi(m_position, m_end, 10);
 2246|      0|         }
 2247|      0|         re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace)));
 2248|      0|         br->index = v < 0 ? (int)(v - 1) : 0;
  ------------------
  |  Branch (2248:22): [True: 0, False: 0]
  ------------------
 2249|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2249:13): [True: 0, False: 0]
  ------------------
 2250|      0|         {
 2251|       |            // Rewind to start of (? sequence:
 2252|      0|            --m_position;
 2253|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2253:19): [True: 0, False: 0]
  ------------------
 2254|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2255|      0|            return false;
 2256|      0|         }
 2257|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2257:13): [True: 0, False: 0]
  ------------------
 2258|      0|         {
 2259|       |            // Rewind to start of (? sequence:
 2260|      0|            --m_position;
 2261|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2261:19): [True: 0, False: 0]
  ------------------
 2262|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2263|      0|            return false;
 2264|      0|         }
 2265|      0|      }
 2266|      0|      else if((*m_position == charT('\'')) || (*m_position == charT('<')))
  ------------------
  |  Branch (2266:15): [True: 0, False: 0]
  |  Branch (2266:47): [True: 0, False: 0]
  ------------------
 2267|      0|      {
 2268|      0|         const charT* base = ++m_position;
 2269|      0|         while((m_position != m_end) && (*m_position != charT('>')) && (*m_position != charT('\'')))
  ------------------
  |  Branch (2269:16): [True: 0, False: 0]
  |  Branch (2269:41): [True: 0, False: 0]
  |  Branch (2269:72): [True: 0, False: 0]
  ------------------
 2270|      0|            ++m_position;
 2271|      0|         if(m_position == m_end)
  ------------------
  |  Branch (2271:13): [True: 0, False: 0]
  ------------------
 2272|      0|         {
 2273|       |            // Rewind to start of (? sequence:
 2274|      0|            --m_position;
 2275|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2275:19): [True: 0, False: 0]
  ------------------
 2276|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2277|      0|            return false;
 2278|      0|         }
 2279|      0|         v = static_cast<int>(hash_value_from_capture_name(base, m_position));
 2280|      0|         re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace)));
 2281|      0|         br->index = (int)v;
 2282|      0|         if(((*m_position != charT('>')) && (*m_position != charT('\''))) || (++m_position == m_end))
  ------------------
  |  Branch (2282:14): [True: 0, False: 0]
  |  Branch (2282:45): [True: 0, False: 0]
  |  Branch (2282:78): [True: 0, False: 0]
  ------------------
 2283|      0|         {
 2284|       |            // Rewind to start of (? sequence:
 2285|      0|            --m_position;
 2286|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2286:19): [True: 0, False: 0]
  ------------------
 2287|      0|            fail(regex_constants::error_perl_extension, m_position - m_base, "Unterminated named capture.");
 2288|      0|            return false;
 2289|      0|         }
 2290|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2290:13): [True: 0, False: 0]
  ------------------
 2291|      0|         {
 2292|       |            // Rewind to start of (? sequence:
 2293|      0|            --m_position;
 2294|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2294:19): [True: 0, False: 0]
  ------------------
 2295|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2296|      0|            return false;
 2297|      0|         }
 2298|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2298:13): [True: 0, False: 0]
  ------------------
 2299|      0|         {
 2300|       |            // Rewind to start of (? sequence:
 2301|      0|            --m_position;
 2302|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2302:19): [True: 0, False: 0]
  ------------------
 2303|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2304|      0|            return false;
 2305|      0|         }
 2306|      0|      }
 2307|      0|      else if(*m_position == charT('D'))
  ------------------
  |  Branch (2307:15): [True: 0, False: 0]
  ------------------
 2308|      0|      {
 2309|      0|         const char* def = "DEFINE";
 2310|      0|         while(*def && (m_position != m_end) && (*m_position == charT(*def)))
  ------------------
  |  Branch (2310:16): [True: 0, False: 0]
  |  Branch (2310:24): [True: 0, False: 0]
  |  Branch (2310:49): [True: 0, False: 0]
  ------------------
 2311|      0|            ++m_position, ++def;
 2312|      0|         if((m_position == m_end) || *def)
  ------------------
  |  Branch (2312:13): [True: 0, False: 0]
  |  Branch (2312:38): [True: 0, False: 0]
  ------------------
 2313|      0|         {
 2314|       |            // Rewind to start of (? sequence:
 2315|      0|            --m_position;
 2316|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2316:19): [True: 0, False: 0]
  ------------------
 2317|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2318|      0|            return false;
 2319|      0|         }
 2320|      0|         re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace)));
 2321|      0|         br->index = 9999; // special magic value!
 2322|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2322:13): [True: 0, False: 0]
  ------------------
 2323|      0|         {
 2324|       |            // Rewind to start of (? sequence:
 2325|      0|            --m_position;
 2326|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2326:19): [True: 0, False: 0]
  ------------------
 2327|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2328|      0|            return false;
 2329|      0|         }
 2330|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2330:13): [True: 0, False: 0]
  ------------------
 2331|      0|         {
 2332|       |            // Rewind to start of (? sequence:
 2333|      0|            --m_position;
 2334|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2334:19): [True: 0, False: 0]
  ------------------
 2335|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2336|      0|            return false;
 2337|      0|         }
 2338|      0|      }
 2339|      0|      else if(v > 0)
  ------------------
  |  Branch (2339:15): [True: 0, False: 0]
  ------------------
 2340|      0|      {
 2341|      0|         re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace)));
 2342|      0|         br->index = (int)v;
 2343|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2343:13): [True: 0, False: 0]
  ------------------
 2344|      0|         {
 2345|       |            // Rewind to start of (? sequence:
 2346|      0|            --m_position;
 2347|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2347:19): [True: 0, False: 0]
  ------------------
 2348|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2349|      0|            return false;
 2350|      0|         }
 2351|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2351:13): [True: 0, False: 0]
  ------------------
 2352|      0|         {
 2353|       |            // Rewind to start of (? sequence:
 2354|      0|            --m_position;
 2355|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2355:19): [True: 0, False: 0]
  ------------------
 2356|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2357|      0|            return false;
 2358|      0|         }
 2359|      0|      }
 2360|      0|      else
 2361|      0|      {
 2362|       |         // verify that we have a lookahead or lookbehind assert:
 2363|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_question)
  ------------------
  |  Branch (2363:13): [True: 0, False: 0]
  ------------------
 2364|      0|         {
 2365|       |            // Rewind to start of (? sequence:
 2366|      0|            --m_position;
 2367|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2367:19): [True: 0, False: 0]
  ------------------
 2368|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2369|      0|            return false;
 2370|      0|         }
 2371|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (2371:13): [True: 0, False: 0]
  ------------------
 2372|      0|         {
 2373|       |            // Rewind to start of (? sequence:
 2374|      0|            --m_position;
 2375|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2375:19): [True: 0, False: 0]
  ------------------
 2376|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2377|      0|            return false;
 2378|      0|         }
 2379|      0|         if(this->m_traits.syntax_type(*m_position) == regex_constants::escape_type_left_word)
  ------------------
  |  Branch (2379:13): [True: 0, False: 0]
  ------------------
 2380|      0|         {
 2381|      0|            if(++m_position == m_end)
  ------------------
  |  Branch (2381:16): [True: 0, False: 0]
  ------------------
 2382|      0|            {
 2383|       |               // Rewind to start of (? sequence:
 2384|      0|               --m_position;
 2385|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2385:22): [True: 0, False: 0]
  ------------------
 2386|      0|               fail(regex_constants::error_perl_extension, m_position - m_base);
 2387|      0|               return false;
 2388|      0|            }
 2389|      0|            if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)
  ------------------
  |  Branch (2389:16): [True: 0, False: 0]
  ------------------
 2390|      0|               && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not))
  ------------------
  |  Branch (2390:19): [True: 0, False: 0]
  ------------------
 2391|      0|            {
 2392|       |               // Rewind to start of (? sequence:
 2393|      0|               --m_position;
 2394|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2394:22): [True: 0, False: 0]
  ------------------
 2395|      0|               fail(regex_constants::error_perl_extension, m_position - m_base);
 2396|      0|               return false;
 2397|      0|            }
 2398|      0|            m_position -= 3;
 2399|      0|         }
 2400|      0|         else
 2401|      0|         {
 2402|      0|            if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)
  ------------------
  |  Branch (2402:16): [True: 0, False: 0]
  ------------------
 2403|      0|               && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not))
  ------------------
  |  Branch (2403:19): [True: 0, False: 0]
  ------------------
 2404|      0|            {
 2405|       |               // Rewind to start of (? sequence:
 2406|      0|               --m_position;
 2407|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2407:22): [True: 0, False: 0]
  ------------------
 2408|      0|               fail(regex_constants::error_perl_extension, m_position - m_base);
 2409|      0|               return false;
 2410|      0|            }
 2411|      0|            m_position -= 2;
 2412|      0|         }
 2413|      0|      }
 2414|      0|      break;
 2415|      0|      }
 2416|      0|   case regex_constants::syntax_close_mark:
  ------------------
  |  Branch (2416:4): [True: 0, False: 76.6k]
  ------------------
 2417|       |      // Rewind to start of (? sequence:
 2418|      0|      --m_position;
 2419|      0|      while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2419:13): [True: 0, False: 0]
  ------------------
 2420|      0|      fail(regex_constants::error_perl_extension, m_position - m_base);
 2421|      0|      return false;
 2422|      0|   case regex_constants::escape_type_end_buffer:
  ------------------
  |  Branch (2422:4): [True: 0, False: 76.6k]
  ------------------
 2423|      0|      {
 2424|      0|      name_delim = *m_position;
 2425|      0|named_capture_jump:
 2426|      0|      markid = 0;
 2427|      0|      if(0 == (this->flags() & regbase::nosubs))
  ------------------
  |  Branch (2427:10): [True: 0, False: 0]
  ------------------
 2428|      0|      {
 2429|      0|         markid = ++m_mark_count;
 2430|      0|         if(this->flags() & regbase::save_subexpression_location)
  ------------------
  |  Branch (2430:13): [True: 0, False: 0]
  ------------------
 2431|      0|            this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>(std::distance(m_base, m_position) - 2, 0));
 2432|      0|      }
 2433|      0|      pb->index = markid;
 2434|      0|      const charT* base = ++m_position;
 2435|      0|      if(m_position == m_end)
  ------------------
  |  Branch (2435:10): [True: 0, False: 0]
  ------------------
 2436|      0|      {
 2437|       |         // Rewind to start of (? sequence:
 2438|      0|         --m_position;
 2439|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2439:16): [True: 0, False: 0]
  ------------------
 2440|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2441|      0|         return false;
 2442|      0|      }
 2443|      0|      while((m_position != m_end) && (*m_position != name_delim))
  ------------------
  |  Branch (2443:13): [True: 0, False: 0]
  |  Branch (2443:38): [True: 0, False: 0]
  ------------------
 2444|      0|         ++m_position;
 2445|      0|      if(m_position == m_end)
  ------------------
  |  Branch (2445:10): [True: 0, False: 0]
  ------------------
 2446|      0|      {
 2447|       |         // Rewind to start of (? sequence:
 2448|      0|         --m_position;
 2449|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2449:16): [True: 0, False: 0]
  ------------------
 2450|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2451|      0|         return false;
 2452|      0|      }
 2453|      0|      this->m_pdata->set_name(base, m_position, markid);
 2454|      0|      ++m_position;
 2455|      0|      break;
 2456|      0|      }
 2457|      0|   default:
  ------------------
  |  Branch (2457:4): [True: 0, False: 76.6k]
  ------------------
 2458|      0|      if(*m_position == charT('R'))
  ------------------
  |  Branch (2458:10): [True: 0, False: 0]
  ------------------
 2459|      0|      {
 2460|      0|         ++m_position;
 2461|      0|         v = 0;
 2462|      0|         if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2462:13): [True: 0, False: 0]
  ------------------
 2463|      0|         {
 2464|       |            // Rewind to start of (? sequence:
 2465|      0|            --m_position;
 2466|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2466:19): [True: 0, False: 0]
  ------------------
 2467|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2468|      0|            return false;
 2469|      0|         }
 2470|      0|         goto insert_recursion;
 2471|      0|      }
 2472|      0|      if(*m_position == charT('&'))
  ------------------
  |  Branch (2472:10): [True: 0, False: 0]
  ------------------
 2473|      0|      {
 2474|      0|         ++m_position;
 2475|      0|         const charT* base = m_position;
 2476|      0|         while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2476:16): [True: 0, False: 0]
  |  Branch (2476:41): [True: 0, False: 0]
  ------------------
 2477|      0|            ++m_position;
 2478|      0|         if(m_position == m_end)
  ------------------
  |  Branch (2478:13): [True: 0, False: 0]
  ------------------
 2479|      0|         {
 2480|       |            // Rewind to start of (? sequence:
 2481|      0|            --m_position;
 2482|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2482:19): [True: 0, False: 0]
  ------------------
 2483|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2484|      0|            return false;
 2485|      0|         }
 2486|      0|         v = static_cast<int>(hash_value_from_capture_name(base, m_position));
 2487|      0|         goto insert_recursion;
 2488|      0|      }
 2489|      0|      if(*m_position == charT('P'))
  ------------------
  |  Branch (2489:10): [True: 0, False: 0]
  ------------------
 2490|      0|      {
 2491|      0|         ++m_position;
 2492|      0|         if(m_position == m_end)
  ------------------
  |  Branch (2492:13): [True: 0, False: 0]
  ------------------
 2493|      0|         {
 2494|       |            // Rewind to start of (? sequence:
 2495|      0|            --m_position;
 2496|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2496:19): [True: 0, False: 0]
  ------------------
 2497|      0|            fail(regex_constants::error_perl_extension, m_position - m_base);
 2498|      0|            return false;
 2499|      0|         }
 2500|      0|         if(*m_position == charT('>'))
  ------------------
  |  Branch (2500:13): [True: 0, False: 0]
  ------------------
 2501|      0|         {
 2502|      0|            ++m_position;
 2503|      0|            const charT* base = m_position;
 2504|      0|            while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark))
  ------------------
  |  Branch (2504:19): [True: 0, False: 0]
  |  Branch (2504:44): [True: 0, False: 0]
  ------------------
 2505|      0|               ++m_position;
 2506|      0|            if(m_position == m_end)
  ------------------
  |  Branch (2506:16): [True: 0, False: 0]
  ------------------
 2507|      0|            {
 2508|       |               // Rewind to start of (? sequence:
 2509|      0|               --m_position;
 2510|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2510:22): [True: 0, False: 0]
  ------------------
 2511|      0|               fail(regex_constants::error_perl_extension, m_position - m_base);
 2512|      0|               return false;
 2513|      0|            }
 2514|      0|            v = static_cast<int>(hash_value_from_capture_name(base, m_position));
 2515|      0|            goto insert_recursion;
 2516|      0|         }
 2517|      0|      }
 2518|       |      //
 2519|       |      // lets assume that we have a (?imsx) group and try and parse it:
 2520|       |      //
 2521|      0|option_group_jump:
 2522|      0|      regex_constants::syntax_option_type opts = parse_options();
 2523|      0|      if(m_position == m_end)
  ------------------
  |  Branch (2523:10): [True: 0, False: 0]
  ------------------
 2524|      0|      {
 2525|       |         // Rewind to start of (? sequence:
 2526|      0|         --m_position;
 2527|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2527:16): [True: 0, False: 0]
  ------------------
 2528|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2529|      0|         return false;
 2530|      0|      }
 2531|       |      // make a note of whether we have a case change:
 2532|      0|      m_has_case_change = ((opts & regbase::icase) != (this->flags() & regbase::icase));
 2533|      0|      pb->index = markid = 0;
 2534|      0|      if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark)
  ------------------
  |  Branch (2534:10): [True: 0, False: 0]
  ------------------
 2535|      0|      {
 2536|       |         // update flags and carry on as normal:
 2537|      0|         this->flags(opts);
 2538|      0|         restore_flags = false;
 2539|      0|         old_case_change |= m_has_case_change; // defer end of scope by one ')'
 2540|      0|      }
 2541|      0|      else if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_colon)
  ------------------
  |  Branch (2541:15): [True: 0, False: 0]
  ------------------
 2542|      0|      {
 2543|       |         // update flags and carry on until the matching ')' is found:
 2544|      0|         this->flags(opts);
 2545|      0|         ++m_position;
 2546|      0|      }
 2547|      0|      else
 2548|      0|      {
 2549|       |         // Rewind to start of (? sequence:
 2550|      0|         --m_position;
 2551|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2551:16): [True: 0, False: 0]
  ------------------
 2552|      0|         fail(regex_constants::error_perl_extension, m_position - m_base);
 2553|      0|         return false;
 2554|      0|      }
 2555|       |
 2556|       |      // finally append a case change state if we need it:
 2557|      0|      if(m_has_case_change)
  ------------------
  |  Branch (2557:10): [True: 0, False: 0]
  ------------------
 2558|      0|      {
 2559|      0|         static_cast<re_case*>(
 2560|      0|            this->append_state(syntax_element_toggle_case, sizeof(re_case))
 2561|      0|            )->icase = opts & regbase::icase;
 2562|      0|      }
 2563|       |
 2564|  76.6k|   }
 2565|       |   //
 2566|       |   // now recursively add more states, this will terminate when we get to a
 2567|       |   // matching ')' :
 2568|       |   //
 2569|  76.6k|   parse_all();
 2570|       |   //
 2571|       |   // Unwind alternatives:
 2572|       |   //
 2573|  76.6k|   if(0 == unwind_alts(last_paren_start))
  ------------------
  |  Branch (2573:7): [True: 0, False: 76.6k]
  ------------------
 2574|      0|   {
 2575|       |      // Rewind to start of (? sequence:
 2576|      0|      --m_position;
 2577|      0|      while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2577:13): [True: 0, False: 0]
  ------------------
 2578|      0|      fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid alternation operators within (?...) block.");
 2579|      0|      return false;
 2580|      0|   }
 2581|       |   //
 2582|       |   // we either have a ')' or we have run out of characters prematurely:
 2583|       |   //
 2584|  76.6k|   if(m_position == m_end)
  ------------------
  |  Branch (2584:7): [True: 0, False: 76.6k]
  ------------------
 2585|      0|   {
 2586|       |      // Rewind to start of (? sequence:
 2587|      0|      --m_position;
 2588|      0|      while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2588:13): [True: 0, False: 0]
  ------------------
 2589|      0|      this->fail(regex_constants::error_paren, std::distance(m_base, m_end));
 2590|      0|      return false;
 2591|      0|   }
 2592|  76.6k|   BOOST_REGEX_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark);
  ------------------
  |  |   58|  76.6k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  76.6k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 2593|  76.6k|   ++m_position;
 2594|       |   //
 2595|       |   // restore the flags:
 2596|       |   //
 2597|  76.6k|   if(restore_flags)
  ------------------
  |  Branch (2597:7): [True: 76.6k, False: 0]
  ------------------
 2598|  76.6k|   {
 2599|       |      // append a case change state if we need it:
 2600|  76.6k|      if(m_has_case_change)
  ------------------
  |  Branch (2600:10): [True: 0, False: 76.6k]
  ------------------
 2601|      0|      {
 2602|      0|         static_cast<re_case*>(
 2603|      0|            this->append_state(syntax_element_toggle_case, sizeof(re_case))
 2604|      0|            )->icase = old_flags & regbase::icase;
 2605|      0|      }
 2606|  76.6k|      this->flags(old_flags);
 2607|  76.6k|   }
 2608|       |   //
 2609|       |   // set up the jump pointer if we have one:
 2610|       |   //
 2611|  76.6k|   if(jump_offset)
  ------------------
  |  Branch (2611:7): [True: 0, False: 76.6k]
  ------------------
 2612|      0|   {
 2613|      0|      this->m_pdata->m_data.align();
 2614|      0|      re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset));
 2615|      0|      jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp);
 2616|      0|      if((this->m_last_state == jmp) && (markid != -2))
  ------------------
  |  Branch (2616:10): [True: 0, False: 0]
  |  Branch (2616:41): [True: 0, False: 0]
  ------------------
 2617|      0|      {
 2618|       |         // Oops... we didn't have anything inside the assertion.
 2619|       |         // Note we don't get here for negated forward lookahead as (?!)
 2620|       |         // does have some uses.
 2621|       |         // Rewind to start of (? sequence:
 2622|      0|         --m_position;
 2623|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2623:16): [True: 0, False: 0]
  ------------------
 2624|      0|         fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid or empty zero width assertion.");
 2625|      0|         return false;
 2626|      0|      }
 2627|      0|   }
 2628|       |   //
 2629|       |   // verify that if this is conditional expression, that we do have
 2630|       |   // an alternative, if not add one:
 2631|       |   //
 2632|  76.6k|   if(markid == -4)
  ------------------
  |  Branch (2632:7): [True: 0, False: 76.6k]
  ------------------
 2633|      0|   {
 2634|      0|      re_syntax_base* b = this->getaddress(expected_alt_point);
 2635|       |      // Make sure we have exactly one alternative following this state:
 2636|      0|      if(b->type != syntax_element_alt)
  ------------------
  |  Branch (2636:10): [True: 0, False: 0]
  ------------------
 2637|      0|      {
 2638|      0|         re_alt* alt = static_cast<re_alt*>(this->insert_state(expected_alt_point, syntax_element_alt, sizeof(re_alt)));
 2639|      0|         alt->alt.i = this->m_pdata->m_data.size() - this->getoffset(alt);
 2640|      0|      }
 2641|      0|      else if(((std::ptrdiff_t)this->m_pdata->m_data.size() > (static_cast<re_alt*>(b)->alt.i + this->getoffset(b))) && (static_cast<re_alt*>(b)->alt.i > 0) && this->getaddress(static_cast<re_alt*>(b)->alt.i, b)->type == syntax_element_alt)
  ------------------
  |  Branch (2641:15): [True: 0, False: 0]
  |  Branch (2641:121): [True: 0, False: 0]
  |  Branch (2641:161): [True: 0, False: 0]
  ------------------
 2642|      0|      {
 2643|       |         // Can't have seen more than one alternative:
 2644|       |         // Rewind to start of (? sequence:
 2645|      0|         --m_position;
 2646|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2646:16): [True: 0, False: 0]
  ------------------
 2647|      0|         fail(regex_constants::error_bad_pattern, m_position - m_base, "More than one alternation operator | was encountered inside a conditional expression.");
 2648|      0|         return false;
 2649|      0|      }
 2650|      0|      else
 2651|      0|      {
 2652|       |         // We must *not* have seen an alternative inside a (DEFINE) block:
 2653|      0|         b = this->getaddress(b->next.i, b);
 2654|      0|         if((b->type == syntax_element_assert_backref) && (static_cast<re_brace*>(b)->index == 9999))
  ------------------
  |  Branch (2654:13): [True: 0, False: 0]
  |  Branch (2654:59): [True: 0, False: 0]
  ------------------
 2655|      0|         {
 2656|       |            // Rewind to start of (? sequence:
 2657|      0|            --m_position;
 2658|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2658:19): [True: 0, False: 0]
  ------------------
 2659|      0|            fail(regex_constants::error_bad_pattern, m_position - m_base, "Alternation operators are not allowed inside a DEFINE block.");
 2660|      0|            return false;
 2661|      0|         }
 2662|      0|      }
 2663|       |      // check for invalid repetition of next state:
 2664|      0|      b = this->getaddress(expected_alt_point);
 2665|      0|      b = this->getaddress(static_cast<re_alt*>(b)->next.i, b);
 2666|      0|      if((b->type != syntax_element_assert_backref)
  ------------------
  |  Branch (2666:10): [True: 0, False: 0]
  ------------------
 2667|      0|         && (b->type != syntax_element_startmark))
  ------------------
  |  Branch (2667:13): [True: 0, False: 0]
  ------------------
 2668|      0|      {
 2669|       |         // Rewind to start of (? sequence:
 2670|      0|         --m_position;
 2671|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position;
  ------------------
  |  Branch (2671:16): [True: 0, False: 0]
  ------------------
 2672|      0|         fail(regex_constants::error_badrepeat, m_position - m_base, "A repetition operator cannot be applied to a zero-width assertion.");
 2673|      0|         return false;
 2674|      0|      }
 2675|      0|   }
 2676|       |   //
 2677|       |   // append closing parenthesis state:
 2678|       |   //
 2679|  76.6k|   pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace)));
 2680|  76.6k|   pb->index = markid;
 2681|  76.6k|   pb->icase = this->flags() & regbase::icase;
 2682|  76.6k|   this->m_paren_start = last_paren_start;
 2683|       |   //
 2684|       |   // restore the alternate insertion point:
 2685|       |   //
 2686|  76.6k|   this->m_alt_insert_point = last_alt_point;
 2687|       |   //
 2688|       |   // and the case change data:
 2689|       |   //
 2690|  76.6k|   m_has_case_change = old_case_change;
 2691|       |   //
 2692|       |   // And the mark_reset data:
 2693|       |   //
 2694|  76.6k|   if(m_max_mark > m_mark_count)
  ------------------
  |  Branch (2694:7): [True: 0, False: 76.6k]
  ------------------
 2695|      0|   {
 2696|      0|      m_mark_count = m_max_mark;
 2697|      0|   }
 2698|  76.6k|   m_mark_reset = mark_reset;
 2699|  76.6k|   m_max_mark = max_mark;
 2700|       |
 2701|       |
 2702|  76.6k|   if(markid > 0)
  ------------------
  |  Branch (2702:7): [True: 0, False: 76.6k]
  ------------------
 2703|      0|   {
 2704|      0|      if(this->flags() & regbase::save_subexpression_location)
  ------------------
  |  Branch (2704:10): [True: 0, False: 0]
  ------------------
 2705|      0|         this->m_pdata->m_subs.at((std::size_t)markid - 1).second = std::distance(m_base, m_position) - 1;
 2706|      0|   }
 2707|  76.6k|   return true;
 2708|  76.6k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE21parse_extended_escapeEv:
  692|  86.2k|{
  693|  86.2k|   ++m_position;
  694|  86.2k|   if(m_position == m_end)
  ------------------
  |  Branch (694:7): [True: 0, False: 86.2k]
  ------------------
  695|      0|   {
  696|      0|      fail(regex_constants::error_escape, m_position - m_base, "Incomplete escape sequence found.");
  697|      0|      return false;
  698|      0|   }
  699|  86.2k|   bool negate = false; // in case this is a character class escape: \w \d etc
  700|  86.2k|   switch(this->m_traits.escape_syntax_type(*m_position))
  701|  86.2k|   {
  702|      0|   case regex_constants::escape_type_not_class:
  ------------------
  |  Branch (702:4): [True: 0, False: 86.2k]
  ------------------
  703|      0|      negate = true;
  704|      0|      BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  705|  23.9k|   case regex_constants::escape_type_class:
  ------------------
  |  Branch (705:4): [True: 23.9k, False: 62.2k]
  ------------------
  706|  23.9k|      {
  707|  23.9k|escape_type_class_jump:
  708|  23.9k|         typedef typename traits::char_class_type m_type;
  709|  23.9k|         m_type m = this->m_traits.lookup_classname(m_position, m_position+1);
  710|  23.9k|         if(m != 0)
  ------------------
  |  Branch (710:13): [True: 23.9k, False: 0]
  ------------------
  711|  23.9k|         {
  712|  23.9k|            basic_char_set<charT, traits> char_set;
  713|  23.9k|            if(negate)
  ------------------
  |  Branch (713:16): [True: 0, False: 23.9k]
  ------------------
  714|      0|               char_set.negate();
  715|  23.9k|            char_set.add_class(m);
  716|  23.9k|            if(0 == this->append_set(char_set))
  ------------------
  |  Branch (716:16): [True: 0, False: 23.9k]
  ------------------
  717|      0|            {
  718|      0|               fail(regex_constants::error_ctype, m_position - m_base);
  719|      0|               return false;
  720|      0|            }
  721|  23.9k|            ++m_position;
  722|  23.9k|            return true;
  723|  23.9k|         }
  724|       |         //
  725|       |         // not a class, just a regular unknown escape:
  726|       |         //
  727|      0|         this->append_literal(unescape_character());
  728|      0|         break;
  729|  23.9k|      }
  730|      0|   case regex_constants::syntax_digit:
  ------------------
  |  Branch (730:4): [True: 0, False: 86.2k]
  ------------------
  731|      0|      return parse_backref();
  732|      0|   case regex_constants::escape_type_left_word:
  ------------------
  |  Branch (732:4): [True: 0, False: 86.2k]
  ------------------
  733|      0|      ++m_position;
  734|      0|      this->append_state(syntax_element_word_start);
  735|      0|      break;
  736|      0|   case regex_constants::escape_type_right_word:
  ------------------
  |  Branch (736:4): [True: 0, False: 86.2k]
  ------------------
  737|      0|      ++m_position;
  738|      0|      this->append_state(syntax_element_word_end);
  739|      0|      break;
  740|  33.5k|   case regex_constants::escape_type_start_buffer:
  ------------------
  |  Branch (740:4): [True: 33.5k, False: 52.7k]
  ------------------
  741|  33.5k|      ++m_position;
  742|  33.5k|      this->append_state(syntax_element_buffer_start);
  743|  33.5k|      break;
  744|      0|   case regex_constants::escape_type_end_buffer:
  ------------------
  |  Branch (744:4): [True: 0, False: 86.2k]
  ------------------
  745|      0|      ++m_position;
  746|      0|      this->append_state(syntax_element_buffer_end);
  747|      0|      break;
  748|      0|   case regex_constants::escape_type_word_assert:
  ------------------
  |  Branch (748:4): [True: 0, False: 86.2k]
  ------------------
  749|      0|      ++m_position;
  750|      0|      this->append_state(syntax_element_word_boundary);
  751|      0|      break;
  752|      0|   case regex_constants::escape_type_not_word_assert:
  ------------------
  |  Branch (752:4): [True: 0, False: 86.2k]
  ------------------
  753|      0|      ++m_position;
  754|      0|      this->append_state(syntax_element_within_word);
  755|      0|      break;
  756|      0|   case regex_constants::escape_type_Z:
  ------------------
  |  Branch (756:4): [True: 0, False: 86.2k]
  ------------------
  757|      0|      ++m_position;
  758|      0|      this->append_state(syntax_element_soft_buffer_end);
  759|      0|      break;
  760|  9.58k|   case regex_constants::escape_type_Q:
  ------------------
  |  Branch (760:4): [True: 9.58k, False: 76.6k]
  ------------------
  761|  9.58k|      return parse_QE();
  762|      0|   case regex_constants::escape_type_C:
  ------------------
  |  Branch (762:4): [True: 0, False: 86.2k]
  ------------------
  763|      0|      return parse_match_any();
  764|      0|   case regex_constants::escape_type_X:
  ------------------
  |  Branch (764:4): [True: 0, False: 86.2k]
  ------------------
  765|      0|      ++m_position;
  766|      0|      this->append_state(syntax_element_combining);
  767|      0|      break;
  768|      0|   case regex_constants::escape_type_G:
  ------------------
  |  Branch (768:4): [True: 0, False: 86.2k]
  ------------------
  769|      0|      ++m_position;
  770|      0|      this->append_state(syntax_element_restart_continue);
  771|      0|      break;
  772|      0|   case regex_constants::escape_type_not_property:
  ------------------
  |  Branch (772:4): [True: 0, False: 86.2k]
  ------------------
  773|      0|      negate = true;
  774|      0|      BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  775|      0|   case regex_constants::escape_type_property:
  ------------------
  |  Branch (775:4): [True: 0, False: 86.2k]
  ------------------
  776|      0|      {
  777|      0|         ++m_position;
  778|      0|         char_class_type m;
  779|      0|         if(m_position == m_end)
  ------------------
  |  Branch (779:13): [True: 0, False: 0]
  ------------------
  780|      0|         {
  781|      0|            fail(regex_constants::error_escape, m_position - m_base, "Incomplete property escape found.");
  782|      0|            return false;
  783|      0|         }
  784|       |         // maybe have \p{ddd}
  785|      0|         if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
  ------------------
  |  Branch (785:13): [True: 0, False: 0]
  ------------------
  786|      0|         {
  787|      0|            const charT* base = m_position;
  788|       |            // skip forward until we find enclosing brace:
  789|      0|            while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
  ------------------
  |  Branch (789:19): [True: 0, False: 0]
  |  Branch (789:44): [True: 0, False: 0]
  ------------------
  790|      0|               ++m_position;
  791|      0|            if(m_position == m_end)
  ------------------
  |  Branch (791:16): [True: 0, False: 0]
  ------------------
  792|      0|            {
  793|      0|               fail(regex_constants::error_escape, m_position - m_base, "Closing } missing from property escape sequence.");
  794|      0|               return false;
  795|      0|            }
  796|      0|            m = this->m_traits.lookup_classname(++base, m_position++);
  797|      0|         }
  798|      0|         else
  799|      0|         {
  800|      0|            m = this->m_traits.lookup_classname(m_position, m_position+1);
  801|      0|            ++m_position;
  802|      0|         }
  803|      0|         if(m != 0)
  ------------------
  |  Branch (803:13): [True: 0, False: 0]
  ------------------
  804|      0|         {
  805|      0|            basic_char_set<charT, traits> char_set;
  806|      0|            if(negate)
  ------------------
  |  Branch (806:16): [True: 0, False: 0]
  ------------------
  807|      0|               char_set.negate();
  808|      0|            char_set.add_class(m);
  809|      0|            if(0 == this->append_set(char_set))
  ------------------
  |  Branch (809:16): [True: 0, False: 0]
  ------------------
  810|      0|            {
  811|      0|               fail(regex_constants::error_ctype, m_position - m_base);
  812|      0|               return false;
  813|      0|            }
  814|      0|            return true;
  815|      0|         }
  816|      0|         fail(regex_constants::error_ctype, m_position - m_base, "Escape sequence was neither a valid property nor a valid character class name.");
  817|      0|         return false;
  818|      0|      }
  819|      0|   case regex_constants::escape_type_reset_start_mark:
  ------------------
  |  Branch (819:4): [True: 0, False: 86.2k]
  ------------------
  820|      0|      if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
  ------------------
  |  Branch (820:10): [True: 0, False: 0]
  ------------------
  821|      0|      {
  822|      0|         re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace)));
  823|      0|         pb->index = -5;
  824|      0|         pb->icase = this->flags() & regbase::icase;
  825|      0|         this->m_pdata->m_data.align();
  826|      0|         ++m_position;
  827|      0|         return true;
  828|      0|      }
  829|      0|      goto escape_type_class_jump;
  830|      0|   case regex_constants::escape_type_line_ending:
  ------------------
  |  Branch (830:4): [True: 0, False: 86.2k]
  ------------------
  831|      0|      if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
  ------------------
  |  Branch (831:10): [True: 0, False: 0]
  ------------------
  832|      0|      {
  833|      0|         const charT* e = get_escape_R_string<charT>();
  834|      0|         const charT* old_position = m_position;
  835|      0|         const charT* old_end = m_end;
  836|      0|         const charT* old_base = m_base;
  837|      0|         m_position = e;
  838|      0|         m_base = e;
  839|      0|         m_end = e + traits::length(e);
  840|      0|         bool r = parse_all();
  841|      0|         m_position = ++old_position;
  842|      0|         m_end = old_end;
  843|      0|         m_base = old_base;
  844|      0|         return r;
  845|      0|      }
  846|      0|      goto escape_type_class_jump;
  847|      0|   case regex_constants::escape_type_extended_backref:
  ------------------
  |  Branch (847:4): [True: 0, False: 86.2k]
  ------------------
  848|      0|      if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
  ------------------
  |  Branch (848:10): [True: 0, False: 0]
  ------------------
  849|      0|      {
  850|      0|         bool have_brace = false;
  851|      0|         bool negative = false;
  852|      0|         static const char incomplete_message[] = "Incomplete \\g escape found.";
  853|      0|         if(++m_position == m_end)
  ------------------
  |  Branch (853:13): [True: 0, False: 0]
  ------------------
  854|      0|         {
  855|      0|            fail(regex_constants::error_escape, m_position - m_base, incomplete_message);
  856|      0|            return false;
  857|      0|         }
  858|       |         // maybe have \g{ddd}
  859|      0|         regex_constants::syntax_type syn = this->m_traits.syntax_type(*m_position);
  860|      0|         regex_constants::syntax_type syn_end = 0;
  861|      0|         if((syn == regex_constants::syntax_open_brace) 
  ------------------
  |  Branch (861:13): [True: 0, False: 0]
  ------------------
  862|      0|            || (syn == regex_constants::escape_type_left_word)
  ------------------
  |  Branch (862:16): [True: 0, False: 0]
  ------------------
  863|      0|            || (syn == regex_constants::escape_type_end_buffer))
  ------------------
  |  Branch (863:16): [True: 0, False: 0]
  ------------------
  864|      0|         {
  865|      0|            if(++m_position == m_end)
  ------------------
  |  Branch (865:16): [True: 0, False: 0]
  ------------------
  866|      0|            {
  867|      0|               fail(regex_constants::error_escape, m_position - m_base, incomplete_message);
  868|      0|               return false;
  869|      0|            }
  870|      0|            have_brace = true;
  871|      0|            switch(syn)
  872|      0|            {
  873|      0|            case regex_constants::syntax_open_brace:
  ------------------
  |  Branch (873:13): [True: 0, False: 0]
  ------------------
  874|      0|               syn_end = regex_constants::syntax_close_brace;
  875|      0|               break;
  876|      0|            case regex_constants::escape_type_left_word:
  ------------------
  |  Branch (876:13): [True: 0, False: 0]
  ------------------
  877|      0|               syn_end = regex_constants::escape_type_right_word;
  878|      0|               break;
  879|      0|            default:
  ------------------
  |  Branch (879:13): [True: 0, False: 0]
  ------------------
  880|      0|               syn_end = regex_constants::escape_type_end_buffer;
  881|      0|               break;
  882|      0|            }
  883|      0|         }
  884|      0|         negative = (*m_position == static_cast<charT>('-'));
  885|      0|         if((negative) && (++m_position == m_end))
  ------------------
  |  Branch (885:13): [True: 0, False: 0]
  |  Branch (885:27): [True: 0, False: 0]
  ------------------
  886|      0|         {
  887|      0|            fail(regex_constants::error_escape, m_position - m_base, incomplete_message);
  888|      0|            return false;
  889|      0|         }
  890|      0|         const charT* pc = m_position;
  891|      0|         std::intmax_t i = this->m_traits.toi(pc, m_end, 10);
  892|      0|         if((i < 0) && syn_end)
  ------------------
  |  Branch (892:13): [True: 0, False: 0]
  |  Branch (892:24): [True: 0, False: 0]
  ------------------
  893|      0|         {
  894|       |            // Check for a named capture, get the leftmost one if there is more than one:
  895|      0|            const charT* base = m_position;
  896|      0|            while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != syn_end))
  ------------------
  |  Branch (896:19): [True: 0, False: 0]
  |  Branch (896:44): [True: 0, False: 0]
  ------------------
  897|      0|            {
  898|      0|               ++m_position;
  899|      0|            }
  900|      0|            i = hash_value_from_capture_name(base, m_position);
  901|      0|            pc = m_position;
  902|      0|         }
  903|      0|         if(negative)
  ------------------
  |  Branch (903:13): [True: 0, False: 0]
  ------------------
  904|      0|            i = 1 + (static_cast<std::intmax_t>(m_mark_count) - i);
  905|      0|         if(((i < hash_value_mask) && (i > 0)) || ((i >= hash_value_mask) && (this->m_pdata->get_id((int)i) > 0)))
  ------------------
  |  Branch (905:14): [True: 0, False: 0]
  |  Branch (905:39): [True: 0, False: 0]
  |  Branch (905:52): [True: 0, False: 0]
  |  Branch (905:78): [True: 0, False: 0]
  ------------------
  906|      0|         {
  907|      0|            m_position = pc;
  908|      0|            re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_backref, sizeof(re_brace)));
  909|      0|            pb->index = (int)i;
  910|      0|            pb->icase = this->flags() & regbase::icase;
  911|      0|            if ((i > m_max_backref) && (i < hash_value_mask))
  ------------------
  |  Branch (911:17): [True: 0, False: 0]
  |  Branch (911:40): [True: 0, False: 0]
  ------------------
  912|      0|               m_max_backref = i;
  913|      0|         }
  914|      0|         else
  915|      0|         {
  916|      0|            fail(regex_constants::error_backref, m_position - m_base);
  917|      0|            return false;
  918|      0|         }
  919|      0|         m_position = pc;
  920|      0|         if(have_brace)
  ------------------
  |  Branch (920:13): [True: 0, False: 0]
  ------------------
  921|      0|         {
  922|      0|            if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != syn_end))
  ------------------
  |  Branch (922:16): [True: 0, False: 0]
  |  Branch (922:41): [True: 0, False: 0]
  ------------------
  923|      0|            {
  924|      0|               fail(regex_constants::error_escape, m_position - m_base, incomplete_message);
  925|      0|               return false;
  926|      0|            }
  927|      0|            ++m_position;
  928|      0|         }
  929|      0|         return true;
  930|      0|      }
  931|      0|      goto escape_type_class_jump;
  932|      0|   case regex_constants::escape_type_control_v:
  ------------------
  |  Branch (932:4): [True: 0, False: 86.2k]
  ------------------
  933|      0|      if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
  ------------------
  |  Branch (933:10): [True: 0, False: 0]
  ------------------
  934|      0|         goto escape_type_class_jump;
  935|      0|      BOOST_REGEX_FALLTHROUGH;
  ------------------
  |  |  127|      0|#  define BOOST_REGEX_FALLTHROUGH BOOST_FALLTHROUGH
  |  |  ------------------
  |  |  |  |  125|      0|#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
  |  |  ------------------
  ------------------
  936|  19.1k|   default:
  ------------------
  |  Branch (936:4): [True: 19.1k, False: 67.0k]
  ------------------
  937|  19.1k|      this->append_literal(unescape_character());
  938|  19.1k|      break;
  939|  86.2k|   }
  940|  52.7k|   return true;
  941|  86.2k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE18unescape_characterEv:
 1744|  38.3k|{
 1745|       |#ifdef BOOST_REGEX_MSVC
 1746|       |#pragma warning(push)
 1747|       |#pragma warning(disable:4127)
 1748|       |#endif
 1749|  38.3k|   charT result(0);
 1750|  38.3k|   if(m_position == m_end)
  ------------------
  |  Branch (1750:7): [True: 0, False: 38.3k]
  ------------------
 1751|      0|   {
 1752|      0|      fail(regex_constants::error_escape, m_position - m_base, "Escape sequence terminated prematurely.");
 1753|      0|      return false;
 1754|      0|   }
 1755|  38.3k|   switch(this->m_traits.escape_syntax_type(*m_position))
 1756|  38.3k|   {
 1757|      0|   case regex_constants::escape_type_control_a:
  ------------------
  |  Branch (1757:4): [True: 0, False: 38.3k]
  ------------------
 1758|      0|      result = charT('\a');
 1759|      0|      break;
 1760|      0|   case regex_constants::escape_type_e:
  ------------------
  |  Branch (1760:4): [True: 0, False: 38.3k]
  ------------------
 1761|      0|      result = charT(27);
 1762|      0|      break;
 1763|      0|   case regex_constants::escape_type_control_f:
  ------------------
  |  Branch (1763:4): [True: 0, False: 38.3k]
  ------------------
 1764|      0|      result = charT('\f');
 1765|      0|      break;
 1766|  4.79k|   case regex_constants::escape_type_control_n:
  ------------------
  |  Branch (1766:4): [True: 4.79k, False: 33.5k]
  ------------------
 1767|  4.79k|      result = charT('\n');
 1768|  4.79k|      break;
 1769|      0|   case regex_constants::escape_type_control_r:
  ------------------
  |  Branch (1769:4): [True: 0, False: 38.3k]
  ------------------
 1770|      0|      result = charT('\r');
 1771|      0|      break;
 1772|      0|   case regex_constants::escape_type_control_t:
  ------------------
  |  Branch (1772:4): [True: 0, False: 38.3k]
  ------------------
 1773|      0|      result = charT('\t');
 1774|      0|      break;
 1775|      0|   case regex_constants::escape_type_control_v:
  ------------------
  |  Branch (1775:4): [True: 0, False: 38.3k]
  ------------------
 1776|      0|      result = charT('\v');
 1777|      0|      break;
 1778|      0|   case regex_constants::escape_type_word_assert:
  ------------------
  |  Branch (1778:4): [True: 0, False: 38.3k]
  ------------------
 1779|      0|      result = charT('\b');
 1780|      0|      break;
 1781|      0|   case regex_constants::escape_type_ascii_control:
  ------------------
  |  Branch (1781:4): [True: 0, False: 38.3k]
  ------------------
 1782|      0|      ++m_position;
 1783|      0|      if(m_position == m_end)
  ------------------
  |  Branch (1783:10): [True: 0, False: 0]
  ------------------
 1784|      0|      {
 1785|       |         // Rewind to start of escape:
 1786|      0|         --m_position;
 1787|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1787:16): [True: 0, False: 0]
  ------------------
 1788|      0|         fail(regex_constants::error_escape, m_position - m_base, "ASCII escape sequence terminated prematurely.");
 1789|      0|         return result;
 1790|      0|      }
 1791|      0|      result = static_cast<charT>(*m_position % 32);
 1792|      0|      break;
 1793|      0|   case regex_constants::escape_type_hex:
  ------------------
  |  Branch (1793:4): [True: 0, False: 38.3k]
  ------------------
 1794|      0|      ++m_position;
 1795|      0|      if(m_position == m_end)
  ------------------
  |  Branch (1795:10): [True: 0, False: 0]
  ------------------
 1796|      0|      {
 1797|       |         // Rewind to start of escape:
 1798|      0|         --m_position;
 1799|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1799:16): [True: 0, False: 0]
  ------------------
 1800|      0|         fail(regex_constants::error_escape, m_position - m_base, "Hexadecimal escape sequence terminated prematurely.");
 1801|      0|         return result;
 1802|      0|      }
 1803|       |      // maybe have \x{ddd}
 1804|      0|      if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
  ------------------
  |  Branch (1804:10): [True: 0, False: 0]
  ------------------
 1805|      0|      {
 1806|      0|         ++m_position;
 1807|      0|         if(m_position == m_end)
  ------------------
  |  Branch (1807:13): [True: 0, False: 0]
  ------------------
 1808|      0|         {
 1809|       |            // Rewind to start of escape:
 1810|      0|            --m_position;
 1811|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1811:19): [True: 0, False: 0]
  ------------------
 1812|      0|            fail(regex_constants::error_escape, m_position - m_base, "Missing } in hexadecimal escape sequence.");
 1813|      0|            return result;
 1814|      0|         }
 1815|      0|         std::intmax_t i = this->m_traits.toi(m_position, m_end, 16);
 1816|      0|         if((m_position == m_end)
  ------------------
  |  Branch (1816:13): [True: 0, False: 0]
  ------------------
 1817|      0|            || (i < 0)
  ------------------
  |  Branch (1817:16): [True: 0, False: 0]
  ------------------
 1818|      0|            || ((std::numeric_limits<charT>::is_specialized) && (i > (std::intmax_t)(std::numeric_limits<charT>::max)()))
  ------------------
  |  Branch (1818:17): [Folded - Ignored]
  |  Branch (1818:65): [True: 0, False: 0]
  ------------------
 1819|      0|            || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
  ------------------
  |  Branch (1819:16): [True: 0, False: 0]
  ------------------
 1820|      0|         {
 1821|       |            // Rewind to start of escape:
 1822|      0|            --m_position;
 1823|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1823:19): [True: 0, False: 0]
  ------------------
 1824|      0|            fail(regex_constants::error_badbrace, m_position - m_base, "Hexadecimal escape sequence was invalid.");
 1825|      0|            return result;
 1826|      0|         }
 1827|      0|         ++m_position;
 1828|      0|         result = charT(i);
 1829|      0|      }
 1830|      0|      else
 1831|      0|      {
 1832|      0|         std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), static_cast<std::ptrdiff_t>(m_end - m_position));
 1833|      0|         std::intmax_t i = this->m_traits.toi(m_position, m_position + len, 16);
 1834|      0|         if((i < 0)
  ------------------
  |  Branch (1834:13): [True: 0, False: 0]
  ------------------
 1835|      0|            || !valid_value(charT(0), i))
  ------------------
  |  Branch (1835:16): [True: 0, False: 0]
  ------------------
 1836|      0|         {
 1837|       |            // Rewind to start of escape:
 1838|      0|            --m_position;
 1839|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1839:19): [True: 0, False: 0]
  ------------------
 1840|      0|            fail(regex_constants::error_escape, m_position - m_base, "Escape sequence did not encode a valid character.");
 1841|      0|            return result;
 1842|      0|         }
 1843|      0|         result = charT(i);
 1844|      0|      }
 1845|      0|      return result;
 1846|      0|   case regex_constants::syntax_digit:
  ------------------
  |  Branch (1846:4): [True: 0, False: 38.3k]
  ------------------
 1847|      0|      {
 1848|       |      // an octal escape sequence, the first character must be a zero
 1849|       |      // followed by up to 3 octal digits:
 1850|      0|      std::ptrdiff_t len = (std::min)(std::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4));
 1851|      0|      const charT* bp = m_position;
 1852|      0|      std::intmax_t val = this->m_traits.toi(bp, bp + 1, 8);
 1853|      0|      if(val != 0)
  ------------------
  |  Branch (1853:10): [True: 0, False: 0]
  ------------------
 1854|      0|      {
 1855|       |         // Rewind to start of escape:
 1856|      0|         --m_position;
 1857|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1857:16): [True: 0, False: 0]
  ------------------
 1858|       |         // Oops not an octal escape after all:
 1859|      0|         fail(regex_constants::error_escape, m_position - m_base, "Invalid octal escape sequence.");
 1860|      0|         return result;
 1861|      0|      }
 1862|      0|      val = this->m_traits.toi(m_position, m_position + len, 8);
 1863|      0|      if((val < 0) || (val > (std::intmax_t)(std::numeric_limits<charT>::max)()))
  ------------------
  |  Branch (1863:10): [True: 0, False: 0]
  |  Branch (1863:23): [True: 0, False: 0]
  ------------------
 1864|      0|      {
 1865|       |         // Rewind to start of escape:
 1866|      0|         --m_position;
 1867|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1867:16): [True: 0, False: 0]
  ------------------
 1868|      0|         fail(regex_constants::error_escape, m_position - m_base, "Octal escape sequence is invalid.");
 1869|      0|         return result;
 1870|      0|      }
 1871|      0|      return static_cast<charT>(val);
 1872|      0|      }
 1873|      0|   case regex_constants::escape_type_named_char:
  ------------------
  |  Branch (1873:4): [True: 0, False: 38.3k]
  ------------------
 1874|      0|      {
 1875|      0|         ++m_position;
 1876|      0|         if(m_position == m_end)
  ------------------
  |  Branch (1876:13): [True: 0, False: 0]
  ------------------
 1877|      0|         {
 1878|       |            // Rewind to start of escape:
 1879|      0|            --m_position;
 1880|      0|            while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1880:19): [True: 0, False: 0]
  ------------------
 1881|      0|            fail(regex_constants::error_escape, m_position - m_base);
 1882|      0|            return false;
 1883|      0|         }
 1884|       |         // maybe have \N{name}
 1885|      0|         if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace)
  ------------------
  |  Branch (1885:13): [True: 0, False: 0]
  ------------------
 1886|      0|         {
 1887|      0|            const charT* base = m_position;
 1888|       |            // skip forward until we find enclosing brace:
 1889|      0|            while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace))
  ------------------
  |  Branch (1889:19): [True: 0, False: 0]
  |  Branch (1889:44): [True: 0, False: 0]
  ------------------
 1890|      0|               ++m_position;
 1891|      0|            if(m_position == m_end)
  ------------------
  |  Branch (1891:16): [True: 0, False: 0]
  ------------------
 1892|      0|            {
 1893|       |               // Rewind to start of escape:
 1894|      0|               --m_position;
 1895|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1895:22): [True: 0, False: 0]
  ------------------
 1896|      0|               fail(regex_constants::error_escape, m_position - m_base);
 1897|      0|               return false;
 1898|      0|            }
 1899|      0|            string_type s = this->m_traits.lookup_collatename(++base, m_position++);
 1900|      0|            if(s.empty())
  ------------------
  |  Branch (1900:16): [True: 0, False: 0]
  ------------------
 1901|      0|            {
 1902|       |               // Rewind to start of escape:
 1903|      0|               --m_position;
 1904|      0|               while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1904:22): [True: 0, False: 0]
  ------------------
 1905|      0|               fail(regex_constants::error_collate, m_position - m_base);
 1906|      0|               return false;
 1907|      0|            }
 1908|      0|            if(s.size() == 1)
  ------------------
  |  Branch (1908:16): [True: 0, False: 0]
  ------------------
 1909|      0|            {
 1910|      0|               return s[0];
 1911|      0|            }
 1912|      0|         }
 1913|       |         // fall through is a failure:
 1914|       |         // Rewind to start of escape:
 1915|      0|         --m_position;
 1916|      0|         while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position;
  ------------------
  |  Branch (1916:16): [True: 0, False: 0]
  ------------------
 1917|      0|         fail(regex_constants::error_escape, m_position - m_base);
 1918|      0|         return false;
 1919|      0|      }
 1920|  33.5k|   default:
  ------------------
  |  Branch (1920:4): [True: 33.5k, False: 4.79k]
  ------------------
 1921|  33.5k|      result = *m_position;
 1922|  33.5k|      break;
 1923|  38.3k|   }
 1924|  38.3k|   ++m_position;
 1925|  38.3k|   return result;
 1926|       |#ifdef BOOST_REGEX_MSVC
 1927|       |#pragma warning(pop)
 1928|       |#endif
 1929|  38.3k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8parse_QEEv:
 1965|  9.58k|{
 1966|       |#ifdef BOOST_REGEX_MSVC
 1967|       |#pragma warning(push)
 1968|       |#pragma warning(disable:4127)
 1969|       |#endif
 1970|       |   //
 1971|       |   // parse a \Q...\E sequence:
 1972|       |   //
 1973|  9.58k|   ++m_position; // skip the Q
 1974|  9.58k|   const charT* start = m_position;
 1975|  9.58k|   const charT* end;
 1976|  9.58k|   do
 1977|  9.58k|   {
 1978|  67.0k|      while((m_position != m_end) 
  ------------------
  |  Branch (1978:13): [True: 67.0k, False: 0]
  ------------------
 1979|  67.0k|         && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape))
  ------------------
  |  Branch (1979:13): [True: 57.5k, False: 9.58k]
  ------------------
 1980|  57.5k|         ++m_position;
 1981|  9.58k|      if(m_position == m_end)
  ------------------
  |  Branch (1981:10): [True: 0, False: 9.58k]
  ------------------
 1982|      0|      {
 1983|       |         //  a \Q...\E sequence may terminate with the end of the expression:
 1984|      0|         end = m_position;
 1985|      0|         break;  
 1986|      0|      }
 1987|  9.58k|      if(++m_position == m_end) // skip the escape
  ------------------
  |  Branch (1987:10): [True: 0, False: 9.58k]
  ------------------
 1988|      0|      {
 1989|      0|         fail(regex_constants::error_escape, m_position - m_base, "Unterminated \\Q...\\E sequence.");
 1990|      0|         return false;
 1991|      0|      }
 1992|       |      // check to see if it's a \E:
 1993|  9.58k|      if(this->m_traits.escape_syntax_type(*m_position) == regex_constants::escape_type_E)
  ------------------
  |  Branch (1993:10): [True: 9.58k, False: 0]
  ------------------
 1994|  9.58k|      {
 1995|  9.58k|         ++m_position;
 1996|  9.58k|         end = m_position - 2;
 1997|  9.58k|         break;
 1998|  9.58k|      }
 1999|       |      // otherwise go round again:
 2000|  9.58k|   }while(true);
  ------------------
  |  Branch (2000:11): [Folded - Ignored]
  ------------------
 2001|       |   //
 2002|       |   // now add all the character between the two escapes as literals:
 2003|       |   //
 2004|  67.0k|   while(start != end)
  ------------------
  |  Branch (2004:10): [True: 57.5k, False: 9.58k]
  ------------------
 2005|  57.5k|   {
 2006|  57.5k|      this->append_literal(*start);
 2007|  57.5k|      ++start;
 2008|  57.5k|   }
 2009|  9.58k|   return true;
 2010|       |#ifdef BOOST_REGEX_MSVC
 2011|       |#pragma warning(pop)
 2012|       |#endif
 2013|  9.58k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15parse_match_anyEv:
  945|  23.9k|{
  946|       |   //
  947|       |   // we have a '.' that can match any character:
  948|       |   //
  949|  23.9k|   ++m_position;
  950|  23.9k|   static_cast<re_dot*>(
  951|  23.9k|      this->append_state(syntax_element_wild, sizeof(re_dot))
  952|  23.9k|      )->mask = static_cast<unsigned char>(this->flags() & regbase::no_mod_s 
  ------------------
  |  Branch (952:44): [True: 0, False: 23.9k]
  ------------------
  953|  23.9k|      ? BOOST_REGEX_DETAIL_NS::force_not_newline 
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|  23.9k|         : this->flags() & regbase::mod_s ?
  ------------------
  |  Branch (954:12): [True: 0, False: 23.9k]
  ------------------
  955|  23.9k|            BOOST_REGEX_DETAIL_NS::force_newline : BOOST_REGEX_DETAIL_NS::dont_care);
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          BOOST_REGEX_DETAIL_NS::force_newline : BOOST_REGEX_DETAIL_NS::dont_care);
  ------------------
  |  |  158|  23.9k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  23.9k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  23.9k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  23.9k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|  23.9k|   return true;
  957|  23.9k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12parse_repeatEmm:
  961|  86.2k|{
  962|  86.2k|   bool greedy = true;
  963|  86.2k|   bool possessive = false;
  964|  86.2k|   std::size_t insert_point;
  965|       |   // 
  966|       |   // when we get to here we may have a non-greedy ? mark still to come:
  967|       |   //
  968|  86.2k|   if((m_position != m_end) 
  ------------------
  |  Branch (968:7): [True: 81.4k, False: 4.79k]
  ------------------
  969|  86.2k|      && (
  970|  81.4k|            (0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex)))
  ------------------
  |  Branch (970:13): [True: 81.4k, False: 0]
  ------------------
  971|  81.4k|            || ((regbase::basic_syntax_group|regbase::emacs_ex) == (this->flags() & (regbase::main_option_type | regbase::emacs_ex)))
  ------------------
  |  Branch (971:16): [True: 0, False: 0]
  ------------------
  972|  81.4k|         )
  973|  86.2k|      )
  974|  81.4k|   {
  975|       |      // OK we have a perl or emacs regex, check for a '?':
  976|  81.4k|      if ((this->flags() & (regbase::main_option_type | regbase::mod_x | regbase::no_perl_ex)) == regbase::mod_x)
  ------------------
  |  Branch (976:11): [True: 0, False: 81.4k]
  ------------------
  977|      0|      {
  978|       |         // whitespace skip:
  979|      0|         while ((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
  ------------------
  |  Branch (979:17): [True: 0, False: 0]
  |  Branch (979:42): [True: 0, False: 0]
  ------------------
  980|      0|            ++m_position;
  981|      0|      }
  982|  81.4k|      if((m_position != m_end) && (this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question))
  ------------------
  |  Branch (982:10): [True: 81.4k, False: 0]
  |  Branch (982:35): [True: 33.5k, False: 47.9k]
  ------------------
  983|  33.5k|      {
  984|  33.5k|         greedy = false;
  985|  33.5k|         ++m_position;
  986|  33.5k|      }
  987|       |      // for perl regexes only check for possessive ++ repeats.
  988|  81.4k|      if((m_position != m_end)
  ------------------
  |  Branch (988:10): [True: 81.4k, False: 0]
  ------------------
  989|  81.4k|         && (0 == (this->flags() & regbase::main_option_type)) 
  ------------------
  |  Branch (989:13): [True: 81.4k, False: 0]
  ------------------
  990|  81.4k|         && (this->m_traits.syntax_type(*m_position) == regex_constants::syntax_plus))
  ------------------
  |  Branch (990:13): [True: 0, False: 81.4k]
  ------------------
  991|      0|      {
  992|      0|         possessive = true;
  993|      0|         ++m_position;
  994|      0|      }
  995|  81.4k|   }
  996|  86.2k|   if(0 == this->m_last_state)
  ------------------
  |  Branch (996:7): [True: 0, False: 86.2k]
  ------------------
  997|      0|   {
  998|      0|      fail(regex_constants::error_badrepeat, std::distance(m_base, m_position), "Nothing to repeat.");
  999|      0|      return false;
 1000|      0|   }
 1001|  86.2k|   if(this->m_last_state->type == syntax_element_endmark)
  ------------------
  |  Branch (1001:7): [True: 19.1k, False: 67.0k]
  ------------------
 1002|  19.1k|   {
 1003|       |      // insert a repeat before the '(' matching the last ')':
 1004|  19.1k|      insert_point = this->m_paren_start;
 1005|  19.1k|   }
 1006|  67.0k|   else if((this->m_last_state->type == syntax_element_literal) && (static_cast<re_literal*>(this->m_last_state)->length > 1))
  ------------------
  |  Branch (1006:12): [True: 9.58k, False: 57.5k]
  |  Branch (1006:68): [True: 0, False: 9.58k]
  ------------------
 1007|      0|   {
 1008|       |      // the last state was a literal with more than one character, split it in two:
 1009|      0|      re_literal* lit = static_cast<re_literal*>(this->m_last_state);
 1010|      0|      charT c = (static_cast<charT*>(static_cast<void*>(lit+1)))[lit->length - 1];
 1011|      0|      lit->length -= 1;
 1012|       |      // now append new state:
 1013|      0|      lit = static_cast<re_literal*>(this->append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT)));
 1014|      0|      lit->length = 1;
 1015|      0|      (static_cast<charT*>(static_cast<void*>(lit+1)))[0] = c;
 1016|      0|      insert_point = this->getoffset(this->m_last_state);
 1017|      0|   }
 1018|  67.0k|   else
 1019|  67.0k|   {
 1020|       |      // repeat the last state whatever it was, need to add some error checking here:
 1021|  67.0k|      switch(this->m_last_state->type)
 1022|  67.0k|      {
 1023|      0|      case syntax_element_start_line:
  ------------------
  |  Branch (1023:7): [True: 0, False: 67.0k]
  ------------------
 1024|      0|      case syntax_element_end_line:
  ------------------
  |  Branch (1024:7): [True: 0, False: 67.0k]
  ------------------
 1025|      0|      case syntax_element_word_boundary:
  ------------------
  |  Branch (1025:7): [True: 0, False: 67.0k]
  ------------------
 1026|      0|      case syntax_element_within_word:
  ------------------
  |  Branch (1026:7): [True: 0, False: 67.0k]
  ------------------
 1027|      0|      case syntax_element_word_start:
  ------------------
  |  Branch (1027:7): [True: 0, False: 67.0k]
  ------------------
 1028|      0|      case syntax_element_word_end:
  ------------------
  |  Branch (1028:7): [True: 0, False: 67.0k]
  ------------------
 1029|      0|      case syntax_element_buffer_start:
  ------------------
  |  Branch (1029:7): [True: 0, False: 67.0k]
  ------------------
 1030|      0|      case syntax_element_buffer_end:
  ------------------
  |  Branch (1030:7): [True: 0, False: 67.0k]
  ------------------
 1031|      0|      case syntax_element_alt:
  ------------------
  |  Branch (1031:7): [True: 0, False: 67.0k]
  ------------------
 1032|      0|      case syntax_element_soft_buffer_end:
  ------------------
  |  Branch (1032:7): [True: 0, False: 67.0k]
  ------------------
 1033|      0|      case syntax_element_restart_continue:
  ------------------
  |  Branch (1033:7): [True: 0, False: 67.0k]
  ------------------
 1034|      0|      case syntax_element_jump:
  ------------------
  |  Branch (1034:7): [True: 0, False: 67.0k]
  ------------------
 1035|      0|      case syntax_element_startmark:
  ------------------
  |  Branch (1035:7): [True: 0, False: 67.0k]
  ------------------
 1036|      0|      case syntax_element_backstep:
  ------------------
  |  Branch (1036:7): [True: 0, False: 67.0k]
  ------------------
 1037|      0|      case syntax_element_toggle_case:
  ------------------
  |  Branch (1037:7): [True: 0, False: 67.0k]
  ------------------
 1038|       |         // can't legally repeat any of the above:
 1039|      0|         fail(regex_constants::error_badrepeat, m_position - m_base);
 1040|      0|         return false;
 1041|  67.0k|      default:
  ------------------
  |  Branch (1041:7): [True: 67.0k, False: 0]
  ------------------
 1042|       |         // do nothing...
 1043|  67.0k|         break;
 1044|  67.0k|      }
 1045|  67.0k|      insert_point = this->getoffset(this->m_last_state);
 1046|  67.0k|   }
 1047|       |   //
 1048|       |   // OK we now know what to repeat, so insert the repeat around it:
 1049|       |   //
 1050|  86.2k|   re_repeat* rep = static_cast<re_repeat*>(this->insert_state(insert_point, syntax_element_rep, re_repeater_size));
 1051|  86.2k|   rep->min = low;
 1052|  86.2k|   rep->max = high;
 1053|  86.2k|   rep->greedy = greedy;
 1054|  86.2k|   rep->leading = false;
 1055|       |   // store our repeater position for later:
 1056|  86.2k|   std::ptrdiff_t rep_off = this->getoffset(rep);
 1057|       |   // and append a back jump to the repeat:
 1058|  86.2k|   re_jump* jmp = static_cast<re_jump*>(this->append_state(syntax_element_jump, sizeof(re_jump)));
 1059|  86.2k|   jmp->alt.i = rep_off - this->getoffset(jmp);
 1060|  86.2k|   this->m_pdata->m_data.align();
 1061|       |   // now fill in the alt jump for the repeat:
 1062|  86.2k|   rep = static_cast<re_repeat*>(this->getaddress(rep_off));
 1063|  86.2k|   rep->alt.i = this->m_pdata->m_data.size() - rep_off;
 1064|       |   //
 1065|       |   // If the repeat is possessive then bracket the repeat with a (?>...)
 1066|       |   // independent sub-expression construct:
 1067|       |   //
 1068|  86.2k|   if(possessive)
  ------------------
  |  Branch (1068:7): [True: 0, False: 86.2k]
  ------------------
 1069|      0|   {
 1070|      0|      if(m_position != m_end)
  ------------------
  |  Branch (1070:10): [True: 0, False: 0]
  ------------------
 1071|      0|      {
 1072|       |         //
 1073|       |         // Check for illegal following quantifier, we have to do this here, because
 1074|       |         // the extra states we insert below circumvents our usual error checking :-(
 1075|       |         //
 1076|      0|         bool contin = false;
 1077|      0|         do
 1078|      0|         {
 1079|      0|            if ((this->flags() & (regbase::main_option_type | regbase::mod_x | regbase::no_perl_ex)) == regbase::mod_x)
  ------------------
  |  Branch (1079:17): [True: 0, False: 0]
  ------------------
 1080|      0|            {
 1081|       |               // whitespace skip:
 1082|      0|               while ((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space))
  ------------------
  |  Branch (1082:23): [True: 0, False: 0]
  |  Branch (1082:48): [True: 0, False: 0]
  ------------------
 1083|      0|                  ++m_position;
 1084|      0|            }
 1085|      0|            if (m_position != m_end)
  ------------------
  |  Branch (1085:17): [True: 0, False: 0]
  ------------------
 1086|      0|            {
 1087|      0|               switch (this->m_traits.syntax_type(*m_position))
 1088|      0|               {
 1089|      0|               case regex_constants::syntax_star:
  ------------------
  |  Branch (1089:16): [True: 0, False: 0]
  ------------------
 1090|      0|               case regex_constants::syntax_plus:
  ------------------
  |  Branch (1090:16): [True: 0, False: 0]
  ------------------
 1091|      0|               case regex_constants::syntax_question:
  ------------------
  |  Branch (1091:16): [True: 0, False: 0]
  ------------------
 1092|      0|               case regex_constants::syntax_open_brace:
  ------------------
  |  Branch (1092:16): [True: 0, False: 0]
  ------------------
 1093|      0|                  fail(regex_constants::error_badrepeat, m_position - m_base);
 1094|      0|                  return false;
 1095|      0|               case regex_constants::syntax_open_mark:
  ------------------
  |  Branch (1095:16): [True: 0, False: 0]
  ------------------
 1096|       |                  // Do we have a comment?  If so we need to skip it here...
 1097|      0|                  if ((m_position + 2 < m_end) && this->m_traits.syntax_type(*(m_position + 1)) == regex_constants::syntax_question
  ------------------
  |  Branch (1097:23): [True: 0, False: 0]
  |  Branch (1097:51): [True: 0, False: 0]
  ------------------
 1098|      0|                     && this->m_traits.syntax_type(*(m_position + 2)) == regex_constants::syntax_hash)
  ------------------
  |  Branch (1098:25): [True: 0, False: 0]
  ------------------
 1099|      0|                  {
 1100|      0|                     while ((m_position != m_end)
  ------------------
  |  Branch (1100:29): [True: 0, False: 0]
  ------------------
 1101|      0|                        && (this->m_traits.syntax_type(*m_position++) != regex_constants::syntax_close_mark)) {
  ------------------
  |  Branch (1101:28): [True: 0, False: 0]
  ------------------
 1102|      0|                     }
 1103|      0|                     contin = true;
 1104|      0|                  }
 1105|      0|                  else
 1106|      0|                     contin = false;
 1107|      0|                  break;
 1108|      0|               default:
  ------------------
  |  Branch (1108:16): [True: 0, False: 0]
  ------------------
 1109|      0|                  contin = false;
 1110|      0|               }
 1111|      0|            }
 1112|      0|            else
 1113|      0|               contin = false;
 1114|      0|         } while (contin);
  ------------------
  |  Branch (1114:19): [True: 0, False: 0]
  ------------------
 1115|      0|      }
 1116|      0|      re_brace* pb = static_cast<re_brace*>(this->insert_state(insert_point, syntax_element_startmark, sizeof(re_brace)));
 1117|      0|      pb->index = -3;
 1118|      0|      pb->icase = this->flags() & regbase::icase;
 1119|      0|      jmp = static_cast<re_jump*>(this->insert_state(insert_point + sizeof(re_brace), syntax_element_jump, sizeof(re_jump)));
 1120|      0|      this->m_pdata->m_data.align();
 1121|      0|      jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp);
 1122|      0|      pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace)));
 1123|      0|      pb->index = -3;
 1124|      0|      pb->icase = this->flags() & regbase::icase;
 1125|      0|   }
 1126|  86.2k|   return true;
 1127|  86.2k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9parse_altEv:
 1271|  43.1k|{
 1272|       |   //
 1273|       |   // error check: if there have been no previous states,
 1274|       |   // or if the last state was a '(' then error:
 1275|       |   //
 1276|  43.1k|   if(
 1277|  43.1k|      ((this->m_last_state == 0) || (this->m_last_state->type == syntax_element_startmark))
  ------------------
  |  Branch (1277:8): [True: 0, False: 43.1k]
  |  Branch (1277:37): [True: 0, False: 43.1k]
  ------------------
 1278|  43.1k|      &&
 1279|  43.1k|      !(
 1280|      0|         ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group)
  ------------------
  |  Branch (1280:10): [True: 0, False: 0]
  ------------------
 1281|      0|           &&
 1282|      0|         ((this->flags() & regbase::no_empty_expressions) == 0)
  ------------------
  |  Branch (1282:10): [True: 0, False: 0]
  ------------------
 1283|      0|        )
 1284|  43.1k|      )
 1285|      0|   {
 1286|      0|      fail(regex_constants::error_empty, this->m_position - this->m_base, "A regular expression cannot start with the alternation operator |.");
 1287|      0|      return false;
 1288|      0|   }
 1289|       |   //
 1290|       |   // Reset mark count if required:
 1291|       |   //
 1292|  43.1k|   if(m_max_mark < m_mark_count)
  ------------------
  |  Branch (1292:7): [True: 4.79k, False: 38.3k]
  ------------------
 1293|  4.79k|      m_max_mark = m_mark_count;
 1294|  43.1k|   if(m_mark_reset >= 0)
  ------------------
  |  Branch (1294:7): [True: 0, False: 43.1k]
  ------------------
 1295|      0|      m_mark_count = m_mark_reset;
 1296|       |
 1297|  43.1k|   ++m_position;
 1298|       |   //
 1299|       |   // we need to append a trailing jump: 
 1300|       |   //
 1301|  43.1k|   re_syntax_base* pj = this->append_state(BOOST_REGEX_DETAIL_NS::syntax_element_jump, sizeof(re_jump));
  ------------------
  |  |  158|  43.1k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  43.1k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  43.1k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  43.1k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1302|  43.1k|   std::ptrdiff_t jump_offset = this->getoffset(pj);
 1303|       |   //
 1304|       |   // now insert the alternative:
 1305|       |   //
 1306|  43.1k|   re_alt* palt = static_cast<re_alt*>(this->insert_state(this->m_alt_insert_point, syntax_element_alt, re_alt_size));
 1307|  43.1k|   jump_offset += re_alt_size;
 1308|  43.1k|   this->m_pdata->m_data.align();
 1309|  43.1k|   palt->alt.i = this->m_pdata->m_data.size() - this->getoffset(palt);
 1310|       |   //
 1311|       |   // update m_alt_insert_point so that the next alternate gets
 1312|       |   // inserted at the start of the second of the two we've just created:
 1313|       |   //
 1314|  43.1k|   this->m_alt_insert_point = this->m_pdata->m_data.size();
 1315|       |   //
 1316|       |   // the start of this alternative must have a case changes state
 1317|       |   // if the current block has messed around with case changes:
 1318|       |   //
 1319|  43.1k|   if(m_has_case_change)
  ------------------
  |  Branch (1319:7): [True: 0, False: 43.1k]
  ------------------
 1320|      0|   {
 1321|      0|      static_cast<re_case*>(
 1322|      0|         this->append_state(syntax_element_toggle_case, sizeof(re_case))
 1323|      0|         )->icase = this->m_icase;
 1324|      0|   }
 1325|       |   //
 1326|       |   // push the alternative onto our stack, a recursive
 1327|       |   // implementation here is easier to understand (and faster
 1328|       |   // as it happens), but causes all kinds of stack overflow problems
 1329|       |   // on programs with small stacks (COM+).
 1330|       |   //
 1331|  43.1k|   m_alt_jumps.push_back(jump_offset);
 1332|  43.1k|   return true;
 1333|  43.1k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9parse_setEv:
 1337|  57.5k|{
 1338|  57.5k|   static const char incomplete_message[] = "Character set declaration starting with [ terminated prematurely - either no ] was found or the set had no content.";
 1339|  57.5k|   ++m_position;
 1340|  57.5k|   if(m_position == m_end)
  ------------------
  |  Branch (1340:7): [True: 0, False: 57.5k]
  ------------------
 1341|      0|   {
 1342|      0|      fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1343|      0|      return false;
 1344|      0|   }
 1345|  57.5k|   basic_char_set<charT, traits> char_set;
 1346|       |
 1347|  57.5k|   const charT* base = m_position;  // where the '[' was
 1348|  57.5k|   const charT* item_base = m_position;  // where the '[' or '^' was
 1349|       |
 1350|   215k|   while(m_position != m_end)
  ------------------
  |  Branch (1350:10): [True: 215k, False: 0]
  ------------------
 1351|   215k|   {
 1352|   215k|      switch(this->m_traits.syntax_type(*m_position))
 1353|   215k|      {
 1354|  19.1k|      case regex_constants::syntax_caret:
  ------------------
  |  Branch (1354:7): [True: 19.1k, False: 196k]
  ------------------
 1355|  19.1k|         if(m_position == base)
  ------------------
  |  Branch (1355:13): [True: 19.1k, False: 0]
  ------------------
 1356|  19.1k|         {
 1357|  19.1k|            char_set.negate();
 1358|  19.1k|            ++m_position;
 1359|  19.1k|            item_base = m_position;
 1360|  19.1k|         }
 1361|      0|         else
 1362|      0|            parse_set_literal(char_set);
 1363|  19.1k|         break;
 1364|  62.2k|      case regex_constants::syntax_close_set:
  ------------------
  |  Branch (1364:7): [True: 62.2k, False: 153k]
  ------------------
 1365|  62.2k|         if(m_position == item_base)
  ------------------
  |  Branch (1365:13): [True: 4.79k, False: 57.5k]
  ------------------
 1366|  4.79k|         {
 1367|  4.79k|            parse_set_literal(char_set);
 1368|  4.79k|            break;
 1369|  4.79k|         }
 1370|  57.5k|         else
 1371|  57.5k|         {
 1372|  57.5k|            ++m_position;
 1373|  57.5k|            if(0 == this->append_set(char_set))
  ------------------
  |  Branch (1373:16): [True: 0, False: 57.5k]
  ------------------
 1374|      0|            {
 1375|      0|               fail(regex_constants::error_ctype, m_position - m_base);
 1376|      0|               return false;
 1377|      0|            }
 1378|  57.5k|         }
 1379|  57.5k|         return true;
 1380|  9.58k|      case regex_constants::syntax_open_set:
  ------------------
  |  Branch (1380:7): [True: 9.58k, False: 206k]
  ------------------
 1381|  9.58k|         if(parse_inner_set(char_set))
  ------------------
  |  Branch (1381:13): [True: 9.58k, False: 0]
  ------------------
 1382|  9.58k|            break;
 1383|      0|         return true;
 1384|  19.1k|      case regex_constants::syntax_escape:
  ------------------
  |  Branch (1384:7): [True: 19.1k, False: 196k]
  ------------------
 1385|  19.1k|         {
 1386|       |            // 
 1387|       |            // look ahead and see if this is a character class shortcut
 1388|       |            // \d \w \s etc...
 1389|       |            //
 1390|  19.1k|            ++m_position;
 1391|  19.1k|            if(this->m_traits.escape_syntax_type(*m_position)
  ------------------
  |  Branch (1391:16): [True: 0, False: 19.1k]
  ------------------
 1392|  19.1k|               == regex_constants::escape_type_class)
 1393|      0|            {
 1394|      0|               char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1);
 1395|      0|               if(m != 0)
  ------------------
  |  Branch (1395:19): [True: 0, False: 0]
  ------------------
 1396|      0|               {
 1397|      0|                  char_set.add_class(m);
 1398|      0|                  ++m_position;
 1399|      0|                  break;
 1400|      0|               }
 1401|      0|            }
 1402|  19.1k|            else if(this->m_traits.escape_syntax_type(*m_position)
  ------------------
  |  Branch (1402:21): [True: 0, False: 19.1k]
  ------------------
 1403|  19.1k|               == regex_constants::escape_type_not_class)
 1404|      0|            {
 1405|       |               // negated character class:
 1406|      0|               char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1);
 1407|      0|               if(m != 0)
  ------------------
  |  Branch (1407:19): [True: 0, False: 0]
  ------------------
 1408|      0|               {
 1409|      0|                  char_set.add_negated_class(m);
 1410|      0|                  ++m_position;
 1411|      0|                  break;
 1412|      0|               }
 1413|      0|            }
 1414|       |            // not a character class, just a regular escape:
 1415|  19.1k|            --m_position;
 1416|  19.1k|            parse_set_literal(char_set);
 1417|  19.1k|            break;
 1418|  19.1k|         }
 1419|   105k|      default:
  ------------------
  |  Branch (1419:7): [True: 105k, False: 110k]
  ------------------
 1420|   105k|         parse_set_literal(char_set);
 1421|   105k|         break;
 1422|   215k|      }
 1423|   215k|   }
 1424|      0|   return m_position != m_end;
 1425|  57.5k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE17parse_set_literalERNS0_14basic_char_setIcS5_EE:
 1591|   134k|{
 1592|   134k|   digraph<charT> start_range(get_next_set_literal(char_set));
 1593|   134k|   if(m_end == m_position)
  ------------------
  |  Branch (1593:7): [True: 0, False: 134k]
  ------------------
 1594|      0|   {
 1595|      0|      fail(regex_constants::error_brack, m_position - m_base);
 1596|      0|      return;
 1597|      0|   }
 1598|   134k|   if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash)
  ------------------
  |  Branch (1598:7): [True: 4.79k, False: 129k]
  ------------------
 1599|  4.79k|   {
 1600|       |      // we have a range:
 1601|  4.79k|      if(m_end == ++m_position)
  ------------------
  |  Branch (1601:10): [True: 0, False: 4.79k]
  ------------------
 1602|      0|      {
 1603|      0|         fail(regex_constants::error_brack, m_position - m_base);
 1604|      0|         return;
 1605|      0|      }
 1606|  4.79k|      if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)
  ------------------
  |  Branch (1606:10): [True: 0, False: 4.79k]
  ------------------
 1607|      0|      {
 1608|      0|         digraph<charT> end_range = get_next_set_literal(char_set);
 1609|      0|         char_set.add_range(start_range, end_range);
 1610|      0|         if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash)
  ------------------
  |  Branch (1610:13): [True: 0, False: 0]
  ------------------
 1611|      0|         {
 1612|      0|            if(m_end == ++m_position)
  ------------------
  |  Branch (1612:16): [True: 0, False: 0]
  ------------------
 1613|      0|            {
 1614|      0|               fail(regex_constants::error_brack, m_position - m_base);
 1615|      0|               return;
 1616|      0|            }
 1617|      0|            if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_set)
  ------------------
  |  Branch (1617:16): [True: 0, False: 0]
  ------------------
 1618|      0|            {
 1619|       |               // trailing - :
 1620|      0|               --m_position;
 1621|      0|               return;
 1622|      0|            }
 1623|      0|            fail(regex_constants::error_range, m_position - m_base);
 1624|      0|            return;
 1625|      0|         }
 1626|      0|         return;
 1627|      0|      }
 1628|  4.79k|      --m_position;
 1629|  4.79k|   }
 1630|   134k|   char_set.add_single(start_range);
 1631|   134k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE20get_next_set_literalERNS0_14basic_char_setIcS5_EE:
 1635|   134k|{
 1636|   134k|   digraph<charT> result;
 1637|   134k|   switch(this->m_traits.syntax_type(*m_position))
 1638|   134k|   {
 1639|  14.3k|   case regex_constants::syntax_dash:
  ------------------
  |  Branch (1639:4): [True: 14.3k, False: 119k]
  ------------------
 1640|  14.3k|      if(!char_set.empty())
  ------------------
  |  Branch (1640:10): [True: 4.79k, False: 9.58k]
  ------------------
 1641|  4.79k|      {
 1642|       |         // see if we are at the end of the set:
 1643|  4.79k|         if((++m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
  ------------------
  |  Branch (1643:13): [True: 0, False: 4.79k]
  |  Branch (1643:40): [True: 0, False: 4.79k]
  ------------------
 1644|      0|         {
 1645|      0|            fail(regex_constants::error_range, m_position - m_base);
 1646|      0|            return result;
 1647|      0|         }
 1648|  4.79k|         --m_position;
 1649|  4.79k|      }
 1650|  14.3k|      result.first = *m_position++;
 1651|  14.3k|      return result;
 1652|  19.1k|   case regex_constants::syntax_escape:
  ------------------
  |  Branch (1652:4): [True: 19.1k, False: 115k]
  ------------------
 1653|       |      // check to see if escapes are supported first:
 1654|  19.1k|      if(this->flags() & regex_constants::no_escape_in_lists)
  ------------------
  |  Branch (1654:10): [True: 0, False: 19.1k]
  ------------------
 1655|      0|      {
 1656|      0|         result = *m_position++;
 1657|      0|         break;
 1658|      0|      }
 1659|  19.1k|      ++m_position;
 1660|  19.1k|      result = unescape_character();
 1661|  19.1k|      break;
 1662|  4.79k|   case regex_constants::syntax_open_set:
  ------------------
  |  Branch (1662:4): [True: 4.79k, False: 129k]
  ------------------
 1663|  4.79k|   {
 1664|  4.79k|      if(m_end == ++m_position)
  ------------------
  |  Branch (1664:10): [True: 0, False: 4.79k]
  ------------------
 1665|      0|      {
 1666|      0|         fail(regex_constants::error_collate, m_position - m_base);
 1667|      0|         return result;
 1668|      0|      }
 1669|  4.79k|      if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot)
  ------------------
  |  Branch (1669:10): [True: 4.79k, False: 0]
  ------------------
 1670|  4.79k|      {
 1671|  4.79k|         --m_position;
 1672|  4.79k|         result.first = *m_position;
 1673|  4.79k|         ++m_position;
 1674|  4.79k|         return result;
 1675|  4.79k|      }
 1676|      0|      if(m_end == ++m_position)
  ------------------
  |  Branch (1676:10): [True: 0, False: 0]
  ------------------
 1677|      0|      {
 1678|      0|         fail(regex_constants::error_collate, m_position - m_base);
 1679|      0|         return result;
 1680|      0|      }
 1681|      0|      const charT* name_first = m_position;
 1682|       |      // skip at least one character, then find the matching ':]'
 1683|      0|      if(m_end == ++m_position)
  ------------------
  |  Branch (1683:10): [True: 0, False: 0]
  ------------------
 1684|      0|      {
 1685|      0|         fail(regex_constants::error_collate, name_first - m_base);
 1686|      0|         return result;
 1687|      0|      }
 1688|      0|      while((m_position != m_end) 
  ------------------
  |  Branch (1688:13): [True: 0, False: 0]
  ------------------
 1689|      0|         && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot)) 
  ------------------
  |  Branch (1689:13): [True: 0, False: 0]
  ------------------
 1690|      0|         ++m_position;
 1691|      0|      const charT* name_last = m_position;
 1692|      0|      if(m_end == m_position)
  ------------------
  |  Branch (1692:10): [True: 0, False: 0]
  ------------------
 1693|      0|      {
 1694|      0|         fail(regex_constants::error_collate, name_first - m_base);
 1695|      0|         return result;
 1696|      0|      }
 1697|      0|      if((m_end == ++m_position) 
  ------------------
  |  Branch (1697:10): [True: 0, False: 0]
  ------------------
 1698|      0|         || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
  ------------------
  |  Branch (1698:13): [True: 0, False: 0]
  ------------------
 1699|      0|      {
 1700|      0|         fail(regex_constants::error_collate, name_first - m_base);
 1701|      0|         return result;
 1702|      0|      }
 1703|      0|      ++m_position;
 1704|      0|      string_type s = this->m_traits.lookup_collatename(name_first, name_last);
 1705|      0|      if(s.empty() || (s.size() > 2))
  ------------------
  |  Branch (1705:10): [True: 0, False: 0]
  |  Branch (1705:23): [True: 0, False: 0]
  ------------------
 1706|      0|      {
 1707|      0|         fail(regex_constants::error_collate, name_first - m_base);
 1708|      0|         return result;
 1709|      0|      }
 1710|      0|      result.first = s[0];
 1711|      0|      if(s.size() > 1)
  ------------------
  |  Branch (1711:10): [True: 0, False: 0]
  ------------------
 1712|      0|         result.second = s[1];
 1713|      0|      else
 1714|      0|         result.second = 0;
 1715|      0|      return result;
 1716|      0|   }
 1717|  95.8k|   default:
  ------------------
  |  Branch (1717:4): [True: 95.8k, False: 38.3k]
  ------------------
 1718|  95.8k|      result = *m_position++;
 1719|   134k|   }
 1720|   115k|   return result;
 1721|   134k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15parse_inner_setERNS0_14basic_char_setIcS5_EE:
 1429|  9.58k|{
 1430|  9.58k|   static const char incomplete_message[] = "Character class declaration starting with [ terminated prematurely - either no ] was found or the set had no content.";
 1431|       |   //
 1432|       |   // we have either a character class [:name:]
 1433|       |   // a collating element [.name.]
 1434|       |   // or an equivalence class [=name=]
 1435|       |   //
 1436|  9.58k|   if(m_end == ++m_position)
  ------------------
  |  Branch (1436:7): [True: 0, False: 9.58k]
  ------------------
 1437|      0|   {
 1438|      0|      fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1439|      0|      return false;
 1440|      0|   }
 1441|  9.58k|   switch(this->m_traits.syntax_type(*m_position))
 1442|  9.58k|   {
 1443|      0|   case regex_constants::syntax_dot:
  ------------------
  |  Branch (1443:4): [True: 0, False: 9.58k]
  ------------------
 1444|       |      //
 1445|       |      // a collating element is treated as a literal:
 1446|       |      //
 1447|      0|      --m_position;
 1448|      0|      parse_set_literal(char_set);
 1449|      0|      return true;
 1450|  4.79k|   case regex_constants::syntax_colon:
  ------------------
  |  Branch (1450:4): [True: 4.79k, False: 4.79k]
  ------------------
 1451|  4.79k|      {
 1452|       |      // check that character classes are actually enabled:
 1453|  4.79k|      if((this->flags() & (regbase::main_option_type | regbase::no_char_classes)) 
  ------------------
  |  Branch (1453:10): [True: 0, False: 4.79k]
  ------------------
 1454|  4.79k|         == (regbase::basic_syntax_group  | regbase::no_char_classes))
 1455|      0|      {
 1456|      0|         --m_position;
 1457|      0|         parse_set_literal(char_set);
 1458|      0|         return true;
 1459|      0|      }
 1460|       |      // skip the ':'
 1461|  4.79k|      if(m_end == ++m_position)
  ------------------
  |  Branch (1461:10): [True: 0, False: 4.79k]
  ------------------
 1462|      0|      {
 1463|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1464|      0|         return false;
 1465|      0|      }
 1466|  4.79k|      const charT* name_first = m_position;
 1467|       |      // skip at least one character, then find the matching ':]'
 1468|  4.79k|      if(m_end == ++m_position)
  ------------------
  |  Branch (1468:10): [True: 0, False: 4.79k]
  ------------------
 1469|      0|      {
 1470|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1471|      0|         return false;
 1472|      0|      }
 1473|  23.9k|      while((m_position != m_end) 
  ------------------
  |  Branch (1473:13): [True: 23.9k, False: 0]
  ------------------
 1474|  23.9k|         && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_colon)) 
  ------------------
  |  Branch (1474:13): [True: 19.1k, False: 4.79k]
  ------------------
 1475|  19.1k|         ++m_position;
 1476|  4.79k|      const charT* name_last = m_position;
 1477|  4.79k|      if(m_end == m_position)
  ------------------
  |  Branch (1477:10): [True: 0, False: 4.79k]
  ------------------
 1478|      0|      {
 1479|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1480|      0|         return false;
 1481|      0|      }
 1482|  4.79k|      if((m_end == ++m_position) 
  ------------------
  |  Branch (1482:10): [True: 0, False: 4.79k]
  ------------------
 1483|  4.79k|         || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
  ------------------
  |  Branch (1483:13): [True: 0, False: 4.79k]
  ------------------
 1484|      0|      {
 1485|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1486|      0|         return false;
 1487|      0|      }
 1488|       |      //
 1489|       |      // check for negated class:
 1490|       |      //
 1491|  4.79k|      bool negated = false;
 1492|  4.79k|      if(this->m_traits.syntax_type(*name_first) == regex_constants::syntax_caret)
  ------------------
  |  Branch (1492:10): [True: 0, False: 4.79k]
  ------------------
 1493|      0|      {
 1494|      0|         ++name_first;
 1495|      0|         negated = true;
 1496|      0|      }
 1497|  4.79k|      typedef typename traits::char_class_type m_type;
 1498|  4.79k|      m_type m = this->m_traits.lookup_classname(name_first, name_last);
 1499|  4.79k|      if(m == 0)
  ------------------
  |  Branch (1499:10): [True: 0, False: 4.79k]
  ------------------
 1500|      0|      {
 1501|      0|         if(char_set.empty() && (name_last - name_first == 1))
  ------------------
  |  Branch (1501:13): [True: 0, False: 0]
  |  Branch (1501:33): [True: 0, False: 0]
  ------------------
 1502|      0|         {
 1503|       |            // maybe a special case:
 1504|      0|            ++m_position;
 1505|      0|            if( (m_position != m_end) 
  ------------------
  |  Branch (1505:17): [True: 0, False: 0]
  ------------------
 1506|      0|               && (this->m_traits.syntax_type(*m_position) 
  ------------------
  |  Branch (1506:19): [True: 0, False: 0]
  ------------------
 1507|      0|                  == regex_constants::syntax_close_set))
 1508|      0|            {
 1509|      0|               if(this->m_traits.escape_syntax_type(*name_first) 
  ------------------
  |  Branch (1509:19): [True: 0, False: 0]
  ------------------
 1510|      0|                  == regex_constants::escape_type_left_word)
 1511|      0|               {
 1512|      0|                  ++m_position;
 1513|      0|                  this->append_state(syntax_element_word_start);
 1514|      0|                  return false;
 1515|      0|               }
 1516|      0|               if(this->m_traits.escape_syntax_type(*name_first) 
  ------------------
  |  Branch (1516:19): [True: 0, False: 0]
  ------------------
 1517|      0|                  == regex_constants::escape_type_right_word)
 1518|      0|               {
 1519|      0|                  ++m_position;
 1520|      0|                  this->append_state(syntax_element_word_end);
 1521|      0|                  return false;
 1522|      0|               }
 1523|      0|            }
 1524|      0|         }
 1525|      0|         fail(regex_constants::error_ctype, name_first - m_base);
 1526|      0|         return false;
 1527|      0|      }
 1528|  4.79k|      if(!negated)
  ------------------
  |  Branch (1528:10): [True: 4.79k, False: 0]
  ------------------
 1529|  4.79k|         char_set.add_class(m);
 1530|      0|      else
 1531|      0|         char_set.add_negated_class(m);
 1532|  4.79k|      ++m_position;
 1533|  4.79k|      break;
 1534|  4.79k|   }
 1535|      0|   case regex_constants::syntax_equal:
  ------------------
  |  Branch (1535:4): [True: 0, False: 9.58k]
  ------------------
 1536|      0|      {
 1537|       |      // skip the '='
 1538|      0|      if(m_end == ++m_position)
  ------------------
  |  Branch (1538:10): [True: 0, False: 0]
  ------------------
 1539|      0|      {
 1540|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1541|      0|         return false;
 1542|      0|      }
 1543|      0|      const charT* name_first = m_position;
 1544|       |      // skip at least one character, then find the matching '=]'
 1545|      0|      if(m_end == ++m_position)
  ------------------
  |  Branch (1545:10): [True: 0, False: 0]
  ------------------
 1546|      0|      {
 1547|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1548|      0|         return false;
 1549|      0|      }
 1550|      0|      while((m_position != m_end) 
  ------------------
  |  Branch (1550:13): [True: 0, False: 0]
  ------------------
 1551|      0|         && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)) 
  ------------------
  |  Branch (1551:13): [True: 0, False: 0]
  ------------------
 1552|      0|         ++m_position;
 1553|      0|      const charT* name_last = m_position;
 1554|      0|      if(m_end == m_position)
  ------------------
  |  Branch (1554:10): [True: 0, False: 0]
  ------------------
 1555|      0|      {
 1556|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1557|      0|         return false;
 1558|      0|      }
 1559|      0|      if((m_end == ++m_position) 
  ------------------
  |  Branch (1559:10): [True: 0, False: 0]
  ------------------
 1560|      0|         || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set))
  ------------------
  |  Branch (1560:13): [True: 0, False: 0]
  ------------------
 1561|      0|      {
 1562|      0|         fail(regex_constants::error_brack, m_position - m_base, incomplete_message);
 1563|      0|         return false;
 1564|      0|      }
 1565|      0|      string_type m = this->m_traits.lookup_collatename(name_first, name_last);
 1566|      0|      if(m.empty() || (m.size() > 2))
  ------------------
  |  Branch (1566:10): [True: 0, False: 0]
  |  Branch (1566:23): [True: 0, False: 0]
  ------------------
 1567|      0|      {
 1568|      0|         fail(regex_constants::error_collate, name_first - m_base);
 1569|      0|         return false;
 1570|      0|      }
 1571|      0|      digraph<charT> d;
 1572|      0|      d.first = m[0];
 1573|      0|      if(m.size() > 1)
  ------------------
  |  Branch (1573:10): [True: 0, False: 0]
  ------------------
 1574|      0|         d.second = m[1];
 1575|      0|      else
 1576|      0|         d.second = 0;
 1577|      0|      char_set.add_equivalent(d);
 1578|      0|      ++m_position;
 1579|      0|      break;
 1580|      0|   }
 1581|  4.79k|   default:
  ------------------
  |  Branch (1581:4): [True: 4.79k, False: 4.79k]
  ------------------
 1582|  4.79k|      --m_position;
 1583|  4.79k|      parse_set_literal(char_set);
 1584|  4.79k|      break;
 1585|  9.58k|   }
 1586|  9.58k|   return true;
 1587|  9.58k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13parse_literalEv:
  422|  71.8k|{
  423|       |   // append this as a literal provided it's not a space character
  424|       |   // or the perl option regbase::mod_x is not set:
  425|  71.8k|   if(
  426|  71.8k|      ((this->flags() 
  ------------------
  |  Branch (426:7): [True: 71.8k, False: 0]
  ------------------
  427|  71.8k|         & (regbase::main_option_type|regbase::mod_x|regbase::no_perl_ex)) 
  428|  71.8k|            != regbase::mod_x)
  429|  71.8k|      || !this->m_traits.isctype(*m_position, this->m_mask_space))
  ------------------
  |  Branch (429:10): [True: 0, False: 0]
  ------------------
  430|  71.8k|         this->append_literal(*m_position);
  431|  71.8k|   ++m_position;
  432|  71.8k|   return true;
  433|  71.8k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9parse_allEv:
  247|   138k|{
  248|   138k|   if (++m_recursion_count > 400)
  ------------------
  |  Branch (248:8): [True: 0, False: 138k]
  ------------------
  249|      0|   {
  250|       |      // exceeded internal limits
  251|      0|      fail(boost::regex_constants::error_complexity, m_position - m_base, "Exceeded nested brace limit.");
  252|      0|   }
  253|   138k|   bool result = true;
  254|   733k|   while(result && (m_position != m_end))
  ------------------
  |  Branch (254:10): [True: 627k, False: 105k]
  |  Branch (254:20): [True: 594k, False: 33.5k]
  ------------------
  255|   594k|   {
  256|   594k|      result = (this->*m_parser_proc)();
  257|   594k|   }
  258|   138k|   --m_recursion_count;
  259|   138k|   return result;
  260|   138k|}
_ZN5boost13re_detail_50018basic_regex_parserIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE11unwind_altsEl:
 3080|   138k|{
 3081|       |   //
 3082|       |   // If we didn't actually add any states after the last 
 3083|       |   // alternative then that's an error:
 3084|       |   //
 3085|   138k|   if((this->m_alt_insert_point == static_cast<std::ptrdiff_t>(this->m_pdata->m_data.size()))
  ------------------
  |  Branch (3085:7): [True: 0, False: 138k]
  ------------------
 3086|   138k|      && (!m_alt_jumps.empty()) && (m_alt_jumps.back() > last_paren_start)
  ------------------
  |  Branch (3086:10): [True: 0, False: 0]
  |  Branch (3086:36): [True: 0, False: 0]
  ------------------
 3087|   138k|      &&
 3088|   138k|      !(
 3089|      0|         ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group)
  ------------------
  |  Branch (3089:10): [True: 0, False: 0]
  ------------------
 3090|      0|           &&
 3091|      0|         ((this->flags() & regbase::no_empty_expressions) == 0)
  ------------------
  |  Branch (3091:10): [True: 0, False: 0]
  ------------------
 3092|      0|        )
 3093|   138k|      )
 3094|      0|   {
 3095|      0|      fail(regex_constants::error_empty, this->m_position - this->m_base, "Can't terminate a sub-expression with an alternation operator |.");
 3096|      0|      return false;
 3097|      0|   }
 3098|       |   // 
 3099|       |   // Fix up our alternatives:
 3100|       |   //
 3101|   182k|   while((!m_alt_jumps.empty()) && (m_alt_jumps.back() > last_paren_start))
  ------------------
  |  Branch (3101:10): [True: 86.2k, False: 95.8k]
  |  Branch (3101:36): [True: 43.1k, False: 43.1k]
  ------------------
 3102|  43.1k|   {
 3103|       |      //
 3104|       |      // fix up the jump to point to the end of the states
 3105|       |      // that we've just added:
 3106|       |      //
 3107|  43.1k|      std::ptrdiff_t jump_offset = m_alt_jumps.back();
 3108|  43.1k|      m_alt_jumps.pop_back();
 3109|  43.1k|      this->m_pdata->m_data.align();
 3110|  43.1k|      re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset));
 3111|  43.1k|      if (jmp->type != syntax_element_jump)
  ------------------
  |  Branch (3111:11): [True: 0, False: 43.1k]
  ------------------
 3112|      0|      {
 3113|       |         // Something really bad happened, this used to be an assert, 
 3114|       |         // but we'll make it an error just in case we should ever get here.
 3115|      0|         fail(regex_constants::error_unknown, this->m_position - this->m_base, "Internal logic failed while compiling the expression, probably you added a repeat to something non-repeatable!");
 3116|      0|         return false;
 3117|      0|      }
 3118|  43.1k|      jmp->alt.i = this->m_pdata->m_data.size() - jump_offset;
 3119|  43.1k|   }
 3120|   138k|   return true;
 3121|   138k|}

_ZN5boost16cpp_regex_traitsIcEC2Ev:
  749|  33.5k|      : m_pimpl(BOOST_REGEX_DETAIL_NS::create_cpp_regex_traits<charT>(std::locale()))
  ------------------
  |  |  158|  33.5k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  33.5k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  33.5k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  33.5k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|  33.5k|   { }
_ZN5boost13re_detail_50023create_cpp_regex_traitsIcEENSt3__110shared_ptrIKNS0_31cpp_regex_traits_implementationIT_EEEERKNS2_6localeE:
  727|  33.5k|{
  728|  33.5k|   cpp_regex_traits_base<charT> key(l);
  729|  33.5k|   return ::boost::object_cache<cpp_regex_traits_base<charT>, cpp_regex_traits_implementation<charT> >::get(key, 5);
  730|  33.5k|}
_ZN5boost13re_detail_50021cpp_regex_traits_baseIcEC2ERKNSt3__16localeE:
  156|  33.5k|   { (void)imbue(l); }
_ZN5boost13re_detail_50021cpp_regex_traits_baseIcE5imbueERKNSt3__16localeE:
  186|  33.5k|{
  187|  33.5k|   std::locale result(m_locale);
  188|  33.5k|   m_locale = l;
  189|  33.5k|   m_pctype = &std::use_facet<std::ctype<charT>>(l);
  190|  33.5k|   m_pmessages = std::has_facet<std::messages<charT> >(l) ? &std::use_facet<std::messages<charT> >(l) : 0;
  ------------------
  |  Branch (190:18): [True: 33.5k, False: 0]
  ------------------
  191|  33.5k|   m_pcollate = &std::use_facet<std::collate<charT> >(l);
  192|  33.5k|   return result;
  193|  33.5k|}
_ZNK5boost13re_detail_50021cpp_regex_traits_baseIcEltERKS2_:
  165|  67.0k|   {
  166|  67.0k|      if(m_pctype == b.m_pctype)
  ------------------
  |  Branch (166:10): [True: 67.0k, False: 0]
  ------------------
  167|  67.0k|      {
  168|  67.0k|         if(m_pmessages == b.m_pmessages)
  ------------------
  |  Branch (168:13): [True: 67.0k, False: 0]
  ------------------
  169|  67.0k|         {
  170|  67.0k|            return m_pcollate < b.m_pcollate;
  171|  67.0k|         }
  172|      0|         return m_pmessages < b.m_pmessages;
  173|  67.0k|      }
  174|      0|      return m_pctype < b.m_pctype;
  175|  67.0k|   }
_ZN5boost13re_detail_50031cpp_regex_traits_implementationIcEC2ERKNS0_21cpp_regex_traits_baseIcEE:
  378|      1|      : cpp_regex_traits_char_layer<charT>(l)
  379|      1|   {
  380|      1|      init();
  381|      1|   }
_ZN5boost13re_detail_50027cpp_regex_traits_char_layerIcEC2ERKNS0_21cpp_regex_traits_baseIcEE:
  333|      1|   : cpp_regex_traits_base<char>(l)
  334|      1|   {
  335|      1|      init();
  336|      1|   }
_ZN5boost13re_detail_50027cpp_regex_traits_char_layerIcE4initEv:
  954|      1|   {
  955|       |      // we need to start by initialising our syntax map so we know which
  956|       |      // character is used for which purpose:
  957|      1|      std::memset(m_char_map, 0, sizeof(m_char_map));
  958|      1|#ifndef __IBMCPP__
  959|      1|      std::messages<char>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
  960|       |#else
  961|       |      std::messages<char>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
  962|       |#endif
  963|      1|      std::string cat_name(cpp_regex_traits<char>::get_catalog_name());
  964|      1|      if ((!cat_name.empty()) && (m_pmessages != 0))
  ------------------
  |  Branch (964:11): [True: 0, False: 1]
  |  Branch (964:34): [True: 0, False: 0]
  ------------------
  965|      0|      {
  966|      0|         cat = this->m_pmessages->open(
  967|      0|            cat_name,
  968|      0|            this->m_locale);
  969|      0|         if ((int)cat < 0)
  ------------------
  |  Branch (969:14): [True: 0, False: 0]
  ------------------
  970|      0|         {
  971|      0|            std::string m("Unable to open message catalog: ");
  972|      0|            std::runtime_error err(m + cat_name);
  973|      0|            boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
  974|      0|         }
  975|      0|      }
  976|       |      //
  977|       |      // if we have a valid catalog then load our messages:
  978|       |      //
  979|      1|      if ((int)cat >= 0)
  ------------------
  |  Branch (979:11): [True: 0, False: 1]
  ------------------
  980|      0|      {
  981|      0|#ifndef BOOST_NO_EXCEPTIONS
  982|      0|         try {
  983|      0|#endif
  984|      0|            for (regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
  ------------------
  |  Branch (984:54): [True: 0, False: 0]
  ------------------
  985|      0|            {
  986|      0|               string_type mss = this->m_pmessages->get(cat, 0, i, get_default_syntax(i));
  987|      0|               for (string_type::size_type j = 0; j < mss.size(); ++j)
  ------------------
  |  Branch (987:51): [True: 0, False: 0]
  ------------------
  988|      0|               {
  989|      0|                  m_char_map[static_cast<unsigned char>(mss[j])] = i;
  990|      0|               }
  991|      0|            }
  992|      0|            this->m_pmessages->close(cat);
  993|      0|#ifndef BOOST_NO_EXCEPTIONS
  994|      0|         }
  995|      0|         catch (...)
  996|      0|         {
  997|      0|            this->m_pmessages->close(cat);
  998|      0|            throw;
  999|      0|         }
 1000|      0|#endif
 1001|      0|      }
 1002|      1|      else
 1003|      1|      {
 1004|     60|         for (regex_constants::syntax_type j = 1; j < regex_constants::syntax_max; ++j)
  ------------------
  |  Branch (1004:51): [True: 59, False: 1]
  ------------------
 1005|     59|         {
 1006|     59|            const char* ptr = get_default_syntax(j);
 1007|    120|            while (ptr && *ptr)
  ------------------
  |  Branch (1007:20): [True: 120, False: 0]
  |  Branch (1007:27): [True: 61, False: 59]
  ------------------
 1008|     61|            {
 1009|     61|               m_char_map[static_cast<unsigned char>(*ptr)] = j;
 1010|     61|               ++ptr;
 1011|     61|            }
 1012|     59|         }
 1013|      1|      }
 1014|       |      //
 1015|       |      // finish off by calculating our escape types:
 1016|       |      //
 1017|      1|      unsigned char i = 'A';
 1018|      1|      do
 1019|    191|      {
 1020|    191|         if (m_char_map[i] == 0)
  ------------------
  |  Branch (1020:14): [True: 157, False: 34]
  ------------------
 1021|    157|         {
 1022|    157|            if (this->m_pctype->is(std::ctype_base::lower, i))
  ------------------
  |  Branch (1022:17): [True: 12, False: 145]
  ------------------
 1023|     12|               m_char_map[i] = regex_constants::escape_type_class;
 1024|    145|            else if (this->m_pctype->is(std::ctype_base::upper, i))
  ------------------
  |  Branch (1024:22): [True: 14, False: 131]
  ------------------
 1025|     14|               m_char_map[i] = regex_constants::escape_type_not_class;
 1026|    157|         }
 1027|    191|      } while (0xFF != i++);
  ------------------
  |  Branch (1027:16): [True: 190, False: 1]
  ------------------
 1028|      1|   }
_ZN5boost16cpp_regex_traitsIcE16get_catalog_nameEv:
  934|      2|{
  935|      2|#ifdef BOOST_HAS_THREADS
  936|      2|   std::lock_guard<std::mutex> lk(get_mutex_inst());
  937|      2|#endif
  938|      2|   std::string result(get_catalog_name_inst());
  939|      2|   return result;
  940|      2|}
_ZN5boost16cpp_regex_traitsIcE14get_mutex_instEv:
  945|      2|{
  946|      2|   static std::mutex s_mutex;
  947|      2|   return s_mutex;
  948|      2|}
_ZN5boost16cpp_regex_traitsIcE21get_catalog_name_instEv:
  927|      2|{
  928|      2|   static std::string s_name;
  929|      2|   return s_name;
  930|      2|}
_ZN5boost13re_detail_50031cpp_regex_traits_implementationIcE4initEv:
  602|      1|{
  603|      1|#ifndef __IBMCPP__
  604|      1|   typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
  605|       |#else
  606|       |   typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
  607|       |#endif
  608|      1|   std::string cat_name(cpp_regex_traits<charT>::get_catalog_name());
  609|      1|   if((!cat_name.empty()) && (this->m_pmessages != 0))
  ------------------
  |  Branch (609:7): [True: 0, False: 1]
  |  Branch (609:30): [True: 0, False: 0]
  ------------------
  610|      0|   {
  611|      0|      cat = this->m_pmessages->open(
  612|      0|         cat_name, 
  613|      0|         this->m_locale);
  614|      0|      if((int)cat < 0)
  ------------------
  |  Branch (614:10): [True: 0, False: 0]
  ------------------
  615|      0|      {
  616|      0|         std::string m("Unable to open message catalog: ");
  617|      0|         std::runtime_error err(m + cat_name);
  618|      0|         boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
  619|      0|      }
  620|      0|   }
  621|       |   //
  622|       |   // if we have a valid catalog then load our messages:
  623|       |   //
  624|      1|   if((int)cat >= 0)
  ------------------
  |  Branch (624:7): [True: 0, False: 1]
  ------------------
  625|      0|   {
  626|       |      //
  627|       |      // Error messages:
  628|       |      //
  629|      0|      for(boost::regex_constants::error_type i = static_cast<boost::regex_constants::error_type>(0); 
  630|      0|         i <= boost::regex_constants::error_unknown; 
  ------------------
  |  Branch (630:10): [True: 0, False: 0]
  ------------------
  631|      0|         i = static_cast<boost::regex_constants::error_type>(i + 1))
  632|      0|      {
  633|      0|         const char* p = get_default_error_string(i);
  634|      0|         string_type default_message;
  635|      0|         while(*p)
  ------------------
  |  Branch (635:16): [True: 0, False: 0]
  ------------------
  636|      0|         {
  637|      0|            default_message.append(1, this->m_pctype->widen(*p));
  638|      0|            ++p;
  639|      0|         }
  640|      0|         string_type s = this->m_pmessages->get(cat, 0, i+200, default_message);
  641|      0|         std::string result;
  642|      0|         for(std::string::size_type j = 0; j < s.size(); ++j)
  ------------------
  |  Branch (642:44): [True: 0, False: 0]
  ------------------
  643|      0|         {
  644|      0|            result.append(1, this->m_pctype->narrow(s[j], 0));
  645|      0|         }
  646|      0|         m_error_strings[i] = result;
  647|      0|      }
  648|       |      //
  649|       |      // Custom class names:
  650|       |      //
  651|      0|      static const char_class_type masks[16] = 
  652|      0|      {
  653|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::alnum),
  654|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::alpha),
  655|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::cntrl),
  656|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::digit),
  657|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::graph),
  658|      0|         cpp_regex_traits_implementation<charT>::mask_horizontal,
  659|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::lower),
  660|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::print),
  661|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::punct),
  662|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::space),
  663|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::upper),
  664|      0|         cpp_regex_traits_implementation<charT>::mask_vertical,
  665|      0|         static_cast<unsigned_native_mask_type>(std::ctype<charT>::xdigit),
  666|      0|         cpp_regex_traits_implementation<charT>::mask_blank,
  667|      0|         cpp_regex_traits_implementation<charT>::mask_word,
  668|      0|         cpp_regex_traits_implementation<charT>::mask_unicode,
  669|      0|      };
  670|      0|      static const string_type null_string;
  671|      0|      for(unsigned int j = 0; j <= 13; ++j)
  ------------------
  |  Branch (671:31): [True: 0, False: 0]
  ------------------
  672|      0|      {
  673|      0|         string_type s(this->m_pmessages->get(cat, 0, j+300, null_string));
  674|      0|         if(!s.empty())
  ------------------
  |  Branch (674:13): [True: 0, False: 0]
  ------------------
  675|      0|            this->m_custom_class_names[s] = masks[j];
  676|      0|      }
  677|      0|   }
  678|       |   //
  679|       |   // get the collation format used by m_pcollate:
  680|       |   //
  681|      1|   m_collate_type = BOOST_REGEX_DETAIL_NS::find_sort_syntax(this, &m_collate_delim);
  ------------------
  |  |  158|      1|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      1|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      1|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      1|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  682|      1|}
_ZNK5boost13re_detail_50031cpp_regex_traits_implementationIcE9transformEPKcS4_:
  512|      3|{
  513|       |   //
  514|       |   // PRECONDITIONS:
  515|       |   //
  516|       |   // A bug in gcc 3.2 (and maybe other versions as well) treats
  517|       |   // p1 as a null terminated string, for efficiency reasons 
  518|       |   // we work around this elsewhere, but just assert here that
  519|       |   // we adhere to gcc's (buggy) preconditions...
  520|       |   //
  521|      3|   BOOST_REGEX_ASSERT(*p2 == 0);
  ------------------
  |  |   58|      3|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      3|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  522|       |   //
  523|       |   // swallowing all exceptions here is a bad idea
  524|       |   // however at least one std lib will always throw
  525|       |   // std::bad_alloc for certain arguments...
  526|       |   //
  527|      3|   string_type result, result2;
  528|       |#if defined(_CPPLIB_VER)
  529|       |   //
  530|       |   // A bug in VC11 and 12 causes the program to hang if we pass a null-string
  531|       |   // to std::collate::transform, but only for certain locales :-(
  532|       |   // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware).
  533|       |   //
  534|       |   if(*p1 == 0)
  535|       |   {
  536|       |      return result;
  537|       |   }
  538|       |#endif
  539|      3|#ifndef BOOST_NO_EXCEPTIONS
  540|      3|   try{
  541|      3|#endif
  542|      3|      result = this->m_pcollate->transform(p1, p2);
  543|       |      //
  544|       |      // some implementations (Dinkumware) append unnecessary trailing \0's:
  545|      3|      while((!result.empty()) && (charT(0) == *result.rbegin()))
  ------------------
  |  Branch (545:13): [True: 3, False: 0]
  |  Branch (545:13): [True: 0, False: 3]
  |  Branch (545:34): [True: 0, False: 3]
  ------------------
  546|      0|         result.erase(result.size() - 1);
  547|       |      //
  548|       |      // We may have NULL's used as separators between sections of the collate string,
  549|       |      // an example would be Boost.Locale.  We have no way to detect this case via
  550|       |      // #defines since this can be used with any compiler/platform combination.
  551|       |      // Unfortunately our state machine (which was devised when all implementations
  552|       |      // used underlying C language API's) can't cope with that case.  One workaround
  553|       |      // is to replace each character with 2, fortunately this code isn't used that
  554|       |      // much as this is now slower than before :-(
  555|       |      //
  556|      3|      typedef typename std::make_unsigned<charT>::type uchar_type;
  557|      3|      result2.reserve(result.size() * 2 + 2);
  558|      6|      for(unsigned i = 0; i < result.size(); ++i)
  ------------------
  |  Branch (558:27): [True: 3, False: 3]
  ------------------
  559|      3|      {
  560|      3|         if(static_cast<uchar_type>(result[i]) == (std::numeric_limits<uchar_type>::max)())
  ------------------
  |  Branch (560:13): [True: 0, False: 3]
  ------------------
  561|      0|         {
  562|      0|            result2.append(1, charT((std::numeric_limits<uchar_type>::max)())).append(1, charT('b'));
  563|      0|         }
  564|      3|         else
  565|      3|         {
  566|      3|            result2.append(1, static_cast<charT>(1 + static_cast<uchar_type>(result[i]))).append(1, charT('b') - 1);
  567|      3|         }
  568|      3|      }
  569|      3|      BOOST_REGEX_ASSERT(std::find(result2.begin(), result2.end(), charT(0)) == result2.end());
  ------------------
  |  |   58|      3|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      3|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  570|      3|#ifndef BOOST_NO_EXCEPTIONS
  571|      3|   }
  572|      3|   catch(...)
  573|      3|   {
  574|      0|   }
  575|      3|#endif
  576|      3|   return result2;
  577|      3|}
_ZNK5boost16cpp_regex_traitsIcE16lookup_classnameEPKcS3_:
  792|   196k|   {
  793|   196k|      return m_pimpl->lookup_classname(p1, p2);
  794|   196k|   }
_ZNK5boost13re_detail_50031cpp_regex_traits_implementationIcE16lookup_classnameEPKcS4_:
  392|   196k|   {
  393|   196k|      char_class_type result = lookup_classname_imp(p1, p2);
  394|   196k|      if(result == 0)
  ------------------
  |  Branch (394:10): [True: 0, False: 196k]
  ------------------
  395|      0|      {
  396|      0|         string_type temp(p1, p2);
  397|      0|         this->m_pctype->tolower(&*temp.begin(), &*temp.begin() + temp.size());
  398|      0|         result = lookup_classname_imp(&*temp.begin(), &*temp.begin() + temp.size());
  399|      0|      }
  400|   196k|      return result;
  401|   196k|   }
_ZNK5boost13re_detail_50031cpp_regex_traits_implementationIcE20lookup_classname_impEPKcS4_:
  687|   196k|{
  688|   196k|   static const char_class_type masks[22] = 
  689|   196k|   {
  690|   196k|      0,
  691|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum),
  692|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::alpha),
  693|   196k|      cpp_regex_traits_implementation<charT>::mask_blank,
  694|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::cntrl),
  695|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::digit),
  696|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::digit),
  697|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::graph),
  698|   196k|      cpp_regex_traits_implementation<charT>::mask_horizontal,
  699|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::lower),
  700|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::lower),
  701|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::print),
  702|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::punct),
  703|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::space),
  704|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::space),
  705|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::upper),
  706|   196k|      cpp_regex_traits_implementation<charT>::mask_unicode,
  707|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::upper),
  708|   196k|      cpp_regex_traits_implementation<charT>::mask_vertical,
  709|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, 
  710|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, 
  711|   196k|      static_cast<unsigned_native_mask_type>(std::ctype<char>::xdigit),
  712|   196k|   };
  713|   196k|   if(!m_custom_class_names.empty())
  ------------------
  |  Branch (713:7): [True: 0, False: 196k]
  ------------------
  714|      0|   {
  715|      0|      typedef typename std::map<std::basic_string<charT>, char_class_type>::const_iterator map_iter;
  716|      0|      map_iter pos = m_custom_class_names.find(string_type(p1, p2));
  717|      0|      if(pos != m_custom_class_names.end())
  ------------------
  |  Branch (717:10): [True: 0, False: 0]
  ------------------
  718|      0|         return pos->second;
  719|      0|   }
  720|   196k|   std::size_t state_id = 1 + BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
  ------------------
  |  |  158|   196k|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|   196k|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|   196k|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|   196k|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  721|   196k|   BOOST_REGEX_ASSERT(state_id < sizeof(masks) / sizeof(masks[0]));
  ------------------
  |  |   58|   196k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   196k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  722|   196k|   return masks[state_id];
  723|   196k|}
_ZNK5boost16cpp_regex_traitsIcE12error_stringENS_15regex_constants10error_typeE:
  866|     12|   {
  867|     12|      return m_pimpl->error_string(n);
  868|     12|   }
_ZNK5boost13re_detail_50031cpp_regex_traits_implementationIcE12error_stringENS_15regex_constants10error_typeE:
  383|     12|   {
  384|     12|      if(!m_error_strings.empty())
  ------------------
  |  Branch (384:10): [True: 0, False: 12]
  ------------------
  385|      0|      {
  386|      0|         std::map<int, std::string>::const_iterator p = m_error_strings.find(n);
  387|      0|         return (p == m_error_strings.end()) ? std::string(get_default_error_string(n)) : p->second;
  ------------------
  |  Branch (387:17): [True: 0, False: 0]
  ------------------
  388|      0|      }
  389|     12|      return get_default_error_string(n);
  390|     12|   }
_ZNK5boost16cpp_regex_traitsIcE11syntax_typeEc:
  756|  1.68M|   {
  757|  1.68M|      return m_pimpl->syntax_type(c);
  758|  1.68M|   }
_ZNK5boost13re_detail_50027cpp_regex_traits_char_layerIcE11syntax_typeEc:
  339|  1.68M|   {
  340|  1.68M|      return m_char_map[static_cast<unsigned char>(c)];
  341|  1.68M|   }
_ZNK5boost16cpp_regex_traitsIcE18escape_syntax_typeEc:
  760|   172k|   {
  761|   172k|      return m_pimpl->escape_syntax_type(c);
  762|   172k|   }
_ZNK5boost13re_detail_50027cpp_regex_traits_char_layerIcE18escape_syntax_typeEc:
  343|   172k|   {
  344|   172k|      return m_char_map[static_cast<unsigned char>(c)];
  345|   172k|   }
_ZNK5boost16cpp_regex_traitsIcE9translateEcb:
  772|   212M|   {
  773|   212M|      return icase ? m_pimpl->m_pctype->tolower(c) : c;
  ------------------
  |  Branch (773:14): [True: 0, False: 212M]
  ------------------
  774|   212M|   }
_ZNK5boost16cpp_regex_traitsIcE7isctypeEcj:
  800|  7.36M|   {
  801|  7.36M|      typedef typename std::ctype<charT>::mask ctype_mask;
  802|       |
  803|  7.36M|      static const ctype_mask mask_base = 
  804|  7.36M|         static_cast<ctype_mask>(
  805|  7.36M|            std::ctype<charT>::alnum 
  806|  7.36M|            | std::ctype<charT>::alpha
  807|  7.36M|            | std::ctype<charT>::cntrl
  808|  7.36M|            | std::ctype<charT>::digit
  809|  7.36M|            | std::ctype<charT>::graph
  810|  7.36M|            | std::ctype<charT>::lower
  811|  7.36M|            | std::ctype<charT>::print
  812|  7.36M|            | std::ctype<charT>::punct
  813|  7.36M|            | std::ctype<charT>::space
  814|  7.36M|            | std::ctype<charT>::upper
  815|  7.36M|            | std::ctype<charT>::xdigit);
  816|       |
  817|  7.36M|      if((f & mask_base) 
  ------------------
  |  Branch (817:10): [True: 7.36M, False: 0]
  ------------------
  818|  7.36M|         && (m_pimpl->m_pctype->is(
  ------------------
  |  Branch (818:13): [True: 718k, False: 6.64M]
  ------------------
  819|  7.36M|            static_cast<ctype_mask>(f & mask_base), c)))
  820|   718k|         return true;
  821|  6.64M|      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c))
  ------------------
  |  |  158|  6.64M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  6.64M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.64M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  6.64M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                    else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c))
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (821:15): [True: 0, False: 6.64M]
  |  Branch (821:100): [True: 0, False: 0]
  ------------------
  822|      0|         return true;
  823|  6.64M|      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_word) && (c == '_'))
  ------------------
  |  |  158|  6.64M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  6.64M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.64M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  6.64M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (823:15): [True: 929k, False: 5.71M]
  |  Branch (823:97): [True: 4.79k, False: 924k]
  ------------------
  824|  4.79k|         return true;
  825|  6.63M|      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_blank) 
  ------------------
  |  |  158|  6.63M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  6.63M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.63M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  6.63M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:15): [True: 0, False: 6.63M]
  ------------------
  826|  6.63M|         && m_pimpl->m_pctype->is(std::ctype<charT>::space, c)
  ------------------
  |  Branch (826:13): [True: 0, False: 0]
  ------------------
  827|  6.63M|         && !BOOST_REGEX_DETAIL_NS::is_separator(c))
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (827:13): [True: 0, False: 0]
  ------------------
  828|      0|         return true;
  829|  6.63M|      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical) 
  ------------------
  |  |  158|  6.63M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  6.63M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.63M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  6.63M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (829:15): [True: 0, False: 6.63M]
  ------------------
  830|  6.63M|         && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v')))
  ------------------
  |  Branch (830:14): [True: 0, False: 0]
  |  Branch (830:65): [True: 0, False: 0]
  ------------------
  831|      0|         return true;
  832|  6.63M|      else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_horizontal) 
  ------------------
  |  |  158|  6.63M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  6.63M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  6.63M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  6.63M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (832:15): [True: 0, False: 6.63M]
  ------------------
  833|  6.63M|         && this->isctype(c, std::ctype<charT>::space) && !this->isctype(c, BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical))
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (833:13): [True: 0, False: 0]
  |  Branch (833:59): [True: 0, False: 0]
  ------------------
  834|      0|         return true;
  835|       |#ifdef __CYGWIN__
  836|       |      //
  837|       |      // Cygwin has a buggy ctype facet, see https://www.cygwin.com/ml/cygwin/2012-08/msg00178.html:
  838|       |      //
  839|       |      else if((f & std::ctype<charT>::xdigit) == std::ctype<charT>::xdigit)
  840|       |      {
  841|       |         if((c >= 'a') && (c <= 'f'))
  842|       |            return true;
  843|       |         if((c >= 'A') && (c <= 'F'))
  844|       |            return true;
  845|       |      }
  846|       |#endif
  847|  6.63M|      return false;
  848|  7.36M|   }
_ZN5boost16cpp_regex_traitsIcE6lengthEPKc:
  752|  28.7k|   {
  753|  28.7k|      return std::char_traits<charT>::length(p);
  754|  28.7k|   }

_ZN5boost15regex_constantsanENS0_12_match_flagsES1_:
   96|   247M|{ return static_cast<match_flags>(static_cast<std::int32_t>(m1) & static_cast<std::int32_t>(m2)); }
_ZN5boost15regex_constantsorENS0_12_match_flagsES1_:
   98|  39.6M|{ return static_cast<match_flags>(static_cast<std::int32_t>(m1) | static_cast<std::int32_t>(m2)); }
_ZN5boost15regex_constantsoRERNS0_12_match_flagsES1_:
  106|  26.4M|{ m1 = m1|m2; return m1; }

_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEEC2ERKS9_:
   62|  5.83M|      : m_subs(a), m_base(), m_null(), m_last_closed_paren(0), m_is_singular(true) {}
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE9set_firstES5_:
  500|  13.2M|   {
  501|  13.2M|      BOOST_REGEX_ASSERT(m_subs.size() > 2);
  ------------------
  |  |   58|  13.2M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  13.2M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  502|       |      // set up prefix:
  503|  13.2M|      m_subs[1].second = i;
  504|  13.2M|      m_subs[1].matched = (m_subs[1].first != i);
  505|       |      // set up $0:
  506|  13.2M|      m_subs[2].first = i;
  507|       |      // zero out everything else:
  508|  23.7M|      for(size_type n = 3; n < m_subs.size(); ++n)
  ------------------
  |  Branch (508:28): [True: 10.4M, False: 13.2M]
  ------------------
  509|  10.4M|      {
  510|  10.4M|         m_subs[n].first = m_subs[n].second = m_subs[0].second;
  511|  10.4M|         m_subs[n].matched = false;
  512|  10.4M|      }
  513|  13.2M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE9set_firstES5_mb:
  515|  18.0M|   {
  516|  18.0M|      BOOST_REGEX_ASSERT(pos+2 < m_subs.size());
  ------------------
  |  |   58|  18.0M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  18.0M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  517|  18.0M|      if(pos || escape_k)
  ------------------
  |  Branch (517:10): [True: 18.0M, False: 0]
  |  Branch (517:17): [True: 0, False: 0]
  ------------------
  518|  18.0M|      {
  519|  18.0M|         m_subs[pos+2].first = i;
  520|  18.0M|         if(escape_k)
  ------------------
  |  Branch (520:13): [True: 0, False: 18.0M]
  ------------------
  521|      0|         {
  522|      0|            m_subs[1].second = i;
  523|      0|            m_subs[1].matched = (m_subs[1].first != m_subs[1].second);
  524|      0|         }
  525|  18.0M|      }
  526|      0|      else
  527|      0|         set_first(i);
  528|  18.0M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE10set_secondES5_:
  443|  6.01M|   {
  444|  6.01M|      BOOST_REGEX_ASSERT(m_subs.size() > 2);
  ------------------
  |  |   58|  6.01M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  6.01M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  445|  6.01M|      m_subs[2].second = i;
  446|  6.01M|      m_subs[2].matched = true;
  447|  6.01M|      m_subs[0].first = i;
  448|  6.01M|      m_subs[0].matched = (m_subs[0].first != m_subs[0].second);
  449|  6.01M|      m_null.first = i;
  450|  6.01M|      m_null.second = i;
  451|  6.01M|      m_null.matched = false;
  452|  6.01M|      m_is_singular = false;
  453|  6.01M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE10set_secondES5_mbb:
  456|  10.8M|   {
  457|  10.8M|      if(pos)
  ------------------
  |  Branch (457:10): [True: 10.8M, False: 0]
  ------------------
  458|  10.8M|         m_last_closed_paren = static_cast<int>(pos);
  459|  10.8M|      pos += 2;
  460|  10.8M|      BOOST_REGEX_ASSERT(m_subs.size() > pos);
  ------------------
  |  |   58|  10.8M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  10.8M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  461|  10.8M|      m_subs[pos].second = i;
  462|  10.8M|      m_subs[pos].matched = m;
  463|  10.8M|      if((pos == 2) && !escape_k)
  ------------------
  |  Branch (463:10): [True: 0, False: 10.8M]
  |  Branch (463:24): [True: 0, False: 0]
  ------------------
  464|      0|      {
  465|      0|         m_subs[0].first = i;
  466|      0|         m_subs[0].matched = (m_subs[0].first != m_subs[0].second);
  467|      0|         m_null.first = i;
  468|      0|         m_null.second = i;
  469|      0|         m_null.matched = false;
  470|      0|         m_is_singular = false;
  471|      0|      }
  472|  10.8M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE8set_sizeEmS5_S5_:
  474|  13.2M|   {
  475|  13.2M|      value_type v(j);
  476|  13.2M|      size_type len = m_subs.size();
  477|  13.2M|      if(len > n + 2)
  ------------------
  |  Branch (477:10): [True: 648, False: 13.2M]
  ------------------
  478|    648|      {
  479|    648|         m_subs.erase(m_subs.begin()+n+2, m_subs.end());
  480|    648|         std::fill(m_subs.begin(), m_subs.end(), v);
  481|    648|      }
  482|  13.2M|      else
  483|  13.2M|      {
  484|  13.2M|         std::fill(m_subs.begin(), m_subs.end(), v);
  485|  13.2M|         if(n+2 != len)
  ------------------
  |  Branch (485:13): [True: 5.84M, False: 7.37M]
  ------------------
  486|  5.84M|            m_subs.insert(m_subs.end(), n+2-len, v);
  487|  13.2M|      }
  488|  13.2M|      m_subs[1].first = i;
  489|  13.2M|      m_last_closed_paren = 0;
  490|  13.2M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE8set_baseES5_:
  492|  13.2M|   {
  493|  13.2M|      m_base = pos;
  494|  13.2M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE14set_named_subsENS1_10shared_ptrINS_13re_detail_50020named_subexpressionsEEE:
  532|  13.2M|   {
  533|  13.2M|      m_named_subs = subs;
  534|  13.2M|   }
_ZNK5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEEixEi:
  200|  19.8M|   {
  201|  19.8M|      if(m_is_singular && m_subs.empty())
  ------------------
  |  Branch (201:10): [True: 10.2M, False: 9.60M]
  |  Branch (201:27): [True: 0, False: 10.2M]
  ------------------
  202|      0|         raise_logic_error();
  203|  19.8M|      sub += 2;
  204|  19.8M|      if(sub < (int)m_subs.size() && (sub >= 0))
  ------------------
  |  Branch (204:10): [True: 19.8M, False: 0]
  |  Branch (204:38): [True: 19.8M, False: 0]
  ------------------
  205|  19.8M|      {
  206|  19.8M|         return m_subs[sub];
  207|  19.8M|      }
  208|      0|      return m_null;
  209|  19.8M|   }
_ZNK5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEE6suffixEv:
  307|  6.01M|   {
  308|  6.01M|      if(m_is_singular)
  ------------------
  |  Branch (308:10): [True: 0, False: 6.01M]
  ------------------
  309|      0|         raise_logic_error();
  310|  6.01M|      return (*this)[-2];
  311|  6.01M|   }
_ZN5boost13match_resultsINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEED2Ev:
   90|  5.83M|   ~match_results(){}

_ZN5boost13re_detail_50013get_mem_blockEv:
  159|  13.2M|{
  160|  13.2M|   return mem_block_cache::instance().get();
  161|  13.2M|}
_ZN5boost13re_detail_50015mem_block_cache8instanceEv:
   71|  26.4M|   {
   72|  26.4M|      static mem_block_cache block_cache = { { {nullptr} } };
   73|  26.4M|      return block_cache;
   74|  26.4M|   }
_ZN5boost13re_detail_50015mem_block_cacheD2Ev:
   44|      1|   {
   45|     17|     for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
  ------------------
  |  |  441|     17|#     define BOOST_REGEX_MAX_CACHE_BLOCKS 16
  ------------------
  |  Branch (45:24): [True: 16, False: 1]
  ------------------
   46|     16|       if (cache[i].load()) ::operator delete(cache[i].load());
  ------------------
  |  Branch (46:12): [True: 16, False: 0]
  ------------------
   47|     16|     }
   48|      1|   }
_ZN5boost13re_detail_50015mem_block_cache3getEv:
   50|  13.2M|   {
   51|  13.5M|     for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
  ------------------
  |  |  441|  13.5M|#     define BOOST_REGEX_MAX_CACHE_BLOCKS 16
  ------------------
  |  Branch (51:24): [True: 13.5M, False: 16.7k]
  ------------------
   52|  13.5M|       void* p = cache[i].load();
   53|  13.5M|       if (p != NULL) {
  ------------------
  |  Branch (53:12): [True: 13.2M, False: 323k]
  ------------------
   54|  13.2M|         if (cache[i].compare_exchange_strong(p, NULL)) return p;
  ------------------
  |  Branch (54:14): [True: 13.2M, False: 0]
  ------------------
   55|  13.2M|       }
   56|  13.5M|     }
   57|  16.7k|     return ::operator new(BOOST_REGEX_BLOCKSIZE);
  ------------------
  |  |  429|  16.7k|#     define BOOST_REGEX_BLOCKSIZE 4096
  ------------------
   58|  13.2M|   }
_ZN5boost13re_detail_50013put_mem_blockEPv:
  164|  13.2M|{
  165|  13.2M|   mem_block_cache::instance().put(p);
  166|  13.2M|}
_ZN5boost13re_detail_50015mem_block_cache3putEPv:
   60|  13.2M|   {
   61|  13.5M|     for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) {
  ------------------
  |  |  441|  13.5M|#     define BOOST_REGEX_MAX_CACHE_BLOCKS 16
  ------------------
  |  Branch (61:24): [True: 13.5M, False: 16.7k]
  ------------------
   62|  13.5M|       void* p = cache[i].load();
   63|  13.5M|       if (p == NULL) {
  ------------------
  |  Branch (63:12): [True: 13.2M, False: 323k]
  ------------------
   64|  13.2M|         if (cache[i].compare_exchange_strong(p, ptr)) return;
  ------------------
  |  Branch (64:14): [True: 13.2M, False: 0]
  ------------------
   65|  13.2M|       }
   66|  13.5M|     }
   67|  16.7k|     ::operator delete(ptr);
   68|  16.7k|   }

_ZN5boost12object_cacheINS_13re_detail_50021cpp_regex_traits_baseIcEENS1_31cpp_regex_traits_implementationIcEEE3getERKS3_m:
   66|  33.5k|{
   67|  33.5k|#ifdef BOOST_HAS_THREADS
   68|  33.5k|   static std::mutex mut;
   69|  33.5k|   std::lock_guard<std::mutex> l(mut);
   70|  33.5k|   return do_get(k, l_max_cache_size);
   71|       |#else
   72|       |   return do_get(k, l_max_cache_size);
   73|       |#endif
   74|  33.5k|}
_ZN5boost12object_cacheINS_13re_detail_50021cpp_regex_traits_baseIcEENS1_31cpp_regex_traits_implementationIcEEE6do_getERKS3_m:
   81|  33.5k|{
   82|  33.5k|   typedef typename object_cache<Key, Object>::data object_data;
   83|  33.5k|   typedef typename map_type::size_type map_size_type;
   84|  33.5k|   static object_data s_data;
   85|       |
   86|       |   //
   87|       |   // see if the object is already in the cache:
   88|       |   //
   89|  33.5k|   map_iterator mpos = s_data.index.find(k);
   90|  33.5k|   if(mpos != s_data.index.end())
  ------------------
  |  Branch (90:7): [True: 33.5k, False: 1]
  ------------------
   91|  33.5k|   {
   92|       |      //
   93|       |      // Eureka! 
   94|       |      // We have a cached item, bump it up the list and return it:
   95|       |      //
   96|  33.5k|      if(--(s_data.cont.end()) != mpos->second)
  ------------------
  |  Branch (96:10): [True: 0, False: 33.5k]
  ------------------
   97|      0|      {
   98|       |         // splice out the item we want to move:
   99|      0|         list_type temp;
  100|      0|         temp.splice(temp.end(), s_data.cont, mpos->second);
  101|       |         // and now place it at the end of the list:
  102|      0|         s_data.cont.splice(s_data.cont.end(), temp, temp.begin());
  103|      0|         BOOST_REGEX_ASSERT(*(s_data.cont.back().second) == k);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  104|       |         // update index with new position:
  105|      0|         mpos->second = --(s_data.cont.end());
  106|      0|         BOOST_REGEX_ASSERT(&(mpos->first) == mpos->second->second);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  107|      0|         BOOST_REGEX_ASSERT(&(mpos->first) == s_data.cont.back().second);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  108|      0|      }
  109|  33.5k|      return s_data.cont.back().first;
  110|  33.5k|   }
  111|       |   //
  112|       |   // if we get here then the item is not in the cache,
  113|       |   // so create it:
  114|       |   //
  115|      1|   std::shared_ptr<Object const> result(new Object(k));
  116|       |   //
  117|       |   // Add it to the list, and index it:
  118|       |   //
  119|      1|   s_data.cont.push_back(value_type(result, static_cast<Key const*>(0)));
  120|      1|   s_data.index.insert(std::make_pair(k, --(s_data.cont.end())));
  121|      1|   s_data.cont.back().second = &(s_data.index.find(k)->first);
  122|      1|   map_size_type s = s_data.index.size();
  123|      1|   BOOST_REGEX_ASSERT(s_data.index[k]->first.get() == result.get());
  ------------------
  |  |   58|      1|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      1|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  124|      1|   BOOST_REGEX_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second);
  ------------------
  |  |   58|      1|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      1|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  125|      1|   BOOST_REGEX_ASSERT(s_data.index.find(k)->first == k);
  ------------------
  |  |   58|      1|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      1|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  126|      1|   if(s > l_max_cache_size)
  ------------------
  |  Branch (126:7): [True: 0, False: 1]
  ------------------
  127|      0|   {
  128|       |      //
  129|       |      // We have too many items in the list, so we need to start
  130|       |      // popping them off the back of the list, but only if they're
  131|       |      // being held uniquely by us:
  132|       |      //
  133|      0|      list_iterator pos = s_data.cont.begin();
  134|      0|      list_iterator last = s_data.cont.end();
  135|      0|      while((pos != last) && (s > l_max_cache_size))
  ------------------
  |  Branch (135:13): [True: 0, False: 0]
  |  Branch (135:30): [True: 0, False: 0]
  ------------------
  136|      0|      {
  137|      0|         if(pos->first.use_count() == 1)
  ------------------
  |  Branch (137:13): [True: 0, False: 0]
  ------------------
  138|      0|         {
  139|      0|            list_iterator condemmed(pos);
  140|      0|            ++pos;
  141|       |            // now remove the items from our containers, 
  142|       |            // then order has to be as follows:
  143|      0|            BOOST_REGEX_ASSERT(s_data.index.find(*(condemmed->second)) != s_data.index.end());
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  144|      0|            s_data.index.erase(*(condemmed->second));
  145|      0|            s_data.cont.erase(condemmed); 
  146|      0|            --s;
  147|      0|         }
  148|      0|         else
  149|      0|            ++pos;
  150|      0|      }
  151|      0|      BOOST_REGEX_ASSERT(s_data.index[k]->first.get() == result.get());
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  152|      0|      BOOST_REGEX_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  153|      0|      BOOST_REGEX_ASSERT(s_data.index.find(k)->first == k);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  154|      0|   }
  155|      1|   return result;
  156|  33.5k|}

_ZN5boost11regex_errorC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_15regex_constants10error_typeEl:
   44|     12|      : std::runtime_error(s)
   45|     12|      , m_error_code(err)
   46|     12|      , m_position(pos)
   47|     12|   {
   48|     12|   }
_ZN5boost13re_detail_50011raise_errorINS_20regex_traits_wrapperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEEEvRKT_NS_15regex_constants10error_typeE:
   92|     12|{
   93|     12|   (void)t;  // warning suppression
   94|     12|   regex_error e(t.error_string(code), code, 0);
   95|     12|   ::boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(e);
   96|     12|}
_ZN5boost13re_detail_50019raise_runtime_errorINS_11regex_errorEEEvRKT_:
   82|     12|{
   83|     12|#ifndef BOOST_REGEX_STANDALONE
   84|     12|   ::boost::throw_exception(ex);
   85|       |#else
   86|       |   throw ex;
   87|       |#endif
   88|     12|}

_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2ES6_S6_RNS_13match_resultsIS6_SA_EERKNS_11basic_regexIcSE_EENS_15regex_constants12_match_flagsES6_:
  362|  13.2M|      :  m_result(what), base(first), last(end), 
  363|  13.2M|         position(first), backstop(l_base), re(e), traits_inst(e.get_traits()), 
  364|  13.2M|         m_independent(false), next_count(&rep_obj), rep_obj(&next_count)
  365|  13.2M|      , m_recursions(0)
  366|  13.2M|   {
  367|  13.2M|      construct_init(e, f);
  368|  13.2M|   }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEEC2EPPS7_:
  257|  13.2M|   repeater_count(repeater_count** s) : stack(s), next(0), state_id(-1), count(0), start_pos() {}
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEED2Ev:
  282|  20.1M|   {
  283|  20.1M|      if(next)
  ------------------
  |  Branch (283:10): [True: 6.90M, False: 13.2M]
  ------------------
  284|  6.90M|         *stack = next;
  285|  20.1M|   }
_ZN5boost13re_detail_5009can_startEcPKhh:
   61|   230M|{
   62|   230M|   return map[(unsigned char)c] & mask;
   63|   230M|}
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEEC2EiPPS7_S6_i:
  260|  6.90M|      : start_pos(start)
  261|  6.90M|   {
  262|  6.90M|      state_id = i;
  263|  6.90M|      stack = s;
  264|  6.90M|      next = *stack;
  265|  6.90M|      *stack = this;
  266|  6.90M|      if((state_id > next->state_id) && (next->state_id >= 0))
  ------------------
  |  Branch (266:10): [True: 5.48M, False: 1.42M]
  |  Branch (266:41): [True: 0, False: 5.48M]
  ------------------
  267|      0|         count = 0;
  268|  6.90M|      else
  269|  6.90M|      {
  270|  6.90M|         repeater_count* p = next;
  271|  6.90M|         p = unwind_until(state_id, p, current_recursion_id);
  272|  6.90M|         if(p)
  ------------------
  |  Branch (272:13): [True: 1.42M, False: 5.48M]
  ------------------
  273|  1.42M|         {
  274|  1.42M|            count = p->count;
  275|  1.42M|            start_pos = p->start_pos;
  276|  1.42M|         }
  277|  5.48M|         else
  278|  5.48M|            count = 0;
  279|  6.90M|      }
  280|  6.90M|   }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEE12unwind_untilEiPS7_i:
  240|  6.90M|   { 
  241|  12.3M|      while(p && (p->state_id != n))
  ------------------
  |  Branch (241:13): [True: 6.90M, False: 5.48M]
  |  Branch (241:18): [True: 5.48M, False: 1.42M]
  ------------------
  242|  5.48M|      {
  243|  5.48M|         if(-2 - current_recursion_id == p->state_id)
  ------------------
  |  Branch (243:13): [True: 0, False: 5.48M]
  ------------------
  244|      0|            return 0;
  245|  5.48M|         p = p->next;
  246|  5.48M|         if(p && (p->state_id < 0))
  ------------------
  |  Branch (246:13): [True: 0, False: 5.48M]
  |  Branch (246:18): [True: 0, False: 0]
  ------------------
  247|      0|         {
  248|      0|            p = unwind_until(p->state_id, p, current_recursion_id);
  249|      0|            if(!p)
  ------------------
  |  Branch (249:16): [True: 0, False: 0]
  ------------------
  250|      0|               return p;
  251|      0|            p = p->next;
  252|      0|         }
  253|  5.48M|      }
  254|  6.90M|      return p;
  255|  6.90M|   }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEE6get_idEv:
  287|  88.7M|   int get_id() { return state_id; }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEE17check_null_repeatERKS6_m:
  290|  51.2M|   {
  291|       |      // this is called when we are about to start a new repeat,
  292|       |      // if the last one was NULL move our count to max,
  293|       |      // otherwise save the current position.
  294|  51.2M|      bool result = (count == 0) ? false : (pos == start_pos);
  ------------------
  |  Branch (294:21): [True: 5.48M, False: 45.8M]
  ------------------
  295|  51.2M|      if(result)
  ------------------
  |  Branch (295:10): [True: 0, False: 51.2M]
  ------------------
  296|      0|         count = max;
  297|  51.2M|      else
  298|  51.2M|         start_pos = pos;
  299|  51.2M|      return result;
  300|  51.2M|   }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEE9get_countEv:
  286|   102M|   std::size_t get_count() { return count; }
_ZN5boost13re_detail_50014repeater_countINSt3__111__wrap_iterIPKcEEEppEv:
  288|  48.7M|   std::size_t operator++() { return ++count; }
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE25match_dot_repeat_dispatchEv:
  417|   444k|   {
  418|   444k|      return ::boost::is_random_access_iterator<BidiIterator>::value ? match_dot_repeat_fast() : match_dot_repeat_slow();
  ------------------
  |  Branch (418:14): [Folded - Ignored]
  ------------------
  419|   444k|   }
_ZN5boost13re_detail_50014verify_optionsEjNS_15regex_constants12_match_flagsE:
   38|  13.2M|{
   39|       |   //
   40|       |   // can't mix match_extra with POSIX matching rules:
   41|       |   //
   42|  13.2M|   if ((mf & match_extra) && (mf & match_posix))
  ------------------
  |  Branch (42:8): [True: 0, False: 13.2M]
  |  Branch (42:30): [True: 0, False: 0]
  ------------------
   43|      0|   {
   44|      0|      std::logic_error msg("Usage Error: Can't mix regular expression captures with POSIX matching rules");
   45|      0|#ifndef BOOST_REGEX_STANDALONE
   46|      0|      throw_exception(msg);
   47|       |#else
   48|       |      throw msg;
   49|       |#endif
   50|      0|   }
   51|  13.2M|}

_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14construct_initERKNS_11basic_regexIcSE_EENS_15regex_constants12_match_flagsE:
   40|  13.2M|{ 
   41|  13.2M|   typedef typename std::iterator_traits<BidiIterator>::iterator_category category;
   42|  13.2M|   typedef typename basic_regex<char_type, traits>::flag_type expression_flag_type;
   43|       |   
   44|  13.2M|   if(e.empty())
  ------------------
  |  Branch (44:7): [True: 0, False: 13.2M]
  ------------------
   45|      0|   {
   46|       |      // precondition failure: e is not a valid regex.
   47|      0|      std::invalid_argument ex("Invalid regular expression object");
   48|      0|#ifndef BOOST_REGEX_STANDALONE
   49|      0|      boost::throw_exception(ex);
   50|       |#else
   51|       |      throw e;
   52|       |#endif
   53|      0|   }
   54|  13.2M|   pstate = 0;
   55|  13.2M|   m_match_flags = f;
   56|  13.2M|   estimate_max_state_count(static_cast<category*>(0));
   57|  13.2M|   expression_flag_type re_f = re.flags();
   58|  13.2M|   icase = re_f & regex_constants::icase;
   59|  13.2M|   if(!(m_match_flags & (match_perl|match_posix)))
  ------------------
  |  Branch (59:7): [True: 13.2M, False: 0]
  ------------------
   60|  13.2M|   {
   61|  13.2M|      if((re_f & (regbase::main_option_type|regbase::no_perl_ex)) == 0)
  ------------------
  |  Branch (61:10): [True: 13.2M, False: 0]
  ------------------
   62|  13.2M|         m_match_flags |= match_perl;
   63|      0|      else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
  ------------------
  |  Branch (63:15): [True: 0, False: 0]
  ------------------
   64|      0|         m_match_flags |= match_perl;
   65|      0|      else if((re_f & (regbase::main_option_type|regbase::literal)) == (regbase::literal))
  ------------------
  |  Branch (65:15): [True: 0, False: 0]
  ------------------
   66|      0|         m_match_flags |= match_perl;
   67|      0|      else
   68|      0|         m_match_flags |= match_posix;
   69|  13.2M|   }
   70|  13.2M|   if(m_match_flags & match_posix)
  ------------------
  |  Branch (70:7): [True: 0, False: 13.2M]
  ------------------
   71|      0|   {
   72|      0|      m_temp_match.reset(new match_results<BidiIterator, Allocator>());
   73|      0|      m_presult = m_temp_match.get();
   74|      0|   }
   75|  13.2M|   else
   76|  13.2M|      m_presult = &m_result;
   77|  13.2M|   m_stack_base = 0;
   78|  13.2M|   m_backup_state = 0;
   79|       |   // find the value to use for matching word boundaries:
   80|  13.2M|   m_word_mask = re.get_data().m_word_mask; 
   81|       |   // find bitmask to use for matching '.':
   82|  13.2M|   match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? BOOST_REGEX_DETAIL_NS::test_not_newline : BOOST_REGEX_DETAIL_NS::test_newline);
  ------------------
  |  |  158|      0|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|      0|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      0|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                 match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? BOOST_REGEX_DETAIL_NS::test_not_newline : BOOST_REGEX_DETAIL_NS::test_newline);
  ------------------
  |  |  158|  13.2M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  13.2M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  13.2M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  13.2M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (82:48): [True: 0, False: 13.2M]
  ------------------
   83|       |   // Disable match_any if requested in the state machine:
   84|  13.2M|   if(e.get_data().m_disable_match_any)
  ------------------
  |  Branch (84:7): [True: 0, False: 13.2M]
  ------------------
   85|      0|      m_match_flags &= regex_constants::match_not_any;
   86|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE24estimate_max_state_countEPNS2_26random_access_iterator_tagE:
   93|  13.2M|{
   94|       |   //
   95|       |   // How many states should we allow our machine to visit before giving up?
   96|       |   // This is a heuristic: it takes the greater of O(N^2) and O(NS^2)
   97|       |   // where N is the length of the string, and S is the number of states
   98|       |   // in the machine.  It's tempting to up this to O(N^2S) or even O(N^2S^2)
   99|       |   // but these take unreasonably amounts of time to bale out in pathological
  100|       |   // cases.
  101|       |   //
  102|       |   // Calculate NS^2 first:
  103|       |   //
  104|  13.2M|   static const std::ptrdiff_t k = 100000;
  105|  13.2M|   std::ptrdiff_t dist = std::distance(base, last);
  106|  13.2M|   if(dist == 0)
  ------------------
  |  Branch (106:7): [True: 3.23k, False: 13.2M]
  ------------------
  107|  3.23k|      dist = 1;
  108|  13.2M|   std::ptrdiff_t states = re.size();
  109|  13.2M|   if(states == 0)
  ------------------
  |  Branch (109:7): [True: 0, False: 13.2M]
  ------------------
  110|      0|      states = 1;
  111|  13.2M|   if ((std::numeric_limits<std::ptrdiff_t>::max)() / states < states)
  ------------------
  |  Branch (111:8): [True: 0, False: 13.2M]
  ------------------
  112|      0|   {
  113|      0|      max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
  ------------------
  |  |  343|      0|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  114|      0|      return;
  115|      0|   }
  116|  13.2M|   states *= states;
  117|  13.2M|   if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states)
  ------------------
  |  Branch (117:7): [True: 0, False: 13.2M]
  ------------------
  118|      0|   {
  119|      0|      max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
  ------------------
  |  |  343|      0|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  120|      0|      return;
  121|      0|   }
  122|  13.2M|   states *= dist;
  123|  13.2M|   if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states)
  ------------------
  |  Branch (123:7): [True: 0, False: 13.2M]
  ------------------
  124|      0|   {
  125|      0|      max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
  ------------------
  |  |  343|      0|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  126|      0|      return;
  127|      0|   }
  128|  13.2M|   states += k;
  129|       |
  130|  13.2M|   max_state_count = states;
  131|       |
  132|       |   //
  133|       |   // Now calculate N^2:
  134|       |   //
  135|  13.2M|   states = dist;
  136|  13.2M|   if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states)
  ------------------
  |  Branch (136:7): [True: 0, False: 13.2M]
  ------------------
  137|      0|   {
  138|      0|      max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
  ------------------
  |  |  343|      0|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  139|      0|      return;
  140|      0|   }
  141|  13.2M|   states *= dist;
  142|  13.2M|   if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states)
  ------------------
  |  Branch (142:7): [True: 0, False: 13.2M]
  ------------------
  143|      0|   {
  144|      0|      max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2);
  ------------------
  |  |  343|      0|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  145|      0|      return;
  146|      0|   }
  147|  13.2M|   states += k;
  148|       |   //
  149|       |   // N^2 can be a very large number indeed, to prevent things getting out
  150|       |   // of control, cap the max states:
  151|       |   //
  152|  13.2M|   if(states > BOOST_REGEX_MAX_STATE_COUNT)
  ------------------
  |  |  343|  13.2M|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  |  Branch (152:7): [True: 11.5M, False: 1.68M]
  ------------------
  153|  11.5M|      states = BOOST_REGEX_MAX_STATE_COUNT;
  ------------------
  |  |  343|  11.5M|#  define BOOST_REGEX_MAX_STATE_COUNT 100000000
  ------------------
  154|       |   //
  155|       |   // If (the possibly capped) N^2 is larger than our first estimate,
  156|       |   // use this instead:
  157|       |   //
  158|  13.2M|   if(states > max_state_count)
  ------------------
  |  Branch (158:7): [True: 5.96M, False: 7.26M]
  ------------------
  159|  5.96M|      max_state_count = states;
  160|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE4findEv:
  215|  13.2M|{
  216|  13.2M|   return find_imp();
  217|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8find_impEv:
  221|  13.2M|{
  222|  13.2M|   static matcher_proc_type const s_find_vtable[7] = 
  223|  13.2M|   {
  224|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_any,
  225|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_word,
  226|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_line,
  227|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf,
  228|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_prefix,
  229|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
  230|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
  231|  13.2M|   };
  232|       |
  233|       |   // initialise our stack if we are non-recursive:
  234|  13.2M|   save_state_init init(&m_stack_base, &m_backup_state);
  235|  13.2M|   used_block_count = BOOST_REGEX_MAX_BLOCKS;
  ------------------
  |  |  435|  13.2M|#     define BOOST_REGEX_MAX_BLOCKS 1024
  ------------------
  236|  13.2M|#if !defined(BOOST_NO_EXCEPTIONS)
  237|  13.2M|   try{
  238|  13.2M|#endif
  239|       |
  240|  13.2M|   state_count = 0;
  241|  13.2M|   if((m_match_flags & regex_constants::match_init) == 0)
  ------------------
  |  Branch (241:7): [True: 13.2M, False: 0]
  ------------------
  242|  13.2M|   {
  243|       |      // reset our state machine:
  244|  13.2M|      search_base = position = base;
  245|  13.2M|      pstate = re.get_first_state();
  246|  13.2M|      m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last);
  ------------------
  |  Branch (246:27): [True: 0, False: 13.2M]
  ------------------
  247|  13.2M|      m_presult->set_base(base);
  248|  13.2M|      m_presult->set_named_subs(this->re.get_named_subs());
  249|  13.2M|      m_match_flags |= regex_constants::match_init;
  250|  13.2M|   }
  251|      0|   else
  252|      0|   {
  253|       |      // start again:
  254|      0|      search_base = position = m_result[0].second;
  255|       |      // If last match was null and match_not_null was not set then increment
  256|       |      // our start position, otherwise we go into an infinite loop:
  257|      0|      if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0))
  ------------------
  |  Branch (257:10): [True: 0, False: 0]
  |  Branch (257:53): [True: 0, False: 0]
  ------------------
  258|      0|      {
  259|      0|         if(position == last)
  ------------------
  |  Branch (259:13): [True: 0, False: 0]
  ------------------
  260|      0|            return false;
  261|      0|         else 
  262|      0|            ++position;
  263|      0|      }
  264|       |      // reset $` start:
  265|      0|      m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), search_base, last);
  ------------------
  |  Branch (265:27): [True: 0, False: 0]
  ------------------
  266|       |      //if((base != search_base) && (base == backstop))
  267|       |      //   m_match_flags |= match_prev_avail;
  268|      0|   }
  269|  13.2M|   if(m_match_flags & match_posix)
  ------------------
  |  Branch (269:7): [True: 0, False: 13.2M]
  ------------------
  270|      0|   {
  271|      0|      m_result.set_size(static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last);
  272|      0|      m_result.set_base(base);
  273|      0|   }
  274|       |
  275|  13.2M|   verify_options(re.flags(), m_match_flags);
  276|       |   // find out what kind of expression we have:
  277|  13.2M|   unsigned type = (m_match_flags & match_continuous) ? 
  ------------------
  |  Branch (277:20): [True: 0, False: 13.2M]
  ------------------
  278|      0|      static_cast<unsigned int>(regbase::restart_continue) 
  279|  13.2M|         : static_cast<unsigned int>(re.get_restart_type());
  280|       |
  281|       |   // call the appropriate search routine:
  282|  13.2M|   matcher_proc_type proc = s_find_vtable[type];
  283|  13.2M|   return (this->*proc)();
  284|       |
  285|  13.2M|#if !defined(BOOST_NO_EXCEPTIONS)
  286|  13.2M|   }
  287|  13.2M|   catch(...)
  288|  13.2M|   {
  289|       |      // unwind all pushed states, apart from anything else this
  290|       |      // ensures that all the states are correctly destructed
  291|       |      // not just the memory freed.
  292|     12|      while(unwind(true)){}
  ------------------
  |  Branch (292:13): [True: 0, False: 12]
  ------------------
  293|     12|      throw;
  294|     12|   }
  295|  13.2M|#endif
  296|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16find_restart_bufEv:
  900|  13.2M|{
  901|  13.2M|   if((position == base) && ((m_match_flags & match_not_bob) == 0))
  ------------------
  |  Branch (901:7): [True: 13.2M, False: 0]
  |  Branch (901:29): [True: 13.2M, False: 0]
  ------------------
  902|  13.2M|      return match_prefix();
  903|      0|   return false;
  904|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12match_prefixEv:
  300|  13.2M|{
  301|  13.2M|   m_has_partial_match = false;
  302|  13.2M|   m_has_found_match = false;
  303|  13.2M|   pstate = re.get_first_state();
  304|  13.2M|   m_presult->set_first(position);
  305|  13.2M|   restart = position;
  306|  13.2M|   match_all_states();
  307|  13.2M|   if(!m_has_found_match && m_has_partial_match && (m_match_flags & match_partial))
  ------------------
  |  Branch (307:7): [True: 7.20M, False: 6.01M]
  |  Branch (307:29): [True: 0, False: 7.20M]
  |  Branch (307:52): [True: 0, False: 0]
  ------------------
  308|      0|   {
  309|      0|      m_has_found_match = true;
  310|      0|      m_presult->set_second(last, 0, false);
  311|      0|      position = last;
  312|      0|      if((m_match_flags & match_posix) == match_posix)
  ------------------
  |  Branch (312:10): [True: 0, False: 0]
  ------------------
  313|      0|      {
  314|      0|         m_result.maybe_assign(*m_presult);
  315|      0|      }
  316|      0|   }
  317|       |#ifdef BOOST_REGEX_MATCH_EXTRA
  318|       |   if(m_has_found_match && (match_extra & m_match_flags))
  319|       |   {
  320|       |      //
  321|       |      // we have a match, reverse the capture information:
  322|       |      //
  323|       |      for(unsigned i = 0; i < m_presult->size(); ++i)
  324|       |      {
  325|       |         typename sub_match<BidiIterator>::capture_sequence_type & seq = ((*m_presult)[i]).get_captures();
  326|       |         std::reverse(seq.begin(), seq.end());
  327|       |      }
  328|       |   }
  329|       |#endif
  330|  13.2M|   if(!m_has_found_match)
  ------------------
  |  Branch (330:7): [True: 7.20M, False: 6.01M]
  ------------------
  331|  7.20M|      position = restart; // reset search postion
  332|  13.2M|   return m_has_found_match;
  333|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13match_literalEv:
  337|  5.94M|{
  338|  5.94M|   unsigned int len = static_cast<const re_literal*>(pstate)->length;
  339|  5.94M|   const char_type* what = reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1);
  340|       |   //
  341|       |   // compare string with what we stored in
  342|       |   // our records:
  343|  11.7M|   for(unsigned int i = 0; i < len; ++i, ++position)
  ------------------
  |  Branch (343:28): [True: 5.96M, False: 5.75M]
  ------------------
  344|  5.96M|   {
  345|  5.96M|      if((position == last) || (traits_inst.translate(*position, icase) != what[i]))
  ------------------
  |  Branch (345:10): [True: 156, False: 5.96M]
  |  Branch (345:32): [True: 187k, False: 5.77M]
  ------------------
  346|   187k|         return false;
  347|  5.96M|   }
  348|  5.75M|   pstate = pstate->next.p;
  349|  5.75M|   return true;
  350|  5.94M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16match_start_lineEv:
  354|   444k|{
  355|   444k|   if(position == backstop)
  ------------------
  |  Branch (355:7): [True: 1.64k, False: 442k]
  ------------------
  356|  1.64k|   {
  357|  1.64k|      if((m_match_flags & match_prev_avail) == 0)
  ------------------
  |  Branch (357:10): [True: 1.64k, False: 0]
  ------------------
  358|  1.64k|      {
  359|  1.64k|         if((m_match_flags & match_not_bol) == 0)
  ------------------
  |  Branch (359:13): [True: 1.64k, False: 0]
  ------------------
  360|  1.64k|         {
  361|  1.64k|            pstate = pstate->next.p;
  362|  1.64k|            return true;
  363|  1.64k|         }
  364|      0|         return false;
  365|  1.64k|      }
  366|  1.64k|   }
  367|   442k|   else if(m_match_flags & match_single_line)
  ------------------
  |  Branch (367:12): [True: 0, False: 442k]
  ------------------
  368|      0|      return false;
  369|       |
  370|       |   // check the previous value character:
  371|   442k|   BidiIterator t(position);
  372|   442k|   --t;
  373|   442k|   if(position != last)
  ------------------
  |  Branch (373:7): [True: 442k, False: 0]
  ------------------
  374|   442k|   {
  375|   442k|      if(is_separator(*t) && !((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n'))) )
  ------------------
  |  Branch (375:10): [True: 442k, False: 3]
  |  Branch (375:32): [True: 16.0k, False: 426k]
  |  Branch (375:72): [True: 0, False: 16.0k]
  ------------------
  376|   442k|      {
  377|   442k|         pstate = pstate->next.p;
  378|   442k|         return true;
  379|   442k|      }
  380|   442k|   }
  381|      0|   else if(is_separator(*t))
  ------------------
  |  Branch (381:12): [True: 0, False: 0]
  ------------------
  382|      0|   {
  383|      0|      pstate = pstate->next.p;
  384|      0|      return true;
  385|      0|   }
  386|      3|   return false;
  387|   442k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE14match_end_lineEv:
  391|   473k|{
  392|   473k|   if(position != last)
  ------------------
  |  Branch (392:7): [True: 472k, False: 139]
  ------------------
  393|   472k|   {
  394|   472k|      if(m_match_flags & match_single_line)
  ------------------
  |  Branch (394:10): [True: 0, False: 472k]
  ------------------
  395|      0|         return false;
  396|       |      // we're not yet at the end so *first is always valid:
  397|   472k|      if(is_separator(*position))
  ------------------
  |  Branch (397:10): [True: 444k, False: 28.8k]
  ------------------
  398|   444k|      {
  399|   444k|         if((position != backstop) || (m_match_flags & match_prev_avail))
  ------------------
  |  Branch (399:13): [True: 444k, False: 0]
  |  Branch (399:39): [True: 0, False: 0]
  ------------------
  400|   444k|         {
  401|       |            // check that we're not in the middle of \r\n sequence
  402|   444k|            BidiIterator t(position);
  403|   444k|            --t;
  404|   444k|            if((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n')))
  ------------------
  |  Branch (404:16): [True: 0, False: 444k]
  |  Branch (404:56): [True: 0, False: 0]
  ------------------
  405|      0|            {
  406|      0|               return false;
  407|      0|            }
  408|   444k|         }
  409|   444k|         pstate = pstate->next.p;
  410|   444k|         return true;
  411|   444k|      }
  412|   472k|   }
  413|    139|   else if((m_match_flags & match_not_eol) == 0)
  ------------------
  |  Branch (413:12): [True: 139, False: 0]
  ------------------
  414|    139|   {
  415|    139|      pstate = pstate->next.p;
  416|    139|      return true;
  417|    139|   }
  418|  28.8k|   return false;
  419|   473k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10match_wildEv:
  423|  10.5k|{
  424|  10.5k|   if(position == last) 
  ------------------
  |  Branch (424:7): [True: 10, False: 10.5k]
  ------------------
  425|     10|      return false;
  426|  10.5k|   if(is_separator(*position) && ((match_any_mask & static_cast<const re_dot*>(pstate)->mask) == 0))
  ------------------
  |  Branch (426:7): [True: 7.27k, False: 3.27k]
  |  Branch (426:34): [True: 0, False: 7.27k]
  ------------------
  427|      0|      return false;
  428|  10.5k|   if((*position == char_type(0)) && (m_match_flags & match_not_dot_null))
  ------------------
  |  Branch (428:7): [True: 376, False: 10.1k]
  |  Branch (428:38): [True: 0, False: 376]
  ------------------
  429|      0|      return false;
  430|  10.5k|   pstate = pstate->next.p;
  431|  10.5k|   ++position;
  432|  10.5k|   return true;
  433|  10.5k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE18match_buffer_startEv:
  555|  13.2M|{
  556|  13.2M|   if((position != backstop) || (m_match_flags & match_not_bob))
  ------------------
  |  Branch (556:7): [True: 0, False: 13.2M]
  |  Branch (556:33): [True: 0, False: 13.2M]
  ------------------
  557|      0|      return false;
  558|       |   // OK match:
  559|  13.2M|   pstate = pstate->next.p;
  560|  13.2M|   return true;
  561|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9match_setEv:
  629|  47.5M|{
  630|  47.5M|   if(position == last)
  ------------------
  |  Branch (630:7): [True: 25, False: 47.5M]
  ------------------
  631|     25|      return false;
  632|  47.5M|   if(static_cast<const re_set*>(pstate)->_map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
  ------------------
  |  Branch (632:7): [True: 44.9M, False: 2.62M]
  ------------------
  633|  44.9M|   {
  634|  44.9M|      pstate = pstate->next.p;
  635|  44.9M|      ++position;
  636|  44.9M|      return true;
  637|  44.9M|   }
  638|  2.62M|   return false;
  639|  47.5M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10match_jumpEv:
  643|  91.5M|{
  644|  91.5M|   pstate = static_cast<const re_jump*>(pstate)->alt.p;
  645|  91.5M|   return true;
  646|  91.5M|}

_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16match_all_statesEv:
  150|  13.2M|{
  151|  13.2M|   static matcher_proc_type const s_match_vtable[34] = 
  152|  13.2M|   {
  153|  13.2M|      (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark),
  154|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_endmark,
  155|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_literal,
  156|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_start_line,
  157|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_end_line,
  158|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_wild,
  159|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_match,
  160|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary,
  161|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_within_word,
  162|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_word_start,
  163|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_word_end,
  164|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start,
  165|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end,
  166|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_backref,
  167|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_long_set,
  168|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_set,
  169|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_jump,
  170|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_alt,
  171|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_rep,
  172|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_combining,
  173|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end,
  174|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue,
  175|       |      // Although this next line *should* be evaluated at compile time, in practice
  176|       |      // some compilers (VC++) emit run-time initialisation which breaks thread
  177|       |      // safety, so use a dispatch function instead:
  178|       |      //(::boost::is_random_access_iterator<BidiIterator>::value ? &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast : &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow),
  179|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_dispatch,
  180|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat,
  181|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat,
  182|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat,
  183|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_backstep,
  184|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref,
  185|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case,
  186|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_recursion,
  187|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_fail,
  188|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_accept,
  189|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_commit,
  190|  13.2M|      &perl_matcher<BidiIterator, Allocator, traits>::match_then,
  191|  13.2M|   };
  192|  13.2M|   incrementer inc(&m_recursions);
  193|  13.2M|   if(inc > 80)
  ------------------
  |  Branch (193:7): [True: 0, False: 13.2M]
  ------------------
  194|      0|      raise_error(traits_inst, regex_constants::error_complexity);
  195|  13.2M|   push_recursion_stopper();
  196|  13.2M|   do{
  197|   422M|      while(pstate)
  ------------------
  |  Branch (197:13): [True: 416M, False: 6.01M]
  ------------------
  198|   416M|      {
  199|   416M|         matcher_proc_type proc = s_match_vtable[pstate->type];
  200|   416M|         ++state_count;
  201|   416M|         if(!(this->*proc)())
  ------------------
  |  Branch (201:13): [True: 10.8M, False: 405M]
  ------------------
  202|  10.8M|         {
  203|  10.8M|            if(state_count > max_state_count)
  ------------------
  |  Branch (203:16): [True: 0, False: 10.8M]
  ------------------
  204|      0|               raise_error(traits_inst, regex_constants::error_complexity);
  205|  10.8M|            if((m_match_flags & match_partial) && (position == last) && (position != search_base))
  ------------------
  |  Branch (205:16): [True: 0, False: 10.8M]
  |  Branch (205:51): [True: 0, False: 0]
  |  Branch (205:73): [True: 0, False: 0]
  ------------------
  206|      0|               m_has_partial_match = true;
  207|  10.8M|            bool successful_unwind = unwind(false);
  208|  10.8M|            if((m_match_flags & match_partial) && (position == last) && (position != search_base))
  ------------------
  |  Branch (208:16): [True: 0, False: 10.8M]
  |  Branch (208:51): [True: 0, False: 0]
  |  Branch (208:73): [True: 0, False: 0]
  ------------------
  209|      0|               m_has_partial_match = true;
  210|  10.8M|            if(!successful_unwind)
  ------------------
  |  Branch (210:16): [True: 7.20M, False: 3.60M]
  ------------------
  211|  7.20M|               return m_recursive_result;
  212|  10.8M|         }
  213|   416M|      }
  214|  13.2M|   }while(unwind(true));
  ------------------
  |  Branch (214:11): [True: 0, False: 6.01M]
  ------------------
  215|  6.01M|   return m_recursive_result;
  216|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE15match_startmarkEv:
  387|  82.4M|{
  388|  82.4M|   int index = static_cast<const re_brace*>(pstate)->index;
  389|  82.4M|   icase = static_cast<const re_brace*>(pstate)->icase;
  390|  82.4M|   switch(index)
  391|  82.4M|   {
  392|  71.8M|   case 0:
  ------------------
  |  Branch (392:4): [True: 71.8M, False: 10.6M]
  ------------------
  393|  71.8M|      pstate = pstate->next.p;
  394|  71.8M|      break;
  395|      0|   case -1:
  ------------------
  |  Branch (395:4): [True: 0, False: 82.4M]
  ------------------
  396|      0|   case -2:
  ------------------
  |  Branch (396:4): [True: 0, False: 82.4M]
  ------------------
  397|      0|      {
  398|       |         // forward lookahead assert:
  399|      0|         const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
  400|      0|         pstate = pstate->next.p->next.p;
  401|      0|         push_assertion(next_pstate, index == -1);
  402|      0|         break;
  403|      0|      }
  404|      0|   case -3:
  ------------------
  |  Branch (404:4): [True: 0, False: 82.4M]
  ------------------
  405|      0|      {
  406|       |         // independent sub-expression, currently this is always recursive:
  407|      0|         bool old_independent = m_independent;
  408|      0|         m_independent = true;
  409|      0|         const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
  410|      0|         pstate = pstate->next.p->next.p;
  411|      0|         bool r = false;
  412|      0|#if !defined(BOOST_NO_EXCEPTIONS)
  413|      0|      try{
  414|      0|#endif
  415|      0|         r = match_all_states();
  416|      0|         if(!r && !m_independent)
  ------------------
  |  Branch (416:13): [True: 0, False: 0]
  |  Branch (416:19): [True: 0, False: 0]
  ------------------
  417|      0|         {
  418|       |            // Must be unwinding from a COMMIT/SKIP/PRUNE and the independent 
  419|       |            // sub failed, need to unwind everything else:
  420|      0|            while (m_backup_state->state_id)
  ------------------
  |  Branch (420:20): [True: 0, False: 0]
  ------------------
  421|      0|               unwind(false);
  422|      0|            return false;
  423|      0|         }
  424|      0|#if !defined(BOOST_NO_EXCEPTIONS)
  425|      0|      }
  426|      0|      catch(...)
  427|      0|      {
  428|      0|         pstate = next_pstate;
  429|       |         // unwind all pushed states, apart from anything else this
  430|       |         // ensures that all the states are correctly destructed
  431|       |         // not just the memory freed.
  432|      0|         while(unwind(true)) {}
  ------------------
  |  Branch (432:16): [True: 0, False: 0]
  ------------------
  433|      0|         throw;
  434|      0|      }
  435|      0|#endif
  436|      0|      pstate = next_pstate;
  437|      0|      m_independent = old_independent;
  438|       |#ifdef BOOST_REGEX_MATCH_EXTRA
  439|       |         if(r && (m_match_flags & match_extra))
  440|       |         {
  441|       |            //
  442|       |            // our captures have been stored in *m_presult
  443|       |            // we need to unpack them, and insert them
  444|       |            // back in the right order when we unwind the stack:
  445|       |            //
  446|       |            match_results<BidiIterator, Allocator> temp_match(*m_presult);
  447|       |            unsigned i;
  448|       |            for(i = 0; i < temp_match.size(); ++i)
  449|       |               (*m_presult)[i].get_captures().clear();
  450|       |            // match everything else:
  451|       |#if !defined(BOOST_NO_EXCEPTIONS)
  452|       |            try{
  453|       |#endif
  454|       |               r = match_all_states();
  455|       |#if !defined(BOOST_NO_EXCEPTIONS)
  456|       |            }
  457|       |            catch(...)
  458|       |            {
  459|       |               pstate = next_pstate;
  460|       |               // unwind all pushed states, apart from anything else this
  461|       |               // ensures that all the states are correctly destructed
  462|       |               // not just the memory freed.
  463|       |               while(unwind(true)) {}
  464|       |               throw;
  465|       |            }
  466|       |#endif
  467|       |         // now place the stored captures back:
  468|       |            for(i = 0; i < temp_match.size(); ++i)
  469|       |            {
  470|       |               typedef typename sub_match<BidiIterator>::capture_sequence_type seq;
  471|       |               seq& s1 = (*m_presult)[i].get_captures();
  472|       |               const seq& s2 = temp_match[i].captures();
  473|       |               s1.insert(
  474|       |                  s1.end(), 
  475|       |                  s2.begin(), 
  476|       |                  s2.end());
  477|       |            }
  478|       |         }
  479|       |#endif
  480|      0|         return r;
  481|      0|      }
  482|      0|   case -4:
  ------------------
  |  Branch (482:4): [True: 0, False: 82.4M]
  ------------------
  483|      0|      {
  484|       |      // conditional expression:
  485|      0|      const re_alt* alt = static_cast<const re_alt*>(pstate->next.p);
  486|      0|      BOOST_REGEX_ASSERT(alt->type == syntax_element_alt);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  487|      0|      pstate = alt->next.p;
  488|      0|      if(pstate->type == syntax_element_assert_backref)
  ------------------
  |  Branch (488:10): [True: 0, False: 0]
  ------------------
  489|      0|      {
  490|      0|         if(!match_assert_backref())
  ------------------
  |  Branch (490:13): [True: 0, False: 0]
  ------------------
  491|      0|            pstate = alt->alt.p;
  492|      0|         break;
  493|      0|      }
  494|      0|      else
  495|      0|      {
  496|       |         // zero width assertion, have to match this recursively:
  497|      0|         BOOST_REGEX_ASSERT(pstate->type == syntax_element_startmark);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  498|      0|         bool negated = static_cast<const re_brace*>(pstate)->index == -2;
  499|      0|         BidiIterator saved_position = position;
  500|      0|         const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p;
  501|      0|         pstate = pstate->next.p->next.p;
  502|      0|#if !defined(BOOST_NO_EXCEPTIONS)
  503|      0|         try{
  504|      0|#endif
  505|      0|            bool r = match_all_states();
  506|      0|            position = saved_position;
  507|      0|            if(negated)
  ------------------
  |  Branch (507:16): [True: 0, False: 0]
  ------------------
  508|      0|               r = !r;
  509|      0|            if(r)
  ------------------
  |  Branch (509:16): [True: 0, False: 0]
  ------------------
  510|      0|               pstate = next_pstate;
  511|      0|            else
  512|      0|               pstate = alt->alt.p;
  513|      0|#if !defined(BOOST_NO_EXCEPTIONS)
  514|      0|         }
  515|      0|         catch(...)
  516|      0|         {
  517|      0|            pstate = next_pstate;
  518|       |            // unwind all pushed states, apart from anything else this
  519|       |            // ensures that all the states are correctly destructed
  520|       |            // not just the memory freed.
  521|      0|            while(unwind(true)){}
  ------------------
  |  Branch (521:19): [True: 0, False: 0]
  ------------------
  522|      0|            throw;
  523|      0|         }
  524|      0|#endif
  525|      0|         break;
  526|      0|      }
  527|      0|      }
  528|      0|   case -5:
  ------------------
  |  Branch (528:4): [True: 0, False: 82.4M]
  ------------------
  529|      0|      {
  530|      0|         push_matched_paren(0, (*m_presult)[0]);
  531|      0|         m_presult->set_first(position, 0, true);
  532|      0|         pstate = pstate->next.p;
  533|      0|         break;
  534|      0|      }
  535|  10.6M|   default:
  ------------------
  |  Branch (535:4): [True: 10.6M, False: 71.8M]
  ------------------
  536|  10.6M|   {
  537|  10.6M|      BOOST_REGEX_ASSERT(index > 0);
  ------------------
  |  |   58|  10.6M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  10.6M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  538|  10.6M|      if((m_match_flags & match_nosubs) == 0)
  ------------------
  |  Branch (538:10): [True: 10.6M, False: 0]
  ------------------
  539|  10.6M|      {
  540|  10.6M|         push_matched_paren(index, (*m_presult)[index]);
  541|  10.6M|         m_presult->set_first(position, index);
  542|  10.6M|      }
  543|  10.6M|      pstate = pstate->next.p;
  544|  10.6M|      break;
  545|      0|   }
  546|  82.4M|   }
  547|  82.4M|   return true;
  548|  82.4M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12extend_stackEv:
  220|  25.3k|{
  221|  25.3k|   if(used_block_count)
  ------------------
  |  Branch (221:7): [True: 25.2k, False: 12]
  ------------------
  222|  25.2k|   {
  223|  25.2k|      --used_block_count;
  224|  25.2k|      saved_state* stack_base;
  225|  25.2k|      saved_state* backup_state;
  226|  25.2k|      stack_base = static_cast<saved_state*>(get_mem_block());
  227|  25.2k|      backup_state = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(stack_base)+BOOST_REGEX_BLOCKSIZE);
  ------------------
  |  |  429|  25.2k|#     define BOOST_REGEX_BLOCKSIZE 4096
  ------------------
  228|  25.2k|      saved_extra_block* block = static_cast<saved_extra_block*>(backup_state);
  229|  25.2k|      --block;
  230|  25.2k|      (void) new (block) saved_extra_block(m_stack_base, m_backup_state);
  231|  25.2k|      m_stack_base = stack_base;
  232|  25.2k|      m_backup_state = block;
  233|  25.2k|   }
  234|     12|   else
  235|     12|      raise_error(traits_inst, regex_constants::error_stack);
  236|  25.3k|}
_ZN5boost13re_detail_50017saved_extra_blockC2EPNS0_11saved_stateES3_:
   91|  25.2k|      : saved_state(saved_state_extra_block), base(b), end(e) {}
_ZN5boost13re_detail_50011saved_stateC2Ej:
   52|  50.1M|   saved_state(unsigned i) : state_id(i) {}
_ZN5boost13re_detail_50014saved_positionINSt3__111__wrap_iterIPKcEEEC2EPKNS0_14re_syntax_baseES6_i:
   68|  4.86M|   saved_position(const re_syntax_base* ps, BidiIterator pos, int i) : saved_state(i), pstate(ps), position(pos){}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE18push_matched_parenEiRKS9_:
  240|  10.6M|{
  241|       |   //BOOST_REGEX_ASSERT(index);
  242|  10.6M|   saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
  243|  10.6M|   --pmp;
  244|  10.6M|   if(pmp < m_stack_base)
  ------------------
  |  Branch (244:7): [True: 423, False: 10.6M]
  ------------------
  245|    423|   {
  246|    423|      extend_stack();
  247|    423|      pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
  248|    423|      --pmp;
  249|    423|   }
  250|  10.6M|   (void) new (pmp)saved_matched_paren<BidiIterator>(index, sub);
  251|  10.6M|   m_backup_state = pmp;
  252|  10.6M|}
_ZN5boost13re_detail_50019saved_matched_parenINSt3__111__wrap_iterIPKcEEEC2EiRKNS_9sub_matchIS6_EE:
   60|  10.6M|   saved_matched_paren(int i, const sub_match<BidiIterator>& s) : saved_state(1), index(i), sub(s){}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE13match_endmarkEv:
 1045|  51.3M|{
 1046|  51.3M|   int index = static_cast<const re_brace*>(pstate)->index;
 1047|  51.3M|   icase = static_cast<const re_brace*>(pstate)->icase;
 1048|  51.3M|   if(index > 0)
  ------------------
  |  Branch (1048:7): [True: 3.45M, False: 47.9M]
  ------------------
 1049|  3.45M|   {
 1050|  3.45M|      if((m_match_flags & match_nosubs) == 0)
  ------------------
  |  Branch (1050:10): [True: 3.45M, False: 0]
  ------------------
 1051|  3.45M|      {
 1052|  3.45M|         m_presult->set_second(position, index);
 1053|  3.45M|      }
 1054|  3.45M|      if(!recursion_stack.empty())
  ------------------
  |  Branch (1054:10): [True: 0, False: 3.45M]
  ------------------
 1055|      0|      {
 1056|      0|         if(index == recursion_stack.back().idx)
  ------------------
  |  Branch (1056:13): [True: 0, False: 0]
  ------------------
 1057|      0|         {
 1058|      0|            pstate = recursion_stack.back().preturn_address;
 1059|      0|            *m_presult = recursion_stack.back().results;
 1060|      0|            push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, m_presult, &recursion_stack.back().results);
 1061|      0|            recursion_stack.pop_back();
 1062|      0|            push_repeater_count(-(2 + index), &next_count);
 1063|      0|         }
 1064|      0|      }
 1065|  3.45M|   }
 1066|  47.9M|   else if((index < 0) && (index != -4))
  ------------------
  |  Branch (1066:12): [True: 0, False: 47.9M]
  |  Branch (1066:27): [True: 0, False: 0]
  ------------------
 1067|      0|   {
 1068|       |      // matched forward lookahead:
 1069|      0|      pstate = 0;
 1070|      0|      return true;
 1071|      0|   }
 1072|  51.3M|   pstate = pstate->next.p;
 1073|  51.3M|   return true;
 1074|  51.3M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE19push_repeater_countEiPPNS0_14repeater_countIS6_EE:
  332|  6.90M|{
  333|  6.90M|   saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
  334|  6.90M|   --pmp;
  335|  6.90M|   if(pmp < m_stack_base)
  ------------------
  |  Branch (335:7): [True: 15.5k, False: 6.89M]
  ------------------
  336|  15.5k|   {
  337|  15.5k|      extend_stack();
  338|  15.5k|      pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
  339|  15.5k|      --pmp;
  340|  15.5k|   }
  341|  6.90M|   (void) new (pmp)saved_repeater<BidiIterator>(i, s, position, this->recursion_stack.empty() ? (INT_MIN + 3) : this->recursion_stack.back().idx);
  ------------------
  |  Branch (341:65): [True: 6.90M, False: 6]
  ------------------
  342|  6.90M|   m_backup_state = pmp;
  343|  6.90M|}
_ZN5boost13re_detail_50014saved_repeaterINSt3__111__wrap_iterIPKcEEEC2EiPPNS0_14repeater_countIS6_EES6_i:
   84|  6.90M|      : saved_state(saved_state_repeater_count), count(i, s, start, current_recursion_id){}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE11match_matchEv:
 1078|  6.01M|{
 1079|  6.01M|   if(!recursion_stack.empty())
  ------------------
  |  Branch (1079:7): [True: 0, False: 6.01M]
  ------------------
 1080|      0|   {
 1081|      0|      BOOST_REGEX_ASSERT(0 == recursion_stack.back().idx);
  ------------------
  |  |   58|      0|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1082|      0|      pstate = recursion_stack.back().preturn_address;
 1083|      0|      push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, m_presult, &recursion_stack.back().results);
 1084|      0|      *m_presult = recursion_stack.back().results;
 1085|      0|      recursion_stack.pop_back();
 1086|      0|      return true;
 1087|      0|   }
 1088|  6.01M|   if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first))
  ------------------
  |  Branch (1088:7): [True: 0, False: 6.01M]
  |  Branch (1088:43): [True: 0, False: 0]
  ------------------
 1089|      0|      return false;
 1090|  6.01M|   if((m_match_flags & match_all) && (position != last))
  ------------------
  |  Branch (1090:7): [True: 0, False: 6.01M]
  |  Branch (1090:38): [True: 0, False: 0]
  ------------------
 1091|      0|      return false;
 1092|  6.01M|   if((m_match_flags & regex_constants::match_not_initial_null) && (position == search_base))
  ------------------
  |  Branch (1092:7): [True: 0, False: 6.01M]
  |  Branch (1092:68): [True: 0, False: 0]
  ------------------
 1093|      0|      return false;
 1094|  6.01M|   m_presult->set_second(position);
 1095|  6.01M|   pstate = 0;
 1096|  6.01M|   m_has_found_match = true;
 1097|  6.01M|   if((m_match_flags & match_posix) == match_posix)
  ------------------
  |  Branch (1097:7): [True: 0, False: 6.01M]
  ------------------
 1098|      0|   {
 1099|      0|      m_result.maybe_assign(*m_presult);
 1100|      0|      if((m_match_flags & match_any) == 0)
  ------------------
  |  Branch (1100:10): [True: 0, False: 0]
  ------------------
 1101|      0|         return false;
 1102|      0|   }
 1103|       |#ifdef BOOST_REGEX_MATCH_EXTRA
 1104|       |   if(match_extra & m_match_flags)
 1105|       |   {
 1106|       |      for(unsigned i = 0; i < m_presult->size(); ++i)
 1107|       |         if((*m_presult)[i].matched)
 1108|       |            ((*m_presult)[i]).get_captures().push_back((*m_presult)[i]);
 1109|       |   }
 1110|       |#endif
 1111|  6.01M|   return true;
 1112|  6.01M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9match_altEv:
  552|  55.3M|{
  553|  55.3M|   bool take_first, take_second;
  554|  55.3M|   const re_alt* jmp = static_cast<const re_alt*>(pstate);
  555|       |
  556|       |   // find out which of these two alternatives we need to take:
  557|  55.3M|   if(position == last)
  ------------------
  |  Branch (557:7): [True: 3.52k, False: 55.3M]
  ------------------
  558|  3.52k|   {
  559|  3.52k|      take_first = jmp->can_be_null & mask_take;
  560|  3.52k|      take_second = jmp->can_be_null & mask_skip;
  561|  3.52k|   }
  562|  55.3M|   else
  563|  55.3M|   {
  564|  55.3M|      take_first = can_start(*position, jmp->_map, (unsigned char)mask_take);
  565|  55.3M|      take_second = can_start(*position, jmp->_map, (unsigned char)mask_skip);
  566|  55.3M|  }
  567|       |
  568|  55.3M|   if(take_first)
  ------------------
  |  Branch (568:7): [True: 49.0M, False: 6.26M]
  ------------------
  569|  49.0M|   {
  570|       |      // we can take the first alternative,
  571|       |      // see if we need to push next alternative:
  572|  49.0M|      if(take_second)
  ------------------
  |  Branch (572:10): [True: 446k, False: 48.6M]
  ------------------
  573|   446k|      {
  574|   446k|         push_alt(jmp->alt.p);
  575|   446k|      }
  576|  49.0M|      pstate = pstate->next.p;
  577|  49.0M|      return true;
  578|  49.0M|   }
  579|  6.26M|   if(take_second)
  ------------------
  |  Branch (579:7): [True: 3.89M, False: 2.37M]
  ------------------
  580|  3.89M|   {
  581|  3.89M|      pstate = jmp->alt.p;
  582|  3.89M|      return true;
  583|  3.89M|   }
  584|  2.37M|   return false;  // neither option is possible
  585|  6.26M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE8push_altEPKNS0_14re_syntax_baseE:
  302|  4.51M|{
  303|  4.51M|   saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
  304|  4.51M|   --pmp;
  305|  4.51M|   if(pmp < m_stack_base)
  ------------------
  |  Branch (305:7): [True: 2.72k, False: 4.50M]
  ------------------
  306|  2.72k|   {
  307|  2.72k|      extend_stack();
  308|  2.72k|      pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
  309|  2.72k|      --pmp;
  310|  2.72k|   }
  311|  4.51M|   (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_alt);
  312|  4.51M|   m_backup_state = pmp;
  313|  4.51M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE9match_repEv:
  589|  51.2M|{
  590|       |#ifdef BOOST_REGEX_MSVC
  591|       |#pragma warning(push)
  592|       |#pragma warning(disable:4127 4244)
  593|       |#endif
  594|       |#ifdef BOOST_BORLANDC
  595|       |#pragma option push -w-8008 -w-8066 -w-8004
  596|       |#endif
  597|  51.2M|   const re_repeat* rep = static_cast<const re_repeat*>(pstate);
  598|       |
  599|       |   // find out which of these two alternatives we need to take:
  600|  51.2M|   bool take_first, take_second;
  601|  51.2M|   if(position == last)
  ------------------
  |  Branch (601:7): [True: 4.12k, False: 51.2M]
  ------------------
  602|  4.12k|   {
  603|  4.12k|      take_first = rep->can_be_null & mask_take;
  604|  4.12k|      take_second = rep->can_be_null & mask_skip;
  605|  4.12k|   }
  606|  51.2M|   else
  607|  51.2M|   {
  608|  51.2M|      take_first = can_start(*position, rep->_map, (unsigned char)mask_take);
  609|  51.2M|      take_second = can_start(*position, rep->_map, (unsigned char)mask_skip);
  610|  51.2M|   }
  611|       |
  612|  51.2M|   if((m_backup_state->state_id != saved_state_repeater_count) 
  ------------------
  |  Branch (612:7): [True: 6.90M, False: 44.3M]
  ------------------
  613|  51.2M|      || (static_cast<saved_repeater<BidiIterator>*>(m_backup_state)->count.get_id() != rep->state_id)
  ------------------
  |  Branch (613:10): [True: 0, False: 44.3M]
  ------------------
  614|  51.2M|      || (next_count->get_id() != rep->state_id))
  ------------------
  |  Branch (614:10): [True: 0, False: 44.3M]
  ------------------
  615|  6.90M|   {
  616|       |      // we're moving to a different repeat from the last
  617|       |      // one, so set up a counter object:
  618|  6.90M|      push_repeater_count(rep->state_id, &next_count);
  619|  6.90M|   }
  620|       |   //
  621|       |   // If we've had at least one repeat already, and the last one 
  622|       |   // matched the NULL string then set the repeat count to
  623|       |   // maximum:
  624|       |   //
  625|  51.2M|   next_count->check_null_repeat(position, rep->max);
  626|       |
  627|  51.2M|   if(next_count->get_count() < rep->min)
  ------------------
  |  Branch (627:7): [True: 0, False: 51.2M]
  ------------------
  628|      0|   {
  629|       |      // we must take the repeat:
  630|      0|      if(take_first)
  ------------------
  |  Branch (630:10): [True: 0, False: 0]
  ------------------
  631|      0|      {
  632|       |         // increase the counter:
  633|      0|         ++(*next_count);
  634|      0|         pstate = rep->next.p;
  635|      0|         return true;
  636|      0|      }
  637|      0|      return false;
  638|      0|   }
  639|       |
  640|  51.2M|   bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
  ------------------
  |  Branch (640:18): [True: 44.2M, False: 7.01M]
  |  Branch (640:36): [True: 44.2M, False: 0]
  |  Branch (640:85): [True: 0, False: 0]
  ------------------
  641|  51.2M|   if(greedy)
  ------------------
  |  Branch (641:7): [True: 44.2M, False: 7.01M]
  ------------------
  642|  44.2M|   {
  643|       |      // try and take the repeat if we can:
  644|  44.2M|      if((next_count->get_count() < rep->max) && take_first)
  ------------------
  |  Branch (644:10): [True: 44.2M, False: 277]
  |  Branch (644:50): [True: 41.9M, False: 2.37M]
  ------------------
  645|  41.9M|      {
  646|  41.9M|         if(take_second)
  ------------------
  |  Branch (646:13): [True: 4.06M, False: 37.8M]
  ------------------
  647|  4.06M|         {
  648|       |            // store position in case we fail:
  649|  4.06M|            push_alt(rep->alt.p);
  650|  4.06M|         }
  651|       |         // increase the counter:
  652|  41.9M|         ++(*next_count);
  653|  41.9M|         pstate = rep->next.p;
  654|  41.9M|         return true;
  655|  41.9M|      }
  656|  2.37M|      else if(take_second)
  ------------------
  |  Branch (656:15): [True: 2.37M, False: 93]
  ------------------
  657|  2.37M|      {
  658|  2.37M|         pstate = rep->alt.p;
  659|  2.37M|         return true;
  660|  2.37M|      }
  661|     93|      return false; // can't take anything, fail...
  662|  44.2M|   }
  663|  7.01M|   else // non-greedy
  664|  7.01M|   {
  665|       |      // try and skip the repeat if we can:
  666|  7.01M|      if(take_second)
  ------------------
  |  Branch (666:10): [True: 356k, False: 6.65M]
  ------------------
  667|   356k|      {
  668|   356k|         if((next_count->get_count() < rep->max) && take_first)
  ------------------
  |  Branch (668:13): [True: 356k, False: 0]
  |  Branch (668:53): [True: 356k, False: 0]
  ------------------
  669|   356k|         {
  670|       |            // store position in case we fail:
  671|   356k|            push_non_greedy_repeat(rep->next.p);
  672|   356k|         }
  673|   356k|         pstate = rep->alt.p;
  674|   356k|         return true;
  675|   356k|      }
  676|  6.65M|      if((next_count->get_count() < rep->max) && take_first)
  ------------------
  |  Branch (676:10): [True: 6.65M, False: 6]
  |  Branch (676:50): [True: 6.65M, False: 672]
  ------------------
  677|  6.65M|      {
  678|       |         // increase the counter:
  679|  6.65M|         ++(*next_count);
  680|  6.65M|         pstate = rep->next.p;
  681|  6.65M|         return true;
  682|  6.65M|      }
  683|  6.65M|   }
  684|    678|   return false;
  685|       |#ifdef BOOST_BORLANDC
  686|       |#pragma option pop
  687|       |#endif
  688|       |#ifdef BOOST_REGEX_MSVC
  689|       |#pragma warning(pop)
  690|       |#endif
  691|  51.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE22push_non_greedy_repeatEPKNS0_14re_syntax_baseE:
  317|   356k|{
  318|   356k|   saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
  319|   356k|   --pmp;
  320|   356k|   if(pmp < m_stack_base)
  ------------------
  |  Branch (320:7): [True: 0, False: 356k]
  ------------------
  321|      0|   {
  322|      0|      extend_stack();
  323|      0|      pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
  324|      0|      --pmp;
  325|      0|   }
  326|   356k|   (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_non_greedy_long_repeat);
  327|   356k|   m_backup_state = pmp;
  328|   356k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE21match_dot_repeat_fastEv:
  740|   444k|{
  741|   444k|   if(m_match_flags & match_not_dot_null)
  ------------------
  |  Branch (741:7): [True: 0, False: 444k]
  ------------------
  742|      0|      return match_dot_repeat_slow();
  743|   444k|   if((static_cast<const re_dot*>(pstate->next.p)->mask & match_any_mask) == 0)
  ------------------
  |  Branch (743:7): [True: 0, False: 444k]
  ------------------
  744|      0|      return match_dot_repeat_slow();
  745|       |
  746|   444k|   const re_repeat* rep = static_cast<const re_repeat*>(pstate);
  747|   444k|   bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
  ------------------
  |  Branch (747:18): [True: 0, False: 444k]
  |  Branch (747:36): [True: 0, False: 0]
  |  Branch (747:85): [True: 0, False: 0]
  ------------------
  748|   444k|   std::size_t count = static_cast<std::size_t>((std::min)(static_cast<std::size_t>(std::distance(position, last)), greedy ? rep->max : rep->min));
  ------------------
  |  Branch (748:117): [True: 0, False: 444k]
  ------------------
  749|   444k|   if(rep->min > count)
  ------------------
  |  Branch (749:7): [True: 0, False: 444k]
  ------------------
  750|      0|   {
  751|      0|      position = last;
  752|      0|      return false;  // not enough text left to match
  753|      0|   }
  754|   444k|   std::advance(position, count);
  755|       |
  756|   444k|   if(greedy)
  ------------------
  |  Branch (756:7): [True: 0, False: 444k]
  ------------------
  757|      0|   {
  758|      0|      if((rep->leading) && (count < rep->max))
  ------------------
  |  Branch (758:10): [True: 0, False: 0]
  |  Branch (758:28): [True: 0, False: 0]
  ------------------
  759|      0|         restart = position;
  760|       |      // push backtrack info if available:
  761|      0|      if(count - rep->min)
  ------------------
  |  Branch (761:10): [True: 0, False: 0]
  ------------------
  762|      0|         push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
  763|       |      // jump to next state:
  764|      0|      pstate = rep->alt.p;
  765|      0|      return true;
  766|      0|   }
  767|   444k|   else
  768|   444k|   {
  769|       |      // non-greedy, push state and return true if we can skip:
  770|   444k|      if(count < rep->max)
  ------------------
  |  Branch (770:10): [True: 444k, False: 0]
  ------------------
  771|   444k|         push_single_repeat(count, rep, position, saved_state_rep_fast_dot);
  772|   444k|      pstate = rep->alt.p;
  773|   444k|      return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
  ------------------
  |  Branch (773:14): [True: 85, False: 444k]
  ------------------
  774|   444k|   }
  775|   444k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE18push_single_repeatEmPKNS0_9re_repeatES6_i:
  347|  1.25M|{
  348|  1.25M|   saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
  349|  1.25M|   --pmp;
  350|  1.25M|   if(pmp < m_stack_base)
  ------------------
  |  Branch (350:7): [True: 6.58k, False: 1.25M]
  ------------------
  351|  6.58k|   {
  352|  6.58k|      extend_stack();
  353|  6.58k|      pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
  354|  6.58k|      --pmp;
  355|  6.58k|   }
  356|  1.25M|   (void) new (pmp)saved_single_repeat<BidiIterator>(c, r, last_position, state_id);
  357|  1.25M|   m_backup_state = pmp;
  358|  1.25M|}
_ZN5boost13re_detail_50019saved_single_repeatINSt3__111__wrap_iterIPKcEEEC2EmPKNS0_9re_repeatES6_i:
  120|  1.25M|      : saved_state(arg_id), count(c), rep(r), last_position(lp){}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE17match_char_repeatEv:
  779|   547k|{
  780|       |#ifdef BOOST_REGEX_MSVC
  781|       |#pragma warning(push)
  782|       |#pragma warning(disable:4127)
  783|       |#endif
  784|       |#ifdef BOOST_BORLANDC
  785|       |#pragma option push -w-8008 -w-8066 -w-8004
  786|       |#endif
  787|   547k|   const re_repeat* rep = static_cast<const re_repeat*>(pstate);
  788|   547k|   BOOST_REGEX_ASSERT(1 == static_cast<const re_literal*>(rep->next.p)->length);
  ------------------
  |  |   58|   547k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   547k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  789|   547k|   const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(rep->next.p) + 1);
  790|   547k|   std::size_t count = 0;
  791|       |   //
  792|       |   // start by working out how much we can skip:
  793|       |   //
  794|   547k|   bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
  ------------------
  |  Branch (794:18): [True: 547k, False: 0]
  |  Branch (794:36): [True: 547k, False: 0]
  |  Branch (794:85): [True: 0, False: 0]
  ------------------
  795|   547k|   std::size_t desired = greedy ? rep->max : rep->min;
  ------------------
  |  Branch (795:26): [True: 547k, False: 0]
  ------------------
  796|   547k|   if(::boost::is_random_access_iterator<BidiIterator>::value)
  ------------------
  |  Branch (796:7): [Folded - Ignored]
  ------------------
  797|   547k|   {
  798|   547k|      BidiIterator end = position;
  799|       |      // Move end forward by "desired", preferably without using distance or advance if we can
  800|       |      // as these can be slow for some iterator types.
  801|   547k|      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : std::distance(position, last);
  ------------------
  |  Branch (801:25): [True: 0, False: 547k]
  ------------------
  802|   547k|      if(desired >= len)
  ------------------
  |  Branch (802:10): [True: 209, False: 547k]
  ------------------
  803|    209|         end = last;
  804|   547k|      else
  805|   547k|         std::advance(end, desired);
  806|   547k|      BidiIterator origin(position);
  807|   782k|      while((position != end) && (traits_inst.translate(*position, icase) == what))
  ------------------
  |  Branch (807:13): [True: 547k, False: 234k]
  |  Branch (807:34): [True: 234k, False: 312k]
  ------------------
  808|   234k|      {
  809|   234k|         ++position;
  810|   234k|      }
  811|   547k|      count = (unsigned)std::distance(origin, position);
  812|   547k|   }
  813|      0|   else
  814|      0|   {
  815|      0|      while((count < desired) && (position != last) && (traits_inst.translate(*position, icase) == what))
  ------------------
  |  Branch (815:13): [True: 0, False: 0]
  |  Branch (815:34): [True: 0, False: 0]
  |  Branch (815:56): [True: 0, False: 0]
  ------------------
  816|      0|      {
  817|      0|         ++position;
  818|      0|         ++count;
  819|      0|      }
  820|      0|   }
  821|       |
  822|   547k|   if(count < rep->min)
  ------------------
  |  Branch (822:7): [True: 0, False: 547k]
  ------------------
  823|      0|      return false;
  824|       |
  825|   547k|   if(greedy)
  ------------------
  |  Branch (825:7): [True: 547k, False: 0]
  ------------------
  826|   547k|   {
  827|   547k|      if((rep->leading) && (count < rep->max))
  ------------------
  |  Branch (827:10): [True: 0, False: 547k]
  |  Branch (827:28): [True: 0, False: 0]
  ------------------
  828|      0|         restart = position;
  829|       |      // push backtrack info if available:
  830|   547k|      if(count - rep->min)
  ------------------
  |  Branch (830:10): [True: 234k, False: 312k]
  ------------------
  831|   234k|         push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
  832|       |      // jump to next state:
  833|   547k|      pstate = rep->alt.p;
  834|   547k|      return true;
  835|   547k|   }
  836|      0|   else
  837|      0|   {
  838|       |      // non-greedy, push state and return true if we can skip:
  839|      0|      if(count < rep->max)
  ------------------
  |  Branch (839:10): [True: 0, False: 0]
  ------------------
  840|      0|         push_single_repeat(count, rep, position, saved_state_rep_char);
  841|      0|      pstate = rep->alt.p;
  842|      0|      return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
  ------------------
  |  Branch (842:14): [True: 0, False: 0]
  ------------------
  843|      0|   }
  844|       |#ifdef BOOST_BORLANDC
  845|       |#pragma option pop
  846|       |#endif
  847|       |#ifdef BOOST_REGEX_MSVC
  848|       |#pragma warning(pop)
  849|       |#endif
  850|   547k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE16match_set_repeatEv:
  854|  9.40M|{
  855|       |#ifdef BOOST_REGEX_MSVC
  856|       |#pragma warning(push)
  857|       |#pragma warning(disable:4127)
  858|       |#endif
  859|       |#ifdef BOOST_BORLANDC
  860|       |#pragma option push -w-8008 -w-8066 -w-8004
  861|       |#endif
  862|  9.40M|   const re_repeat* rep = static_cast<const re_repeat*>(pstate);
  863|  9.40M|   const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map;
  864|  9.40M|   std::size_t count = 0;
  865|       |   //
  866|       |   // start by working out how much we can skip:
  867|       |   //
  868|  9.40M|   bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent);   
  ------------------
  |  Branch (868:18): [True: 9.13M, False: 276k]
  |  Branch (868:36): [True: 9.13M, False: 0]
  |  Branch (868:85): [True: 0, False: 0]
  ------------------
  869|  9.40M|   std::size_t desired = greedy ? rep->max : rep->min;
  ------------------
  |  Branch (869:26): [True: 9.13M, False: 276k]
  ------------------
  870|  9.40M|   if(::boost::is_random_access_iterator<BidiIterator>::value)
  ------------------
  |  Branch (870:7): [Folded - Ignored]
  ------------------
  871|  9.40M|   {
  872|  9.40M|      BidiIterator end = position;
  873|       |      // Move end forward by "desired", preferably without using distance or advance if we can
  874|       |      // as these can be slow for some iterator types.
  875|  9.40M|      std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : std::distance(position, last);
  ------------------
  |  Branch (875:25): [True: 6.74M, False: 2.65M]
  ------------------
  876|  9.40M|      if(desired >= len)
  ------------------
  |  Branch (876:10): [True: 6.75M, False: 2.65M]
  ------------------
  877|  6.75M|         end = last;
  878|  2.65M|      else
  879|  2.65M|         std::advance(end, desired);
  880|  9.40M|      BidiIterator origin(position);
  881|  38.2M|      while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
  ------------------
  |  Branch (881:13): [True: 37.9M, False: 293k]
  |  Branch (881:34): [True: 28.8M, False: 9.11M]
  ------------------
  882|  28.8M|      {
  883|  28.8M|         ++position;
  884|  28.8M|      }
  885|  9.40M|      count = (unsigned)std::distance(origin, position);
  886|  9.40M|   }
  887|      0|   else
  888|      0|   {
  889|      0|      while((count < desired) && (position != last) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
  ------------------
  |  Branch (889:13): [True: 0, False: 0]
  |  Branch (889:34): [True: 0, False: 0]
  |  Branch (889:56): [True: 0, False: 0]
  ------------------
  890|      0|      {
  891|      0|         ++position;
  892|      0|         ++count;
  893|      0|      }
  894|      0|   }
  895|       |
  896|  9.40M|   if(count < rep->min)
  ------------------
  |  Branch (896:7): [True: 5.56M, False: 3.84M]
  ------------------
  897|  5.56M|      return false;
  898|       |
  899|  3.84M|   if(greedy)
  ------------------
  |  Branch (899:7): [True: 3.56M, False: 276k]
  ------------------
  900|  3.56M|   {
  901|  3.56M|      if((rep->leading) && (count < rep->max))
  ------------------
  |  Branch (901:10): [True: 2.38M, False: 1.18M]
  |  Branch (901:28): [True: 2.37M, False: 12.0k]
  ------------------
  902|  2.37M|         restart = position;
  903|       |      // push backtrack info if available:
  904|  3.56M|      if(count - rep->min)
  ------------------
  |  Branch (904:10): [True: 302k, False: 3.26M]
  ------------------
  905|   302k|         push_single_repeat(count, rep, position, saved_state_greedy_single_repeat);
  906|       |      // jump to next state:
  907|  3.56M|      pstate = rep->alt.p;
  908|  3.56M|      return true;
  909|  3.56M|   }
  910|   276k|   else
  911|   276k|   {
  912|       |      // non-greedy, push state and return true if we can skip:
  913|   276k|      if(count < rep->max)
  ------------------
  |  Branch (913:10): [True: 276k, False: 0]
  ------------------
  914|   276k|         push_single_repeat(count, rep, position, saved_state_rep_short_set);
  915|   276k|      pstate = rep->alt.p;
  916|   276k|      return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip);
  ------------------
  |  Branch (916:14): [True: 40, False: 276k]
  ------------------
  917|   276k|   }
  918|       |#ifdef BOOST_BORLANDC
  919|       |#pragma option pop
  920|       |#endif
  921|       |#ifdef BOOST_REGEX_MSVC
  922|       |#pragma warning(pop)
  923|       |#endif
  924|  3.84M|}
_ZN5boost13re_detail_50011incrementerC2EPj:
  141|  13.2M|   incrementer(unsigned* pu) : m_pu(pu) { ++*m_pu; }
_ZN5boost13re_detail_50011incrementergtEj:
  143|  13.2M|   bool operator > (unsigned i) { return *m_pu > i; }
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE22push_recursion_stopperEv:
  272|  13.2M|{
  273|  13.2M|   saved_state* pmp = m_backup_state;
  274|  13.2M|   --pmp;
  275|  13.2M|   if(pmp < m_stack_base)
  ------------------
  |  Branch (275:7): [True: 0, False: 13.2M]
  ------------------
  276|      0|   {
  277|      0|      extend_stack();
  278|      0|      pmp = m_backup_state;
  279|      0|      --pmp;
  280|      0|   }
  281|  13.2M|   (void) new (pmp)saved_state(saved_type_recurse);
  282|  13.2M|   m_backup_state = pmp;
  283|  13.2M|}
_ZN5boost13re_detail_50011incrementerD2Ev:
  142|  13.2M|   ~incrementer() { --*m_pu; }
_ZN5boost13re_detail_50015save_state_initC2EPPNS0_11saved_stateES4_:
   98|  13.2M|      : stack(base)
   99|  13.2M|   {
  100|  13.2M|      *base = static_cast<saved_state*>(get_mem_block());
  101|  13.2M|      *end = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(*base)+BOOST_REGEX_BLOCKSIZE);
  ------------------
  |  |  429|  13.2M|#     define BOOST_REGEX_BLOCKSIZE 4096
  ------------------
  102|  13.2M|      --(*end);
  103|  13.2M|      (void) new (*end)saved_state(0);
  104|  13.2M|      BOOST_REGEX_ASSERT(*end > *base);
  ------------------
  |  |   58|  13.2M|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  13.2M|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  105|  13.2M|   }
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6unwindEb:
 1225|  16.8M|{
 1226|  16.8M|   static unwind_proc_type const s_unwind_table[19] = 
 1227|  16.8M|   {
 1228|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_end,
 1229|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_paren,
 1230|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper,
 1231|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion,
 1232|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_alt,
 1233|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter,
 1234|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block,
 1235|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_greedy_single_repeat,
 1236|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_slow_dot_repeat,
 1237|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_fast_dot_repeat,
 1238|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat,
 1239|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat,
 1240|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat,
 1241|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat,
 1242|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion,
 1243|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop,
 1244|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_commit,
 1245|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_then,
 1246|  16.8M|      &perl_matcher<BidiIterator, Allocator, traits>::unwind_case,
 1247|  16.8M|   };
 1248|       |
 1249|  16.8M|   m_recursive_result = have_match;
 1250|  16.8M|   m_unwound_lookahead = false;
 1251|  16.8M|   m_unwound_alt = false;
 1252|  16.8M|   unwind_proc_type unwinder;
 1253|  16.8M|   bool cont;
 1254|       |   //
 1255|       |   // keep unwinding our stack until we have something to do:
 1256|       |   //
 1257|  16.8M|   do
 1258|  37.0M|   {
 1259|  37.0M|      unwinder = s_unwind_table[m_backup_state->state_id];
 1260|  37.0M|      cont = (this->*unwinder)(m_recursive_result);
 1261|  37.0M|   }while(cont);
  ------------------
  |  Branch (1261:11): [True: 20.1M, False: 16.8M]
  ------------------
 1262|       |   //
 1263|       |   // return true if we have more states to try:
 1264|       |   //
 1265|  16.8M|   return pstate ? true : false;
  ------------------
  |  Branch (1265:11): [True: 3.60M, False: 13.2M]
  ------------------
 1266|  16.8M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE12unwind_parenEb:
 1287|  10.6M|{
 1288|  10.6M|   saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state);
 1289|       |   // restore previous values if no match was found:
 1290|  10.6M|   if(!have_match)
  ------------------
  |  Branch (1290:7): [True: 7.37M, False: 3.28M]
  ------------------
 1291|  7.37M|   {
 1292|  7.37M|      m_presult->set_first(pmp->sub.first, pmp->index, pmp->index == 0);
 1293|  7.37M|      m_presult->set_second(pmp->sub.second, pmp->index, pmp->sub.matched, pmp->index == 0);
 1294|  7.37M|   }
 1295|       |#ifdef BOOST_REGEX_MATCH_EXTRA
 1296|       |   //
 1297|       |   // we have a match, push the capture information onto the stack:
 1298|       |   //
 1299|       |   else if(pmp->sub.matched && (match_extra & m_match_flags))
 1300|       |      ((*m_presult)[pmp->index]).get_captures().push_back(pmp->sub);
 1301|       |#endif
 1302|       |   // unwind stack:
 1303|  10.6M|   m_backup_state = pmp+1;
 1304|  10.6M|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp);
 1305|  10.6M|   return true; // keep looking
 1306|  10.6M|}
_ZN5boost13re_detail_50015inplace_destroyINS0_19saved_matched_parenINSt3__111__wrap_iterIPKcEEEEEEvPT_:
   38|  10.6M|{
   39|  10.6M|   (void)p;  // warning suppression
   40|  10.6M|   p->~T();
   41|  10.6M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE24unwind_recursion_stopperEb:
 1310|  13.2M|{
 1311|  13.2M|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++);
 1312|  13.2M|   pstate = 0;   // nothing left to search
 1313|  13.2M|   return false; // end of stack nothing more to search
 1314|  13.2M|}
_ZN5boost13re_detail_50015inplace_destroyINS0_11saved_stateEEEvPT_:
   38|  13.2M|{
   39|  13.2M|   (void)p;  // warning suppression
   40|  13.2M|   p->~T();
   41|  13.2M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE10unwind_altEb:
 1332|  4.51M|{
 1333|  4.51M|   saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
 1334|  4.51M|   if(!r)
  ------------------
  |  Branch (1334:7): [True: 3.36M, False: 1.14M]
  ------------------
 1335|  3.36M|   {
 1336|  3.36M|      pstate = pmp->pstate;
 1337|  3.36M|      position = pmp->position;
 1338|  3.36M|   }
 1339|  4.51M|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
 1340|  4.51M|   m_backup_state = pmp;
 1341|  4.51M|   m_unwound_alt = !r;
 1342|  4.51M|   return r; 
 1343|  4.51M|}
_ZN5boost13re_detail_50015inplace_destroyINS0_14saved_positionINSt3__111__wrap_iterIPKcEEEEEEvPT_:
   38|  4.86M|{
   39|  4.86M|   (void)p;  // warning suppression
   40|  4.86M|   p->~T();
   41|  4.86M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE23unwind_repeater_counterEb:
 1347|  6.90M|{
 1348|  6.90M|   saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state);
 1349|  6.90M|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
 1350|  6.90M|   m_backup_state = pmp;
 1351|  6.90M|   return true; // keep looking
 1352|  6.90M|}
_ZN5boost13re_detail_50015inplace_destroyINS0_14saved_repeaterINSt3__111__wrap_iterIPKcEEEEEEvPT_:
   38|  6.90M|{
   39|  6.90M|   (void)p;  // warning suppression
   40|  6.90M|   p->~T();
   41|  6.90M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE18unwind_extra_blockEb:
 1356|  25.2k|{
 1357|  25.2k|   ++used_block_count;
 1358|  25.2k|   saved_extra_block* pmp = static_cast<saved_extra_block*>(m_backup_state);
 1359|  25.2k|   void* condemmed = m_stack_base;
 1360|  25.2k|   m_stack_base = pmp->base;
 1361|  25.2k|   m_backup_state = pmp->end;
 1362|  25.2k|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp);
 1363|  25.2k|   put_mem_block(condemmed);
 1364|  25.2k|   return true; // keep looking
 1365|  25.2k|}
_ZN5boost13re_detail_50015inplace_destroyINS0_17saved_extra_blockEEEvPT_:
   38|  25.2k|{
   39|  25.2k|   (void)p;  // warning suppression
   40|  25.2k|   p->~T();
   41|  25.2k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE27unwind_greedy_single_repeatEb:
 1377|   537k|{
 1378|   537k|   saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
 1379|       |
 1380|       |   // if we have a match, just discard this state:
 1381|   537k|   if(r) 
  ------------------
  |  Branch (1381:7): [True: 371k, False: 166k]
  ------------------
 1382|   371k|   {
 1383|   371k|      destroy_single_repeat();
 1384|   371k|      return true;
 1385|   371k|   }
 1386|       |
 1387|   166k|   const re_repeat* rep = pmp->rep;
 1388|   166k|   std::size_t count = pmp->count;
 1389|   166k|   BOOST_REGEX_ASSERT(rep->next.p != 0);
  ------------------
  |  |   58|   166k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   166k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1390|   166k|   BOOST_REGEX_ASSERT(rep->alt.p != 0);
  ------------------
  |  |   58|   166k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   166k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1391|       |
 1392|   166k|   count -= rep->min;
 1393|       |   
 1394|   166k|   if((m_match_flags & match_partial) && (position == last))
  ------------------
  |  Branch (1394:7): [True: 0, False: 166k]
  |  Branch (1394:42): [True: 0, False: 0]
  ------------------
 1395|      0|      m_has_partial_match = true;
 1396|       |
 1397|   166k|   BOOST_REGEX_ASSERT(count);
  ------------------
  |  |   58|   166k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   166k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1398|   166k|   position = pmp->last_position;
 1399|       |
 1400|       |   // backtrack till we can skip out:
 1401|   166k|   do
 1402|   166k|   {
 1403|   166k|      --position;
 1404|   166k|      --count;
 1405|   166k|      ++state_count;
 1406|   166k|   }while(count && !can_start(*position, rep->_map, mask_skip));
  ------------------
  |  Branch (1406:11): [True: 0, False: 166k]
  |  Branch (1406:20): [True: 0, False: 0]
  ------------------
 1407|       |
 1408|       |   // if we've hit base, destroy this state:
 1409|   166k|   if(count == 0)
  ------------------
  |  Branch (1409:7): [True: 166k, False: 0]
  ------------------
 1410|   166k|   {
 1411|   166k|         destroy_single_repeat();
 1412|   166k|         if(!can_start(*position, rep->_map, mask_skip))
  ------------------
  |  Branch (1412:13): [True: 166k, False: 170]
  ------------------
 1413|   166k|            return true;
 1414|   166k|   }
 1415|      0|   else
 1416|      0|   {
 1417|      0|      pmp->count = count + rep->min;
 1418|      0|      pmp->last_position = position;
 1419|      0|   }
 1420|    170|   pstate = rep->alt.p;
 1421|    170|   return false;
 1422|   166k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE21destroy_single_repeatEv:
 1369|  1.25M|{
 1370|  1.25M|   saved_single_repeat<BidiIterator>* p = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
 1371|  1.25M|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(p++);
 1372|  1.25M|   m_backup_state = p;
 1373|  1.25M|}
_ZN5boost13re_detail_50015inplace_destroyINS0_19saved_single_repeatINSt3__111__wrap_iterIPKcEEEEEEvPT_:
   38|  1.25M|{
   39|  1.25M|   (void)p;  // warning suppression
   40|  1.25M|   p->~T();
   41|  1.25M|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE22unwind_fast_dot_repeatEb:
 1490|   504k|{
 1491|   504k|   saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
 1492|       |
 1493|       |   // if we have a match, just discard this state:
 1494|   504k|   if(r) 
  ------------------
  |  Branch (1494:7): [True: 444k, False: 59.6k]
  ------------------
 1495|   444k|   {
 1496|   444k|      destroy_single_repeat();
 1497|   444k|      return true;
 1498|   444k|   }
 1499|       |
 1500|  59.6k|   const re_repeat* rep = pmp->rep;
 1501|  59.6k|   std::size_t count = pmp->count;
 1502|       |
 1503|  59.6k|   BOOST_REGEX_ASSERT(count < rep->max);
  ------------------
  |  |   58|  59.6k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  59.6k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1504|  59.6k|   position = pmp->last_position;
 1505|  59.6k|   if(position != last)
  ------------------
  |  Branch (1505:7): [True: 59.6k, False: 2]
  ------------------
 1506|  59.6k|   {
 1507|       |
 1508|       |      // wind forward until we can skip out of the repeat:
 1509|  59.6k|      do
 1510|  6.94M|      {
 1511|  6.94M|         ++position;
 1512|  6.94M|         ++count;
 1513|  6.94M|         ++state_count;
 1514|  6.94M|      }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
  ------------------
  |  Branch (1514:14): [True: 6.94M, False: 0]
  |  Branch (1514:36): [True: 6.94M, False: 66]
  |  Branch (1514:58): [True: 6.88M, False: 59.5k]
  ------------------
 1515|  59.6k|   }
 1516|       |
 1517|       |   // remember where we got to if this is a leading repeat:
 1518|  59.6k|   if((rep->leading) && (count < rep->max))
  ------------------
  |  Branch (1518:7): [True: 0, False: 59.6k]
  |  Branch (1518:25): [True: 0, False: 0]
  ------------------
 1519|      0|      restart = position;
 1520|  59.6k|   if(position == last)
  ------------------
  |  Branch (1520:7): [True: 68, False: 59.5k]
  ------------------
 1521|     68|   {
 1522|       |      // can't repeat any more, remove the pushed state: 
 1523|     68|      destroy_single_repeat();
 1524|     68|      if((m_match_flags & match_partial) && (position == last) && (position != search_base))
  ------------------
  |  Branch (1524:10): [True: 0, False: 68]
  |  Branch (1524:45): [True: 0, False: 0]
  |  Branch (1524:67): [True: 0, False: 0]
  ------------------
 1525|      0|         m_has_partial_match = true;
 1526|     68|      if(0 == (rep->can_be_null & mask_skip))
  ------------------
  |  Branch (1526:10): [True: 12, False: 56]
  ------------------
 1527|     12|         return true;
 1528|     68|   }
 1529|  59.5k|   else if(count == rep->max)
  ------------------
  |  Branch (1529:12): [True: 0, False: 59.5k]
  ------------------
 1530|      0|   {
 1531|       |      // can't repeat any more, remove the pushed state: 
 1532|      0|      destroy_single_repeat();
 1533|      0|      if(!can_start(*position, rep->_map, mask_skip))
  ------------------
  |  Branch (1533:10): [True: 0, False: 0]
  ------------------
 1534|      0|         return true;
 1535|      0|   }
 1536|  59.5k|   else
 1537|  59.5k|   {
 1538|  59.5k|      pmp->count = count;
 1539|  59.5k|      pmp->last_position = position;
 1540|  59.5k|   }
 1541|  59.5k|   pstate = rep->alt.p;
 1542|  59.5k|   return false;
 1543|  59.6k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE23unwind_short_set_repeatEb:
 1616|   289k|{
 1617|   289k|   saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state);
 1618|       |
 1619|       |   // if we have a match, just discard this state:
 1620|   289k|   if(r) 
  ------------------
  |  Branch (1620:7): [True: 220k, False: 69.2k]
  ------------------
 1621|   220k|   {
 1622|   220k|      destroy_single_repeat();
 1623|   220k|      return true;
 1624|   220k|   }
 1625|       |
 1626|  69.2k|   const re_repeat* rep = pmp->rep;
 1627|  69.2k|   std::size_t count = pmp->count;
 1628|  69.2k|   pstate = rep->next.p;
 1629|  69.2k|   const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map;
 1630|  69.2k|   position = pmp->last_position;
 1631|       |
 1632|  69.2k|   BOOST_REGEX_ASSERT(rep->type == syntax_element_short_set_rep);
  ------------------
  |  |   58|  69.2k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  69.2k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1633|  69.2k|   BOOST_REGEX_ASSERT(rep->next.p != 0);
  ------------------
  |  |   58|  69.2k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  69.2k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1634|  69.2k|   BOOST_REGEX_ASSERT(rep->alt.p != 0);
  ------------------
  |  |   58|  69.2k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  69.2k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1635|  69.2k|   BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_set);
  ------------------
  |  |   58|  69.2k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  69.2k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1636|  69.2k|   BOOST_REGEX_ASSERT(count < rep->max);
  ------------------
  |  |   58|  69.2k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|  69.2k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
 1637|       |   
 1638|  69.2k|   if(position != last)
  ------------------
  |  Branch (1638:7): [True: 69.2k, False: 40]
  ------------------
 1639|  69.2k|   {
 1640|       |      // wind forward until we can skip out of the repeat:
 1641|  69.2k|      do
 1642|  9.60M|      {
 1643|  9.60M|         if(!map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
  ------------------
  |  Branch (1643:13): [True: 55.7k, False: 9.55M]
  ------------------
 1644|  55.7k|         {
 1645|       |            // failed repeat match, discard this state and look for another:
 1646|  55.7k|            destroy_single_repeat();
 1647|  55.7k|            return true;
 1648|  55.7k|         }
 1649|  9.55M|         ++count;
 1650|  9.55M|         ++ position;
 1651|  9.55M|         ++state_count;
 1652|  9.55M|         pstate = rep->next.p;
 1653|  9.55M|      }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
  ------------------
  |  Branch (1653:14): [True: 9.55M, False: 0]
  |  Branch (1653:36): [True: 9.55M, False: 66]
  |  Branch (1653:58): [True: 9.53M, False: 13.4k]
  ------------------
 1654|  69.2k|   }   
 1655|       |   // remember where we got to if this is a leading repeat:
 1656|  13.5k|   if((rep->leading) && (count < rep->max))
  ------------------
  |  Branch (1656:7): [True: 0, False: 13.5k]
  |  Branch (1656:25): [True: 0, False: 0]
  ------------------
 1657|      0|      restart = position;
 1658|  13.5k|   if(position == last)
  ------------------
  |  Branch (1658:7): [True: 106, False: 13.4k]
  ------------------
 1659|    106|   {
 1660|       |      // can't repeat any more, remove the pushed state: 
 1661|    106|      destroy_single_repeat();
 1662|    106|      if((m_match_flags & match_partial) && (position == last) && (position != search_base))
  ------------------
  |  Branch (1662:10): [True: 0, False: 106]
  |  Branch (1662:45): [True: 0, False: 0]
  |  Branch (1662:67): [True: 0, False: 0]
  ------------------
 1663|      0|         m_has_partial_match = true;
 1664|    106|      if(0 == (rep->can_be_null & mask_skip))
  ------------------
  |  Branch (1664:10): [True: 106, False: 0]
  ------------------
 1665|    106|         return true;
 1666|    106|   }
 1667|  13.4k|   else if(count == rep->max)
  ------------------
  |  Branch (1667:12): [True: 0, False: 13.4k]
  ------------------
 1668|      0|   {
 1669|       |      // can't repeat any more, remove the pushed state: 
 1670|      0|      destroy_single_repeat();
 1671|      0|      if(!can_start(*position, rep->_map, mask_skip))
  ------------------
  |  Branch (1671:10): [True: 0, False: 0]
  ------------------
 1672|      0|         return true;
 1673|      0|   }
 1674|  13.4k|   else
 1675|  13.4k|   {
 1676|  13.4k|      pmp->count = count;
 1677|  13.4k|      pmp->last_position = position;
 1678|  13.4k|   }
 1679|  13.4k|   pstate = rep->alt.p;
 1680|  13.4k|   return false;
 1681|  13.5k|}
_ZN5boost13re_detail_50012perl_matcherINSt3__111__wrap_iterIPKcEENS2_9allocatorINS_9sub_matchIS6_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE24unwind_non_greedy_repeatEb:
 1755|   356k|{
 1756|   356k|   saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state);
 1757|   356k|   if(!r)
  ------------------
  |  Branch (1757:7): [True: 166k, False: 190k]
  ------------------
 1758|   166k|   {
 1759|   166k|      position = pmp->position;
 1760|   166k|      pstate = pmp->pstate;
 1761|   166k|      ++(*next_count);
 1762|   166k|   }
 1763|   356k|   boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++);
 1764|   356k|   m_backup_state = pmp;
 1765|   356k|   return r;
 1766|   356k|}
_ZN5boost13re_detail_50015save_state_initD2Ev:
  107|  13.2M|   {
  108|  13.2M|      put_mem_block(*stack);
  109|  13.2M|      *stack = 0;
  110|  13.2M|   }

_ZN5boost13re_detail_50016find_sort_syntaxINS0_31cpp_regex_traits_implementationIcEEcEEjPKT_PT0_:
   54|      1|{
   55|       |   //
   56|       |   // compare 'a' with 'A' to see how similar they are,
   57|       |   // should really use a-accute but we can't portably do that,
   58|       |   //
   59|      1|   typedef typename traits::string_type string_type;
   60|      1|   typedef typename traits::char_type char_type;
   61|       |
   62|       |   // Suppress incorrect warning for MSVC
   63|      1|   (void)pt;
   64|       |
   65|      1|   char_type a[2] = {'a', '\0', };
   66|      1|   string_type sa(pt->transform(a, a+1));
   67|      1|   if(sa == a)
  ------------------
  |  Branch (67:7): [True: 0, False: 1]
  ------------------
   68|      0|   {
   69|      0|      *delim = 0;
   70|      0|      return sort_C;
   71|      0|   }
   72|      1|   char_type A[2] = { 'A', '\0', };
   73|      1|   string_type sA(pt->transform(A, A+1));
   74|      1|   char_type c[2] = { ';', '\0', };
   75|      1|   string_type sc(pt->transform(c, c+1));
   76|       |
   77|      1|   int pos = 0;
   78|      1|   while((pos <= static_cast<int>(sa.size())) && (pos <= static_cast<int>(sA.size())) && (sa[pos] == sA[pos])) ++pos;
  ------------------
  |  Branch (78:10): [True: 1, False: 0]
  |  Branch (78:50): [True: 1, False: 0]
  |  Branch (78:90): [True: 0, False: 1]
  ------------------
   79|      1|   --pos;
   80|      1|   if(pos < 0)
  ------------------
  |  Branch (80:7): [True: 1, False: 0]
  ------------------
   81|      1|   {
   82|      1|      *delim = 0;
   83|      1|      return sort_unknown;
   84|      1|   }
   85|       |   //
   86|       |   // at this point sa[pos] is either the end of a fixed width field
   87|       |   // or the character that acts as a delimiter:
   88|       |   //
   89|      0|   charT maybe_delim = sa[pos];
   90|      0|   if((pos != 0) && (count_chars(sa, maybe_delim) == count_chars(sA, maybe_delim)) && (count_chars(sa, maybe_delim) == count_chars(sc, maybe_delim)))
  ------------------
  |  Branch (90:7): [True: 0, False: 0]
  |  Branch (90:21): [True: 0, False: 0]
  |  Branch (90:87): [True: 0, False: 0]
  ------------------
   91|      0|   {
   92|      0|      *delim = maybe_delim;
   93|      0|      return sort_delim;
   94|      0|   }
   95|       |   //
   96|       |   // OK doen't look like a delimiter, try for fixed width field:
   97|       |   //
   98|      0|   if((sa.size() == sA.size()) && (sa.size() == sc.size()))
  ------------------
  |  Branch (98:7): [True: 0, False: 0]
  |  Branch (98:35): [True: 0, False: 0]
  ------------------
   99|      0|   {
  100|       |      // note assumes that the fixed width field is less than
  101|       |      // (numeric_limits<charT>::max)(), should be true for all types
  102|       |      // I can't imagine 127 character fields...
  103|      0|      *delim = static_cast<charT>(++pos);
  104|      0|      return sort_fixed;
  105|      0|   }
  106|       |   //
  107|       |   // don't know what it is:
  108|       |   //
  109|      0|   *delim = 0;
  110|      0|   return sort_unknown;
  111|      0|}

_ZN5boost13re_detail_50011raw_storageC2Ev:
  198|  33.5k|{
  199|  33.5k|   last = start = end = 0;
  200|  33.5k|}
_ZN5boost13re_detail_50011raw_storageD2Ev:
  111|  33.5k|   {
  112|  33.5k|      ::operator delete(start);
  113|  33.5k|   }
_ZN5boost13re_detail_50011raw_storage5clearEv:
  180|  33.5k|   {
  181|  33.5k|      end = start;
  182|  33.5k|   }
_ZNK5boost13re_detail_50011raw_storage4dataEv:
  170|  1.72M|   {
  171|  1.72M|      return start;
  172|  1.72M|   }
_ZN5boost13re_detail_50011raw_storage6insertEmm:
  149|   129k|   {
  150|   129k|      BOOST_REGEX_ASSERT(pos <= size_type(end - start));
  ------------------
  |  |   58|   129k|#  define BOOST_REGEX_ASSERT(x) BOOST_ASSERT(x)
  |  |  ------------------
  |  |  |  |   66|   129k|# define BOOST_ASSERT(expr) assert(expr)
  |  |  ------------------
  ------------------
  151|   129k|      if (size_type(last - end) < n)
  ------------------
  |  Branch (151:11): [True: 33.5k, False: 95.8k]
  ------------------
  152|  33.5k|         resize(n + (end - start));
  153|   129k|      void* result = start + pos;
  154|   129k|      std::memmove(start + pos + n, start + pos, (end - start) - pos);
  155|   129k|      end += n;
  156|   129k|      return result;
  157|   129k|   }
_ZN5boost13re_detail_50011raw_storage6resizeEm:
  116|  81.4k|   {
  117|  81.4k|      size_type newsize = start ? last - start : 1024;
  ------------------
  |  Branch (117:27): [True: 47.9k, False: 33.5k]
  ------------------
  118|   129k|      while (newsize < n)
  ------------------
  |  Branch (118:14): [True: 47.9k, False: 81.4k]
  ------------------
  119|  47.9k|         newsize *= 2;
  120|  81.4k|      size_type datasize = end - start;
  121|       |      // extend newsize to WORD/DWORD boundary:
  122|  81.4k|      newsize = (newsize + padding_mask) & ~(padding_mask);
  123|       |
  124|       |      // allocate and copy data:
  125|  81.4k|      pointer ptr = static_cast<pointer>(::operator new(newsize));
  126|  81.4k|      BOOST_REGEX_NOEH_ASSERT(ptr)
  127|  81.4k|         if (start)
  ------------------
  |  Branch (127:14): [True: 47.9k, False: 33.5k]
  ------------------
  128|  47.9k|            std::memcpy(ptr, start, datasize);
  129|       |
  130|       |      // get rid of old buffer:
  131|  81.4k|      ::operator delete(start);
  132|       |
  133|       |      // and set up pointers:
  134|  81.4k|      start = ptr;
  135|  81.4k|      end = ptr + datasize;
  136|  81.4k|      last = ptr + newsize;
  137|  81.4k|   }
_ZN5boost13re_detail_50011raw_storage5alignEv:
  185|  1.05M|   {
  186|       |      // move end up to a boundary:
  187|  1.05M|      end = start + (((end - start) + padding_mask) & ~padding_mask);
  188|  1.05M|   }
_ZN5boost13re_detail_50011raw_storage4sizeEv:
  160|  1.20M|   {
  161|  1.20M|      return size_type(end - start);
  162|  1.20M|   }
_ZN5boost13re_detail_50011raw_storage6extendEm:
  140|   742k|   {
  141|   742k|      if(size_type(last - end) < n)
  ------------------
  |  Branch (141:10): [True: 47.9k, False: 694k]
  ------------------
  142|  47.9k|         resize(n + (end - start));
  143|   742k|      pointer result = end;
  144|   742k|      end += n;
  145|   742k|      return result;
  146|   742k|   }

_ZN5boost12regex_searchINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SE_RNS_13match_resultsISE_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE:
   30|  13.2M|{
   31|  13.2M|   return regex_search(first, last, m, e, flags, first);
   32|  13.2M|}
_ZN5boost12regex_searchINSt3__111__wrap_iterIPKcEENS1_9allocatorINS_9sub_matchIS5_EEEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SE_RNS_13match_resultsISE_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESE_:
   40|  13.2M|{
   41|  13.2M|   if(e.flags() & regex_constants::failbit)
  ------------------
  |  Branch (41:7): [True: 0, False: 13.2M]
  ------------------
   42|      0|      return false;
   43|       |
   44|  13.2M|   BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base);
  ------------------
  |  |  158|  13.2M|#define BOOST_REGEX_DETAIL_NS BOOST_REGEX_JOIN(re_detail_, BOOST_RE_VERSION)
  |  |  ------------------
  |  |  |  |  122|  13.2M|#define BOOST_REGEX_JOIN(X, Y) BOOST_REGEX_DO_JOIN(X, Y)
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|  13.2M|#define BOOST_REGEX_DO_JOIN(X, Y) BOOST_REGEX_DO_JOIN2(X,Y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|  13.2M|#define BOOST_REGEX_DO_JOIN2(X, Y) X##Y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|  13.2M|   return matcher.find();
   46|  13.2M|}

_ZN5boost20regex_traits_wrapperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEC2Ev:
  121|  33.5k|   regex_traits_wrapper(){}
_ZN5boost12regex_traitsIcNS_16cpp_regex_traitsIcEEEC2Ev:
   39|  33.5k|   regex_traits() : implementationT() {}

_ZN5boost13re_detail_50018get_default_syntaxEh:
   50|     59|{
   51|       |   // if the user hasn't supplied a message catalog, then this supplies
   52|       |   // default "messages" for us to load in the range 1-100.
   53|     59|   const char* messages[] = {
   54|     59|         "",
   55|     59|         "(",
   56|     59|         ")",
   57|     59|         "$",
   58|     59|         "^",
   59|     59|         ".",
   60|     59|         "*",
   61|     59|         "+",
   62|     59|         "?",
   63|     59|         "[",
   64|     59|         "]",
   65|     59|         "|",
   66|     59|         "\\",
   67|     59|         "#",
   68|     59|         "-",
   69|     59|         "{",
   70|     59|         "}",
   71|     59|         "0123456789",
   72|     59|         "b",
   73|     59|         "B",
   74|     59|         "<",
   75|     59|         ">",
   76|     59|         "",
   77|     59|         "",
   78|     59|         "A`",
   79|     59|         "z'",
   80|     59|         "\n",
   81|     59|         ",",
   82|     59|         "a",
   83|     59|         "f",
   84|     59|         "n",
   85|     59|         "r",
   86|     59|         "t",
   87|     59|         "v",
   88|     59|         "x",
   89|     59|         "c",
   90|     59|         ":",
   91|     59|         "=",
   92|     59|         "e",
   93|     59|         "",
   94|     59|         "",
   95|     59|         "",
   96|     59|         "",
   97|     59|         "",
   98|     59|         "",
   99|     59|         "",
  100|     59|         "",
  101|     59|         "E",
  102|     59|         "Q",
  103|     59|         "X",
  104|     59|         "C",
  105|     59|         "Z",
  106|     59|         "G",
  107|     59|         "!",
  108|     59|         "p",
  109|     59|         "P",
  110|     59|         "N",
  111|     59|         "gk",
  112|     59|         "K",
  113|     59|         "R",
  114|     59|   };
  115|       |
  116|     59|   return ((n >= (sizeof(messages) / sizeof(messages[1]))) ? "" : messages[n]);
  ------------------
  |  Branch (116:12): [True: 0, False: 59]
  ------------------
  117|     59|}
_ZN5boost13re_detail_50024get_default_error_stringENS_15regex_constants10error_typeE:
  120|     12|{
  121|     12|   static const char* const s_default_error_messages[] = {
  122|     12|      "Success",                                                            /* REG_NOERROR 0 error_ok */
  123|     12|      "No match",                                                           /* REG_NOMATCH 1 error_no_match */
  124|     12|      "Invalid regular expression.",                                        /* REG_BADPAT 2 error_bad_pattern */
  125|     12|      "Invalid collation character.",                                       /* REG_ECOLLATE 3 error_collate */
  126|     12|      "Invalid character class name, collating name, or character range.",  /* REG_ECTYPE 4 error_ctype */
  127|     12|      "Invalid or unterminated escape sequence.",                           /* REG_EESCAPE 5 error_escape */
  128|     12|      "Invalid back reference: specified capturing group does not exist.",  /* REG_ESUBREG 6 error_backref */
  129|     12|      "Unmatched [ or [^ in character class declaration.",                  /* REG_EBRACK 7 error_brack */
  130|     12|      "Unmatched marking parenthesis ( or \\(.",                            /* REG_EPAREN 8 error_paren */
  131|     12|      "Unmatched quantified repeat operator { or \\{.",                     /* REG_EBRACE 9 error_brace */
  132|     12|      "Invalid content of repeat range.",                                   /* REG_BADBR 10 error_badbrace */
  133|     12|      "Invalid range end in character class",                               /* REG_ERANGE 11 error_range */
  134|     12|      "Out of memory.",                                                     /* REG_ESPACE 12 error_space NOT USED */
  135|     12|      "Invalid preceding regular expression prior to repetition operator.", /* REG_BADRPT 13 error_badrepeat */
  136|     12|      "Premature end of regular expression",                                /* REG_EEND 14 error_end NOT USED */
  137|     12|      "Regular expression is too large.",                                   /* REG_ESIZE 15 error_size NOT USED */
  138|     12|      "Unmatched ) or \\)",                                                 /* REG_ERPAREN 16 error_right_paren NOT USED */
  139|     12|      "Empty regular expression.",                                          /* REG_EMPTY 17 error_empty */
  140|     12|      "The complexity of matching the regular expression exceeded predefined bounds.  "
  141|     12|      "Try refactoring the regular expression to make each choice made by the state machine unambiguous.  "
  142|     12|      "This exception is thrown to prevent \"eternal\" matches that take an "
  143|     12|      "indefinite period time to locate.",                                  /* REG_ECOMPLEXITY 18 error_complexity */
  144|     12|      "Ran out of stack space trying to match the regular expression.",     /* REG_ESTACK 19 error_stack */
  145|     12|      "Invalid or unterminated Perl (?...) sequence.",                      /* REG_E_PERL 20 error_perl */
  146|     12|      "Unknown error.",                                                     /* REG_E_UNKNOWN 21 error_unknown */
  147|     12|   };
  148|       |
  149|     12|   return (n > ::boost::regex_constants::error_unknown) ? s_default_error_messages[::boost::regex_constants::error_unknown] : s_default_error_messages[n];
  ------------------
  |  Branch (149:11): [True: 0, False: 12]
  ------------------
  150|     12|}
_ZN5boost13re_detail_50020get_default_class_idIcEEiPKT_S4_:
  767|   196k|{
  768|   196k|   static const charT data[73] = {
  769|   196k|      'a', 'l', 'n', 'u', 'm',
  770|   196k|      'a', 'l', 'p', 'h', 'a',
  771|   196k|      'b', 'l', 'a', 'n', 'k',
  772|   196k|      'c', 'n', 't', 'r', 'l',
  773|   196k|      'd', 'i', 'g', 'i', 't',
  774|   196k|      'g', 'r', 'a', 'p', 'h',
  775|   196k|      'l', 'o', 'w', 'e', 'r',
  776|   196k|      'p', 'r', 'i', 'n', 't',
  777|   196k|      'p', 'u', 'n', 'c', 't',
  778|   196k|      's', 'p', 'a', 'c', 'e',
  779|   196k|      'u', 'n', 'i', 'c', 'o', 'd', 'e',
  780|   196k|      'u', 'p', 'p', 'e', 'r',
  781|   196k|      'v',
  782|   196k|      'w', 'o', 'r', 'd',
  783|   196k|      'x', 'd', 'i', 'g', 'i', 't',
  784|   196k|   };
  785|       |
  786|   196k|   static const character_pointer_range<charT> ranges[21] =
  787|   196k|   {
  788|   196k|      {data+0, data+5,}, // alnum
  789|   196k|      {data+5, data+10,}, // alpha
  790|   196k|      {data+10, data+15,}, // blank
  791|   196k|      {data+15, data+20,}, // cntrl
  792|   196k|      {data+20, data+21,}, // d
  793|   196k|      {data+20, data+25,}, // digit
  794|   196k|      {data+25, data+30,}, // graph
  795|   196k|      {data+29, data+30,}, // h
  796|   196k|      {data+30, data+31,}, // l
  797|   196k|      {data+30, data+35,}, // lower
  798|   196k|      {data+35, data+40,}, // print
  799|   196k|      {data+40, data+45,}, // punct
  800|   196k|      {data+45, data+46,}, // s
  801|   196k|      {data+45, data+50,}, // space
  802|   196k|      {data+57, data+58,}, // u
  803|   196k|      {data+50, data+57,}, // unicode
  804|   196k|      {data+57, data+62,}, // upper
  805|   196k|      {data+62, data+63,}, // v
  806|   196k|      {data+63, data+64,}, // w
  807|   196k|      {data+63, data+67,}, // word
  808|   196k|      {data+67, data+73,}, // xdigit
  809|   196k|   };
  810|   196k|   const character_pointer_range<charT>* ranges_begin = ranges;
  811|   196k|   const character_pointer_range<charT>* ranges_end = ranges + (sizeof(ranges)/sizeof(ranges[0]));
  812|       |
  813|   196k|   character_pointer_range<charT> t = { p1, p2, };
  814|   196k|   const character_pointer_range<charT>* p = std::lower_bound(ranges_begin, ranges_end, t);
  815|   196k|   if((p != ranges_end) && (t == *p))
  ------------------
  |  Branch (815:7): [True: 196k, False: 0]
  |  Branch (815:28): [True: 196k, False: 0]
  ------------------
  816|   196k|      return static_cast<int>(p - ranges);
  817|      0|   return -1;
  818|   196k|}
_ZNK5boost13re_detail_50023character_pointer_rangeIcEltERKS2_:
  740|   915k|   {
  741|   915k|      return std::lexicographical_compare(p1, p2, r.p1, r.p2);
  742|   915k|   }
_ZNK5boost13re_detail_50023character_pointer_rangeIcEeqERKS2_:
  744|   196k|   {
  745|       |      // Not only do we check that the ranges are of equal size before
  746|       |      // calling std::equal, but there is no other algorithm available:
  747|       |      // not even a non-standard MS one.  So forward to unchecked_equal
  748|       |      // in the MS case.
  749|   196k|#ifdef __cpp_lib_robust_nonmodifying_seq_ops
  750|   196k|      return std::equal(p1, p2, r.p1, r.p2);
  751|       |#elif defined(BOOST_REGEX_MSVC)
  752|       |      if (((p2 - p1) != (r.p2 - r.p1)))
  753|       |         return false;
  754|       |      const charT* with = r.p1;
  755|       |      const charT* pos = p1;
  756|       |      while (pos != p2)
  757|       |         if (*pos++ != *with++) return false;
  758|       |      return true;
  759|       |
  760|       |#else
  761|       |      return ((p2 - p1) == (r.p2 - r.p1)) && std::equal(p1, p2, r.p1);
  762|       |#endif
  763|   196k|   }
_ZN5boost13re_detail_50012is_separatorIcEEbT_:
  650|   925k|{
  651|   925k|   return BOOST_REGEX_MAKE_BOOL((c == '\n') || (c == '\r') || (c == '\f'));
  ------------------
  |  |   35|  1.96M|#  define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>(x)
  |  |  ------------------
  |  |  |  Branch (35:54): [True: 855k, False: 70.7k]
  |  |  |  Branch (35:54): [True: 32.3k, False: 38.4k]
  |  |  |  Branch (35:54): [True: 6.24k, False: 32.1k]
  |  |  ------------------
  ------------------
  652|   925k|}

_ZN5boost9sub_matchINSt3__111__wrap_iterIPKcEEEC2ERKS6_b:
  121|  34.0M|      : std::pair<BidiIterator, BidiIterator>(that), 
  122|  34.0M|        matched(that.matched) 
  123|  34.0M|   {
  124|       |#ifdef BOOST_REGEX_MATCH_EXTRA
  125|       |      if(that.m_captures)
  126|       |         if(deep_copy)
  127|       |            m_captures.reset(new capture_sequence_type(*(that.m_captures)));
  128|       |#endif
  129|  34.0M|   }
_ZN5boost9sub_matchINSt3__111__wrap_iterIPKcEEEC2Ev:
   35|  5.83M|   sub_match() : std::pair<BidiIterator, BidiIterator>(), matched(false) {}
_ZN5boost9sub_matchINSt3__111__wrap_iterIPKcEEEaSERKS6_:
  131|  29.7M|   {
  132|  29.7M|      this->first = that.first;
  133|  29.7M|      this->second = that.second;
  134|  29.7M|      matched = that.matched;
  135|       |#ifdef BOOST_REGEX_MATCH_EXTRA
  136|       |      if(that.m_captures)
  137|       |         get_captures() = *(that.m_captures);
  138|       |#endif
  139|  29.7M|      return *this;
  140|  29.7M|   }
_ZN5boost9sub_matchINSt3__111__wrap_iterIPKcEEEC2ES5_:
   36|  13.2M|   sub_match(BidiIterator i) : std::pair<BidiIterator, BidiIterator>(i, i), matched(false) {}
_ZNK5boost9sub_matchINSt3__111__wrap_iterIPKcEEE3strEv:
   48|  3.21M|   {
   49|  3.21M|      std::basic_string<value_type> result;
   50|  3.21M|      if(matched)
  ------------------
  |  Branch (50:10): [True: 3.21M, False: 0]
  ------------------
   51|  3.21M|      {
   52|  3.21M|         std::size_t len = std::distance((BidiIterator)this->first, (BidiIterator)this->second);
   53|  3.21M|         result.reserve(len);
   54|  3.21M|         BidiIterator i = this->first;
   55|  72.0M|         while(i != this->second)
  ------------------
  |  Branch (55:16): [True: 68.7M, False: 3.21M]
  ------------------
   56|  68.7M|         {
   57|  68.7M|            result.append(1, *i);
   58|  68.7M|            ++i;
   59|  68.7M|         }
   60|  3.21M|      }
   61|  3.21M|      return result;
   62|  3.21M|   }

_ZN5boost6detail12shared_countC2Ev:
  123|   445k|    constexpr shared_count() noexcept: pi_(0)
  124|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
  125|       |        , id_(shared_count_id)
  126|       |#endif
  127|   445k|    {
  128|   445k|    }
_ZN5boost6detail12shared_countD2Ev:
  392|   465k|    {
  393|   465k|        if( pi_ != 0 ) pi_->release();
  ------------------
  |  Branch (393:13): [True: 14.3k, False: 450k]
  ------------------
  394|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
  395|       |        id_ = 0;
  396|       |#endif
  397|   465k|    }
_ZN5boost6detail12shared_count4swapERS1_:
  433|  4.79k|    {
  434|  4.79k|        sp_counted_base * tmp = r.pi_;
  435|  4.79k|        r.pi_ = pi_;
  436|  4.79k|        pi_ = tmp;
  437|  4.79k|    }
_ZN5boost6detail12shared_countC2IPNS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES6_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSC_NSt3__112basic_stringIcNSE_11char_traitsIcEENSE_9allocatorIcEEEERSK_MS8_SK_EEEENS0_13sp_ms_deleterISO_EEEET_NS0_14sp_inplace_tagIT0_EE:
  197|  4.79k|    template< class P, class D > shared_count( P p, sp_inplace_tag<D> ): pi_( 0 )
  198|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
  199|       |        , id_(shared_count_id)
  200|       |#endif
  201|  4.79k|    {
  202|  4.79k|#ifndef BOOST_NO_EXCEPTIONS
  203|       |
  204|  4.79k|        try
  205|  4.79k|        {
  206|  4.79k|            pi_ = new sp_counted_impl_pd< P, D >( p );
  207|  4.79k|        }
  208|  4.79k|        catch( ... )
  209|  4.79k|        {
  210|      0|            D::operator_fn( p ); // delete p
  211|      0|            throw;
  212|      0|        }
  213|       |
  214|       |#else
  215|       |
  216|       |        pi_ = new sp_counted_impl_pd< P, D >( p );
  217|       |
  218|       |        if( pi_ == 0 )
  219|       |        {
  220|       |            D::operator_fn( p ); // delete p
  221|       |            boost::throw_exception( std::bad_alloc() );
  222|       |        }
  223|       |
  224|       |#endif // #ifndef BOOST_NO_EXCEPTIONS
  225|  4.79k|    }
_ZNK5boost6detail12shared_count19get_untyped_deleterEv:
  479|  4.79k|    {
  480|  4.79k|        return pi_? pi_->get_untyped_deleter(): 0;
  ------------------
  |  Branch (480:16): [True: 4.79k, False: 0]
  ------------------
  481|  4.79k|    }
_ZN5boost6detail12shared_countC2ERKS1_:
  399|  9.58k|    shared_count(shared_count const & r) noexcept: pi_(r.pi_)
  400|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
  401|       |        , id_(shared_count_id)
  402|       |#endif
  403|  9.58k|    {
  404|  9.58k|        if( pi_ != 0 ) pi_->add_ref_copy();
  ------------------
  |  Branch (404:13): [True: 9.58k, False: 0]
  ------------------
  405|  9.58k|    }
_ZN5boost6detail12shared_countC2EOS1_:
  407|  4.79k|    shared_count(shared_count && r) noexcept: pi_(r.pi_)
  408|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
  409|       |        , id_(shared_count_id)
  410|       |#endif
  411|  4.79k|    {
  412|  4.79k|        r.pi_ = 0;
  413|  4.79k|    }

_ZN5boost6detail15sp_counted_base7releaseEv:
  117|  14.3k|    {
  118|  14.3k|        if( atomic_decrement( &use_count_ ) == 1 )
  ------------------
  |  Branch (118:13): [True: 4.79k, False: 9.58k]
  ------------------
  119|  4.79k|        {
  120|  4.79k|            dispose();
  121|  4.79k|            weak_release();
  122|  4.79k|        }
  123|  14.3k|    }
_ZN5boost6detail16atomic_decrementEPj:
   39|  19.1k|{
   40|  19.1k|    return __atomic_fetch_sub( pw, 1, __ATOMIC_ACQ_REL );
   41|  19.1k|}
_ZN5boost6detail15sp_counted_base12weak_releaseEv:
  131|  4.79k|    {
  132|  4.79k|        if( atomic_decrement( &weak_count_ ) == 1 )
  ------------------
  |  Branch (132:13): [True: 4.79k, False: 0]
  ------------------
  133|  4.79k|        {
  134|  4.79k|            destroy();
  135|  4.79k|        }
  136|  4.79k|    }
_ZN5boost6detail15sp_counted_baseC2Ev:
   82|  4.79k|    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
   83|  4.79k|    {
   84|  4.79k|    }
_ZN5boost6detail15sp_counted_baseD2Ev:
   87|  4.79k|    {
   88|  4.79k|    }
_ZN5boost6detail15sp_counted_base7destroyEv:
   98|  4.79k|    {
   99|  4.79k|        delete this;
  100|  4.79k|    }
_ZN5boost6detail15sp_counted_base12add_ref_copyEv:
  107|  9.58k|    {
  108|  9.58k|        atomic_increment( &use_count_ );
  109|  9.58k|    }
_ZN5boost6detail16atomic_incrementEPj:
   34|  9.58k|{
   35|  9.58k|    __atomic_fetch_add( pw, 1, __ATOMIC_RELAXED );
   36|  9.58k|}

_ZN5boost6detail18sp_counted_impl_pdIPNS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEENS0_13sp_ms_deleterISN_EEEC2ESO_:
  156|  4.79k|    sp_counted_impl_pd( P p ): ptr( p ), del()
  157|  4.79k|    {
  158|  4.79k|    }
_ZN5boost6detail18sp_counted_impl_pdIPNS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEENS0_13sp_ms_deleterISN_EEE7disposeEv:
  161|  4.79k|    {
  162|  4.79k|        del( ptr );
  163|  4.79k|    }
_ZN5boost6detail18sp_counted_impl_pdIPNS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEENS0_13sp_ms_deleterISN_EEE19get_untyped_deleterEv:
  176|  4.79k|    {
  177|  4.79k|        return &reinterpret_cast<char&>( del );
  178|  4.79k|    }

_ZN5boost11make_sharedINS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEJRSM_EEENS1_15sp_if_not_arrayIT_E4typeEDpOT0_:
  223|  4.79k|{
  224|  4.79k|    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
  ------------------
  |  |  182|  4.79k|#define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >()
  ------------------
  225|       |
  226|  4.79k|    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
  227|       |
  228|  4.79k|    void * pv = pd->address();
  229|       |
  230|  4.79k|    ::new( pv ) T( std::forward<Args>( args )... );
  231|  4.79k|    pd->set_initialized();
  232|       |
  233|  4.79k|    T * pt2 = static_cast< T* >( pv );
  234|       |
  235|  4.79k|    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
  236|  4.79k|    return boost::shared_ptr< T >( pt, pt2 );
  237|  4.79k|}
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEEC2Ev:
   69|  4.79k|    sp_ms_deleter() noexcept : initialized_( false )
   70|  4.79k|    {
   71|  4.79k|    }
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEED2Ev:
   83|  4.79k|    {
   84|  4.79k|        destroy();
   85|  4.79k|    }
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEE7destroyEv:
   48|  9.58k|    {
   49|  9.58k|        if( initialized_ )
  ------------------
  |  Branch (49:13): [True: 4.79k, False: 4.79k]
  ------------------
   50|  4.79k|        {
   51|  4.79k|#if defined( __GNUC__ )
   52|       |
   53|       |            // fixes incorrect aliasing warning
   54|  4.79k|            T * p = reinterpret_cast< T* >( storage_.data_ );
   55|  4.79k|            p->~T();
   56|       |
   57|       |#else
   58|       |
   59|       |            reinterpret_cast< T* >( storage_.data_ )->~T();
   60|       |
   61|       |#endif
   62|       |
   63|  4.79k|            initialized_ = false;
   64|  4.79k|        }
   65|  9.58k|    }
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEEclEPSN_:
   88|  4.79k|    {
   89|  4.79k|        destroy();
   90|  4.79k|    }
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEE7addressEv:
   97|  4.79k|    {
   98|  4.79k|        return storage_.data_;
   99|  4.79k|    }
_ZN5boost6detail13sp_ms_deleterINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEE15set_initializedEv:
  102|  4.79k|    {
  103|  4.79k|        initialized_ = true;
  104|  4.79k|    }

_ZN5boost10scoped_ptrINS_11no_propertyEED2Ev:
   85|  4.79k|    {
   86|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
   87|       |        boost::sp_scalar_destructor_hook( px );
   88|       |#endif
   89|  4.79k|        boost::checked_delete( px );
   90|  4.79k|    }
_ZN5boost10scoped_ptrINS_11no_propertyEEC2EPS1_:
   66|  4.79k|    explicit scoped_ptr( T * p = 0 ) noexcept : px( p )
   67|  4.79k|    {
   68|       |#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
   69|       |        boost::sp_scalar_constructor_hook( px );
   70|       |#endif
   71|  4.79k|    }

_ZN5boost10shared_ptrINS_20dynamic_property_mapEEC2Ev:
  264|   441k|    constexpr shared_ptr() noexcept : px( 0 ), pn()
  265|   441k|    {
  266|   441k|    }
_ZN5boost19static_pointer_castINS_20dynamic_property_mapENS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES6_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSC_NSt3__112basic_stringIcNSE_11char_traitsIcEENSE_9allocatorIcEEEERSK_MS8_SK_EEEEEENS_10shared_ptrIT_EEONSP_IT0_EE:
  730|  4.79k|{
  731|  4.79k|    (void) static_cast< T* >( static_cast< U* >( 0 ) );
  732|       |
  733|  4.79k|    typedef typename shared_ptr<T>::element_type E;
  734|       |
  735|  4.79k|    E * p = static_cast< E* >( r.get() );
  736|  4.79k|    return shared_ptr<T>( std::move(r), p );
  737|  4.79k|}
_ZNK5boost10shared_ptrINS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEE3getEv:
  563|  4.79k|    {
  564|  4.79k|        return px;
  565|  4.79k|    }
_ZN5boost10shared_ptrINS_20dynamic_property_mapEEC2INS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES8_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSE_NSt3__112basic_stringIcNSG_11char_traitsIcEENSG_9allocatorIcEEEERSM_MSA_SM_EEEEEEONS0_IT_EEPS1_:
  499|  4.79k|    shared_ptr( shared_ptr<Y> && r, element_type * p ) noexcept : px( p ), pn()
  500|  4.79k|    {
  501|  4.79k|        pn.swap( r.pn );
  502|  4.79k|        r.px = 0;
  503|  4.79k|    }
_ZN5boost10shared_ptrINS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEEC2ISN_NS1_14sp_inplace_tagINS1_13sp_ms_deleterISN_EEEEEEPT_T0_:
  292|  4.79k|    template<class Y, class D> shared_ptr( Y * p, D d ): px( p ), pn( p, static_cast< D&& >( d ) )
  293|  4.79k|    {
  294|  4.79k|        boost::detail::sp_deleter_construct( this, p );
  295|  4.79k|    }
_ZN5boost6detail20sp_deleter_constructINS0_28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEESN_EEvPNS_10shared_ptrIT_EEPT0_:
  224|  4.79k|{
  225|  4.79k|    boost::detail::sp_enable_shared_from_this( ppx, p, p );
  226|  4.79k|}
_ZNK5boost10shared_ptrINS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEE29_internal_get_untyped_deleterEv:
  624|  4.79k|    {
  625|  4.79k|        return pn.get_untyped_deleter();
  626|  4.79k|    }
_ZN5boost6detail26sp_enable_shared_from_thisEz:
  189|  9.58k|{
  190|  9.58k|}
_ZN5boost10shared_ptrINS_6detail28dynamic_property_map_adaptorINS_32vec_adj_list_vertex_property_mapINS_14adjacency_listINS_4vecSES5_NS_9directedSE9DotVertex7DotEdgeNS_11no_propertyENS_5listSEEEPSB_NSt3__112basic_stringIcNSD_11char_traitsIcEENSD_9allocatorIcEEEERSJ_MS7_SJ_EEEEEC2ISN_EERKNS0_IT_EEPSN_:
  347|  4.79k|    shared_ptr( shared_ptr<Y> const & r, element_type * p ) noexcept : px( p ), pn( r.pn )
  348|  4.79k|    {
  349|  4.79k|    }
_ZN5boost10shared_ptrINS_20dynamic_property_mapEEC2EOS2_:
  471|  4.79k|    shared_ptr( shared_ptr && r ) noexcept : px( r.px ), pn( static_cast< boost::detail::shared_count && >( r.pn ) )
  472|  4.79k|    {
  473|  4.79k|        r.px = 0;
  474|  4.79k|    }
_ZN5boost10shared_ptrINS_20dynamic_property_mapEEC2ERKS2_:
  315|  4.79k|    shared_ptr( shared_ptr const & r ) noexcept : px( r.px ), pn( r.pn )
  316|  4.79k|    {
  317|  4.79k|    }
_ZNK5boost10shared_ptrINS_20dynamic_property_mapEEptEv:
  549|  22.4k|    {
  550|  22.4k|        BOOST_ASSERT( px != 0 );
  ------------------
  |  |   66|  22.4k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  551|  22.4k|        return px;
  552|  22.4k|    }
_ZNK5boost10shared_ptrINS_20dynamic_property_mapEE3getEv:
  563|   441k|    {
  564|   441k|        return px;
  565|   441k|    }

_ZN5boost36throw_exception_assert_compatibilityERKSt9exception:
  140|  3.67k|inline void throw_exception_assert_compatibility( std::exception const & ) {}
_ZN5boost15throw_exceptionINS_11regex_errorEEEvRKT_:
  163|     12|{
  164|     12|    throw_exception_assert_compatibility( e );
  165|     12|    throw wrapexcept<E>( e );
  166|     12|}
_ZN5boost10wrapexceptINS_11regex_errorEEC2ERKS1_:
   97|     12|    explicit wrapexcept( E const & e ): E( e )
   98|     12|    {
   99|     12|        copy_from( &e );
  100|     12|    }
_ZN5boost10wrapexceptINS_11regex_errorEE9copy_fromEPKv:
   87|     12|    {
   88|     12|    }
_ZN5boost15throw_exceptionINS_19bad_graphviz_syntaxEEEvRKT_:
  163|  3.65k|{
  164|  3.65k|    throw_exception_assert_compatibility( e );
  165|  3.65k|    throw wrapexcept<E>( e );
  166|  3.65k|}
_ZN5boost10wrapexceptINS_19bad_graphviz_syntaxEEC2ERKS1_:
   97|  3.65k|    explicit wrapexcept( E const & e ): E( e )
   98|  3.65k|    {
   99|  3.65k|        copy_from( &e );
  100|  3.65k|    }
_ZN5boost10wrapexceptINS_19bad_graphviz_syntaxEE9copy_fromEPKv:
   87|  3.65k|    {
   88|  3.65k|    }
_ZN5boost15throw_exceptionINS_22undirected_graph_errorEEEvRKT_:
  163|      1|{
  164|      1|    throw_exception_assert_compatibility( e );
  165|      1|    throw wrapexcept<E>( e );
  166|      1|}
_ZN5boost10wrapexceptINS_22undirected_graph_errorEEC2ERKS1_:
   97|      1|    explicit wrapexcept( E const & e ): E( e )
   98|      1|    {
   99|      1|        copy_from( &e );
  100|      1|    }
_ZN5boost10wrapexceptINS_22undirected_graph_errorEE9copy_fromEPKv:
   87|      1|    {
   88|      1|    }

_ZN5boost6tuples3tieINSt3__111__wrap_iterIPNS_6detail20stored_edge_propertyIm7DotEdgeEEEEbEENS0_6detail10tie_mapperIT_T0_vvvvvvvvE4typeERSC_RSD_:
  882|  5.43M|tie(T0& t0, T1& t1) {
  883|  5.43M|  typedef typename detail::tie_mapper<T0, T1>::type t;
  884|  5.43M|  return t(t0, t1);
  885|  5.43M|}
_ZN5boost6tuples5tupleIRNSt3__111__wrap_iterIPNS_6detail20stored_edge_propertyIm7DotEdgeEEEERbNS0_9null_typeESC_SC_SC_SC_SC_SC_SC_EC2ESA_SB_:
  499|  5.43M|    : inherited(t0, t1, detail::cnull(), detail::cnull(),
  500|  5.43M|                detail::cnull(), detail::cnull(), detail::cnull(),
  501|  5.43M|                detail::cnull(), detail::cnull(), detail::cnull()) {}
_ZN5boost6tuples6detail5cnullEv:
   59|  48.9M|  inline const null_type cnull() { return null_type(); }
_ZN5boost6tuples4consIRNSt3__111__wrap_iterIPNS_6detail20stored_edge_propertyIm7DotEdgeEEEENS1_IRbNS0_9null_typeEEEEC2IS9_bKSC_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_:
  302|  5.43M|    : head (t1),
  303|  5.43M|      tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
  304|  5.43M|      {}
_ZN5boost6tuples4consIRbNS0_9null_typeEEC2IbEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_:
  386|  5.43M|  : head (t1) {}
_ZN5boost6tuples5tupleIRNSt3__111__wrap_iterIPNS_6detail20stored_edge_propertyIm7DotEdgeEEEERbNS0_9null_typeESC_SC_SC_SC_SC_SC_SC_EaSIS9_bEERSD_RKNS2_4pairIT_T0_EE:
  590|  5.43M|  tuple& operator=(const std::pair<U1, U2>& k) {
  591|  5.43M|    BOOST_STATIC_ASSERT(length<tuple>::value == 2);// check_length = 2
  ------------------
  |  |   71|  5.43M|#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
  ------------------
  592|  5.43M|    this->head = k.first;
  593|  5.43M|    this->tail.head = k.second;
  594|  5.43M|    return *this;
  595|  5.43M|  }

_ZN5boost9typeindex7type_idIKmEENS0_14stl_type_indexEv:
  211|  11.0k|inline type_index type_id() noexcept {
  212|  11.0k|    return type_index::type_id<T>();
  213|  11.0k|}
_ZN5boost9typeindex7type_idINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS0_14stl_type_indexEv:
  211|  33.0k|inline type_index type_id() noexcept {
  212|  33.0k|    return type_index::type_id<T>();
  213|  33.0k|}
_ZN5boost9typeindex7type_idIKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEENS0_14stl_type_indexEv:
  211|  11.0k|inline type_index type_id() noexcept {
  212|  11.0k|    return type_index::type_id<T>();
  213|  11.0k|}
_ZN5boost9typeindex7type_idImEENS0_14stl_type_indexEv:
  211|  11.0k|inline type_index type_id() noexcept {
  212|  11.0k|    return type_index::type_id<T>();
  213|  11.0k|}

_ZNK5boost9typeindex14stl_type_index5equalERKS1_:
  181|  33.0k|inline bool stl_type_index::equal(const stl_type_index& rhs) const noexcept {
  182|  33.0k|#ifdef BOOST_TYPE_INDEX_CLASSINFO_COMPARE_BY_NAMES
  183|  33.0k|    return raw_name() == rhs.raw_name() || !std::strcmp(raw_name(), rhs.raw_name());
  ------------------
  |  Branch (183:12): [True: 33.0k, False: 0]
  |  Branch (183:44): [True: 0, False: 0]
  ------------------
  184|       |#else
  185|       |    return !!(*data_ == *rhs.data_);
  186|       |#endif
  187|  33.0k|}
_ZNK5boost9typeindex14stl_type_index8raw_nameEv:
  101|  66.1k|inline const char* stl_type_index::raw_name() const noexcept {
  102|       |#ifdef _MSC_VER
  103|       |    return data_->raw_name();
  104|       |#else
  105|  66.1k|    return data_->name();
  106|  66.1k|#endif
  107|  66.1k|}
_ZN5boost9typeindex14stl_type_indexC2ERKSt9type_info:
   73|  99.2k|        : data_(&data)
   74|  99.2k|    {}
_ZNK5boost9typeindex14stl_type_index9type_infoEv:
   96|  33.0k|inline const stl_type_index::type_info_t& stl_type_index::type_info() const noexcept {
   97|  33.0k|    return *data_;
   98|  33.0k|}
_ZN5boost9typeindex14stl_type_index7type_idIKmEES1_v:
  201|  11.0k|inline stl_type_index stl_type_index::type_id() noexcept {
  202|  11.0k|    typedef typename std::remove_reference<T>::type no_ref_t;
  203|  11.0k|    typedef typename std::remove_cv<no_ref_t>::type no_cvr_t;
  204|  11.0k|    return typeid(no_cvr_t);
  205|  11.0k|}
_ZN5boost9typeindex14stl_type_index7type_idINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEES1_v:
  201|  33.0k|inline stl_type_index stl_type_index::type_id() noexcept {
  202|  33.0k|    typedef typename std::remove_reference<T>::type no_ref_t;
  203|  33.0k|    typedef typename std::remove_cv<no_ref_t>::type no_cvr_t;
  204|  33.0k|    return typeid(no_cvr_t);
  205|  33.0k|}
_ZN5boost9typeindex14stl_type_index7type_idIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEES1_v:
  201|  11.0k|inline stl_type_index stl_type_index::type_id() noexcept {
  202|  11.0k|    typedef typename std::remove_reference<T>::type no_ref_t;
  203|  11.0k|    typedef typename std::remove_cv<no_ref_t>::type no_cvr_t;
  204|  11.0k|    return typeid(no_cvr_t);
  205|  11.0k|}
_ZN5boost9typeindex14stl_type_index7type_idImEES1_v:
  201|  11.0k|inline stl_type_index stl_type_index::type_id() noexcept {
  202|  11.0k|    typedef typename std::remove_reference<T>::type no_ref_t;
  203|  11.0k|    typedef typename std::remove_cv<no_ref_t>::type no_cvr_t;
  204|  11.0k|    return typeid(no_cvr_t);
  205|  11.0k|}

_ZN5boost9typeindexeqINS0_14stl_type_indexESt9type_infoEEbRKT0_RKNS0_17type_index_facadeIT_S4_EE:
  181|  33.0k|inline bool operator == (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) noexcept {
  182|  33.0k|    return Derived(lhs) == rhs;
  183|  33.0k|}
_ZN5boost9typeindexeqINS0_14stl_type_indexESt9type_infoEEbRKNS0_17type_index_facadeIT_T0_EES9_:
  148|  33.0k|BOOST_CXX14_CONSTEXPR inline bool operator == (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) noexcept {
  149|  33.0k|    return static_cast<Derived const&>(lhs).equal(static_cast<Derived const&>(rhs));
  150|  33.0k|}

_ZNK5boost17integral_constantIbLb1EEcvRKN4mpl_5bool_ILb1EEEEv:
   81|  27.9M|      {
   82|  27.9M|         static const char data[sizeof(long)] = { 0 };
   83|  27.9M|         static const void* pdata = data;
   84|  27.9M|         return *(reinterpret_cast<const mpl::bool_<val>*>(pdata));
   85|  27.9M|      }

_ZN5boost20read_graphviz_detail9lex_errorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEc:
  177|    744|    {
  178|    744|        if (bad_char == '\0')
  ------------------
  |  Branch (178:13): [True: 126, False: 618]
  ------------------
  179|    126|        {
  180|    126|            return bad_graphviz_syntax(errmsg + " (at end of input)");
  181|    126|        }
  182|    618|        else
  183|    618|        {
  184|    618|            return bad_graphviz_syntax(
  185|    618|                errmsg + " (char is '" + bad_char + "')");
  186|    618|        }
  187|    744|    }
_ZN5boost20read_graphviz_detail11parse_errorERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_5tokenE:
  191|  2.91k|    {
  192|  2.91k|        return bad_graphviz_syntax(errmsg + " (token is \""
  193|  2.91k|            + boost::lexical_cast< std::string >(bad_token) + "\")");
  194|  2.91k|    }
_ZN5boost20read_graphviz_detail26parse_graphviz_from_stringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS0_13parser_resultEb:
 1098|  4.79k|    {
 1099|  4.79k|        parser p(str, result);
 1100|  4.79k|        p.parse_graph(want_directed);
 1101|  4.79k|    }
_ZN5boost20read_graphviz_detail26translate_results_to_graphERKNS0_13parser_resultEPNS_6detail5graph12mutate_graphE:
 1133|  1.12k|    {
 1134|  1.12k|        typedef boost::detail::graph::edge_t edge;
 1135|  1.12k|        for (std::map< node_name, properties >::const_iterator i
 1136|  1.12k|             = r.nodes.begin();
 1137|  12.1k|             i != r.nodes.end(); ++i)
  ------------------
  |  Branch (1137:14): [True: 11.0k, False: 1.12k]
  ------------------
 1138|  11.0k|        {
 1139|       |            // std::cerr << i->first << " " << props_to_string(i->second) <<
 1140|       |            // std::endl;
 1141|  11.0k|            mg->do_add_vertex(i->first);
 1142|  11.0k|            for (properties::const_iterator j = i->second.begin();
 1143|  19.1k|                 j != i->second.end(); ++j)
  ------------------
  |  Branch (1143:18): [True: 8.15k, False: 11.0k]
  ------------------
 1144|  8.15k|            {
 1145|  8.15k|                mg->set_node_property(j->first, i->first, j->second);
 1146|  8.15k|            }
 1147|  11.0k|        }
 1148|  1.12k|        for (std::vector< edge_info >::const_iterator i = r.edges.begin();
 1149|  5.43M|             i != r.edges.end(); ++i)
  ------------------
  |  Branch (1149:14): [True: 5.43M, False: 1.12k]
  ------------------
 1150|  5.43M|        {
 1151|  5.43M|            const edge_info& ei = *i;
 1152|       |            // std::cerr << ei.source << " -> " << ei.target << " " <<
 1153|       |            // props_to_string(ei.props) << std::endl;
 1154|  5.43M|            edge e = edge::new_edge();
 1155|  5.43M|            mg->do_add_edge(e, ei.source.name, ei.target.name);
 1156|  5.43M|            for (properties::const_iterator j = ei.props.begin();
 1157|  5.86M|                 j != ei.props.end(); ++j)
  ------------------
  |  Branch (1157:18): [True: 429k, False: 5.43M]
  ------------------
 1158|   429k|            {
 1159|   429k|                mg->set_edge_property(j->first, e, j->second);
 1160|   429k|            }
 1161|  5.43M|        }
 1162|  1.12k|        std::map< subgraph_name, properties >::const_iterator root_graph_props_i
 1163|  1.12k|            = r.graph_props.find("___root___");
 1164|  1.12k|        BOOST_ASSERT(
  ------------------
  |  |   66|  1.12k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
 1165|  1.12k|            root_graph_props_i != r.graph_props.end()); // Should not happen
 1166|  1.12k|        const properties& root_graph_props = root_graph_props_i->second;
 1167|       |        // std::cerr << "ending graph " << props_to_string(root_graph_props) <<
 1168|       |        // std::endl;
 1169|  1.12k|        for (properties::const_iterator i = root_graph_props.begin();
 1170|  4.45k|             i != root_graph_props.end(); ++i)
  ------------------
  |  Branch (1170:14): [True: 3.33k, False: 1.12k]
  ------------------
 1171|  3.33k|        {
 1172|  3.33k|            mg->set_graph_property(i->first, i->second);
 1173|  3.33k|        }
 1174|  1.12k|        mg->finish_building_graph();
 1175|  1.12k|    }
_ZN5boost6detail5graph17read_graphviz_newERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS1_12mutate_graphE:
 1186|  4.79k|        {
 1187|  4.79k|            read_graphviz_detail::parser_result parsed_file;
 1188|  4.79k|            read_graphviz_detail::parse_graphviz_from_string(
 1189|  4.79k|                str, parsed_file, mg->is_directed());
 1190|  4.79k|            read_graphviz_detail::translate_results_to_graph(parsed_file, mg);
 1191|  4.79k|            return true;
 1192|  4.79k|        }
_ZN5boost20read_graphviz_detail6parserC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERNS0_13parser_resultE:
  543|  4.79k|        : the_tokenizer(gr), lookahead(), r(result), sgcounter(0), sgnesting_level(0)
  544|  4.79k|        {
  545|  4.79k|            current_subgraph_name = "___root___";
  546|  4.79k|            current() = subgraph_info(); // Initialize root graph
  547|  4.79k|            current_graph_props().clear();
  548|  4.79k|            current_members().clear();
  549|  4.79k|        }
_ZN5boost20read_graphviz_detail9tokenizerC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  209|  4.79k|        tokenizer(const std::string& str) : begin(str.begin()), end(str.end())
  210|  4.79k|        {
  211|       |            // std::string end_of_token = "(?=(?:\\W))"; // SEHE: unused?
  212|  4.79k|            std::string whitespace = "(?:\\s+)";
  213|  4.79k|            std::string slash_slash_comment = "(?://.*?$)";
  214|  4.79k|            std::string slash_star_comment = "(?:/\\*.*?\\*/)";
  215|  4.79k|            std::string hash_comment = "(?:^#.*?$)";
  216|  4.79k|            std::string backslash_newline = "(?:[\\\\][\\n])";
  217|  4.79k|            stuff_to_skip = "\\A(?:" + whitespace + "|" + slash_slash_comment
  218|  4.79k|                + "|" + slash_star_comment + "|" + hash_comment + "|"
  219|  4.79k|                + backslash_newline + ")*";
  220|  4.79k|            basic_id_token = "\\A([[:alpha:]_](?:\\w*))";
  221|  4.79k|            punctuation_token = "\\A([][{};=,:+()@]|[-][>-])";
  222|  4.79k|            number_token = "\\A([-]?(?:(?:\\.\\d+)|(?:\\d+(?:\\.\\d*)?)))";
  223|  4.79k|            quoted_string_token = "\\A(\"(?:[^\"\\\\]|(?:[\\\\].))*\")";
  224|  4.79k|            xml_tag_token
  225|  4.79k|                = "\\A<(/?)(?:[^!?'\"]|(?:'[^']*?')|(?:\"[^\"]*?\"))*?(/?)>";
  226|  4.79k|            cdata = "\\A\\Q<![CDATA[\\E.*?\\Q]]>\\E";
  227|  4.79k|        }
_ZN5boost20read_graphviz_detail6parser7currentEv:
  535|  2.79M|        subgraph_info& current() { return subgraphs[current_subgraph_name]; }
_ZN5boost20read_graphviz_detail6parser19current_graph_propsEv:
  537|  8.01k|        {
  538|  8.01k|            return r.graph_props[current_subgraph_name];
  539|  8.01k|        }
_ZN5boost20read_graphviz_detail6parser15current_membersEv:
  540|  2.66M|        subgraph_member_list& current_members() { return current().members; }
_ZN5boost20read_graphviz_detail6parser11parse_graphEb:
  581|  4.79k|        {
  582|  4.79k|            bool is_strict = false;
  583|  4.79k|            bool is_directed = false;
  584|  4.79k|            std::string name;
  585|  4.79k|            if (peek().type == token::kw_strict)
  ------------------
  |  Branch (585:17): [True: 417, False: 4.37k]
  ------------------
  586|    417|            {
  587|    417|                get();
  588|    417|                is_strict = true;
  589|    417|            }
  590|  4.79k|            switch (peek().type)
  591|  4.79k|            {
  592|      1|            case token::kw_graph:
  ------------------
  |  Branch (592:13): [True: 1, False: 4.79k]
  ------------------
  593|      1|                is_directed = false;
  594|      1|                break;
  595|  3.75k|            case token::kw_digraph:
  ------------------
  |  Branch (595:13): [True: 3.75k, False: 1.03k]
  ------------------
  596|  3.75k|                is_directed = true;
  597|  3.75k|                break;
  598|    601|            default:
  ------------------
  |  Branch (598:13): [True: 601, False: 4.19k]
  ------------------
  599|    601|                error("Wanted \"graph\" or \"digraph\"");
  600|  4.79k|            }
  601|  3.76k|            r.graph_is_directed = is_directed; // Used to check edges
  602|  3.76k|            r.graph_is_strict = is_strict;
  603|  3.76k|            if (want_directed != r.graph_is_directed)
  ------------------
  |  Branch (603:17): [True: 1, False: 3.75k]
  ------------------
  604|      1|            {
  605|      1|                if (want_directed)
  ------------------
  |  Branch (605:21): [True: 1, False: 0]
  ------------------
  606|      1|                {
  607|      1|                    boost::throw_exception(boost::undirected_graph_error());
  608|      1|                }
  609|      0|                else
  610|      0|                {
  611|      0|                    boost::throw_exception(boost::directed_graph_error());
  612|      0|                }
  613|      1|            }
  614|  3.75k|            get();
  615|  3.75k|            switch (peek().type)
  616|  3.75k|            {
  617|     38|            case token::identifier:
  ------------------
  |  Branch (617:13): [True: 38, False: 3.72k]
  ------------------
  618|     38|                name = peek().normalized_value;
  619|     38|                get();
  620|     38|                break;
  621|  3.71k|            case token::left_brace:
  ------------------
  |  Branch (621:13): [True: 3.71k, False: 44]
  ------------------
  622|  3.71k|                break;
  623|      3|            default:
  ------------------
  |  Branch (623:13): [True: 3, False: 3.75k]
  ------------------
  624|      3|                error("Wanted a graph name or left brace");
  625|  3.75k|            }
  626|  3.75k|            if (peek().type == token::left_brace)
  ------------------
  |  Branch (626:17): [True: 3.74k, False: 10]
  ------------------
  627|  3.74k|                get();
  628|     10|            else
  629|     10|                error("Wanted a left brace to start the graph");
  630|  3.75k|            parse_stmt_list();
  631|  3.75k|            if (peek().type == token::right_brace)
  ------------------
  |  Branch (631:17): [True: 1.18k, False: 2.57k]
  ------------------
  632|  1.18k|                get();
  633|  2.57k|            else
  634|  2.57k|                error("Wanted a right brace to end the graph");
  635|  3.75k|            if (peek().type == token::eof)
  ------------------
  |  Branch (635:17): [True: 1.12k, False: 2.63k]
  ------------------
  636|  1.12k|            {
  637|  1.12k|            }
  638|  2.63k|            else
  639|  2.63k|                error("Wanted end of file");
  640|  3.75k|        }
_ZN5boost20read_graphviz_detail6parser4peekEv:
  567|  21.6M|        {
  568|  21.6M|            if (lookahead.empty())
  ------------------
  |  Branch (568:17): [True: 2.91M, False: 18.7M]
  ------------------
  569|  2.91M|            {
  570|  2.91M|                lookahead.push_back(the_tokenizer.get_token());
  571|  2.91M|            }
  572|  21.6M|            return lookahead.front();
  573|  21.6M|        }
_ZN5boost20read_graphviz_detail9tokenizer9get_tokenEv:
  440|  2.91M|        { // Handle string concatenation
  441|  2.91M|            token t = get_token_raw();
  442|  2.91M|            if (t.type != token::quoted_string)
  ------------------
  |  Branch (442:17): [True: 727k, False: 2.18M]
  ------------------
  443|   727k|                return t;
  444|  2.18M|            std::string str = t.normalized_value;
  445|  2.19M|            while (peek_token_raw().type == token::plus)
  ------------------
  |  Branch (445:20): [True: 763, False: 2.18M]
  ------------------
  446|    763|            {
  447|    763|                get_token_raw();
  448|    763|                token t2 = get_token_raw();
  449|    763|                if (t2.type != token::quoted_string)
  ------------------
  |  Branch (449:21): [True: 23, False: 740]
  ------------------
  450|     23|                {
  451|     23|                    throw_lex_error(
  452|     23|                        "Must have quoted string after string concatenation");
  453|     23|                }
  454|    763|                str += t2.normalized_value;
  455|    763|            }
  456|  2.18M|            return token(
  457|  2.18M|                token::identifier, str); // Note that quoted_string does not get
  458|       |                                         // passed to the parser
  459|  2.91M|        }
_ZN5boost20read_graphviz_detail9tokenizer13get_token_rawEv:
  246|  5.10M|        {
  247|  5.10M|            if (!lookahead.empty())
  ------------------
  |  Branch (247:17): [True: 2.18M, False: 2.91M]
  ------------------
  248|  2.18M|            {
  249|  2.18M|                token t = lookahead.front();
  250|  2.18M|                lookahead.erase(lookahead.begin());
  251|  2.18M|                return t;
  252|  2.18M|            }
  253|  2.91M|            skip();
  254|  2.91M|            if (begin == end)
  ------------------
  |  Branch (254:17): [True: 3.50k, False: 2.91M]
  ------------------
  255|  3.50k|                return token(token::eof, "");
  256|       |            // Look for keywords first
  257|  2.91M|            bool found;
  258|  2.91M|            boost::match_results< std::string::const_iterator > results;
  259|  2.91M|            found = boost::regex_search(begin, end, results, basic_id_token);
  260|  2.91M|            if (found)
  ------------------
  |  Branch (260:17): [True: 301k, False: 2.61M]
  ------------------
  261|   301k|            {
  262|   301k|                std::string str = results[1].str();
  263|   301k|                std::string str_lower = boost::algorithm::to_lower_copy(str);
  264|   301k|                begin = results.suffix().first;
  265|   301k|                if (str_lower == "strict")
  ------------------
  |  Branch (265:21): [True: 423, False: 300k]
  ------------------
  266|    423|                {
  267|    423|                    return token(token::kw_strict, str);
  268|    423|                }
  269|   300k|                else if (str_lower == "graph")
  ------------------
  |  Branch (269:26): [True: 259, False: 300k]
  ------------------
  270|    259|                {
  271|    259|                    return token(token::kw_graph, str);
  272|    259|                }
  273|   300k|                else if (str_lower == "digraph")
  ------------------
  |  Branch (273:26): [True: 3.76k, False: 296k]
  ------------------
  274|  3.76k|                {
  275|  3.76k|                    return token(token::kw_digraph, str);
  276|  3.76k|                }
  277|   296k|                else if (str_lower == "node")
  ------------------
  |  Branch (277:26): [True: 370, False: 296k]
  ------------------
  278|    370|                {
  279|    370|                    return token(token::kw_node, str);
  280|    370|                }
  281|   296k|                else if (str_lower == "edge")
  ------------------
  |  Branch (281:26): [True: 227, False: 296k]
  ------------------
  282|    227|                {
  283|    227|                    return token(token::kw_edge, str);
  284|    227|                }
  285|   296k|                else if (str_lower == "subgraph")
  ------------------
  |  Branch (285:26): [True: 4.55k, False: 291k]
  ------------------
  286|  4.55k|                {
  287|  4.55k|                    return token(token::kw_subgraph, str);
  288|  4.55k|                }
  289|   291k|                else
  290|   291k|                {
  291|   291k|                    return token(token::identifier, str);
  292|   291k|                }
  293|   301k|            }
  294|  2.61M|            found = boost::regex_search(begin, end, results, punctuation_token);
  295|  2.61M|            if (found)
  ------------------
  |  Branch (295:17): [True: 231k, False: 2.38M]
  ------------------
  296|   231k|            {
  297|   231k|                std::string str = results[1].str();
  298|   231k|                begin = results.suffix().first;
  299|   231k|                switch (str[0])
  300|   231k|                {
  301|  4.57k|                case '[':
  ------------------
  |  Branch (301:17): [True: 4.57k, False: 226k]
  ------------------
  302|  4.57k|                    return token(token::left_bracket, str);
  303|  4.40k|                case ']':
  ------------------
  |  Branch (303:17): [True: 4.40k, False: 226k]
  ------------------
  304|  4.40k|                    return token(token::right_bracket, str);
  305|  94.7k|                case '{':
  ------------------
  |  Branch (305:17): [True: 94.7k, False: 136k]
  ------------------
  306|  94.7k|                    return token(token::left_brace, str);
  307|  72.5k|                case '}':
  ------------------
  |  Branch (307:17): [True: 72.5k, False: 158k]
  ------------------
  308|  72.5k|                    return token(token::right_brace, str);
  309|    805|                case ';':
  ------------------
  |  Branch (309:17): [True: 805, False: 230k]
  ------------------
  310|    805|                    return token(token::semicolon, str);
  311|  3.60k|                case '=':
  ------------------
  |  Branch (311:17): [True: 3.60k, False: 227k]
  ------------------
  312|  3.60k|                    return token(token::equal, str);
  313|  1.07k|                case ',':
  ------------------
  |  Branch (313:17): [True: 1.07k, False: 230k]
  ------------------
  314|  1.07k|                    return token(token::comma, str);
  315|  4.18k|                case ':':
  ------------------
  |  Branch (315:17): [True: 4.18k, False: 227k]
  ------------------
  316|  4.18k|                    return token(token::colon, str);
  317|    773|                case '+':
  ------------------
  |  Branch (317:17): [True: 773, False: 230k]
  ------------------
  318|    773|                    return token(token::plus, str);
  319|    860|                case '(':
  ------------------
  |  Branch (319:17): [True: 860, False: 230k]
  ------------------
  320|    860|                    return token(token::left_paren, str);
  321|    798|                case ')':
  ------------------
  |  Branch (321:17): [True: 798, False: 230k]
  ------------------
  322|    798|                    return token(token::right_paren, str);
  323|  1.82k|                case '@':
  ------------------
  |  Branch (323:17): [True: 1.82k, False: 229k]
  ------------------
  324|  1.82k|                    return token(token::at, str);
  325|  41.1k|                case '-':
  ------------------
  |  Branch (325:17): [True: 41.1k, False: 190k]
  ------------------
  326|  41.1k|                {
  327|  41.1k|                    switch (str[1])
  328|  41.1k|                    {
  329|      7|                    case '-':
  ------------------
  |  Branch (329:21): [True: 7, False: 41.1k]
  ------------------
  330|      7|                        return token(token::dash_dash, str);
  331|  41.1k|                    case '>':
  ------------------
  |  Branch (331:21): [True: 41.1k, False: 7]
  ------------------
  332|  41.1k|                        return token(token::dash_greater, str);
  333|      0|                    default:
  ------------------
  |  Branch (333:21): [True: 0, False: 41.1k]
  ------------------
  334|      0|                        BOOST_ASSERT(!"Definition of punctuation_token does "
  ------------------
  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  335|  41.1k|                                      "not match switch statement");
  336|  41.1k|                    }
  337|       |                    // Prevent static analyzers complaining about fallthrough:
  338|      0|                    break;
  339|  41.1k|                }
  340|      0|                default:
  ------------------
  |  Branch (340:17): [True: 0, False: 231k]
  ------------------
  341|      0|                    BOOST_ASSERT(!"Definition of punctuation_token does not "
  ------------------
  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  342|   231k|                                  "match switch statement");
  343|   231k|                }
  344|   231k|            }
  345|  2.38M|            found = boost::regex_search(begin, end, results, number_token);
  346|  2.38M|            if (found)
  ------------------
  |  Branch (346:17): [True: 183k, False: 2.19M]
  ------------------
  347|   183k|            {
  348|   183k|                std::string str = results[1].str();
  349|   183k|                begin = results.suffix().first;
  350|   183k|                return token(token::identifier, str);
  351|   183k|            }
  352|  2.19M|            found
  353|  2.19M|                = boost::regex_search(begin, end, results, quoted_string_token);
  354|  2.19M|            if (found)
  ------------------
  |  Branch (354:17): [True: 2.18M, False: 10.2k]
  ------------------
  355|  2.18M|            {
  356|  2.18M|                std::string str = results[1].str();
  357|  2.18M|                begin = results.suffix().first;
  358|       |                // Remove the beginning and ending quotes
  359|  2.18M|                BOOST_ASSERT(str.size() >= 2);
  ------------------
  |  |   66|  2.18M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  360|  2.18M|                str.erase(str.begin());
  361|  2.18M|                str.erase(str.end() - 1);
  362|       |                // Unescape quotes in the middle, but nothing else (see format
  363|       |                // spec)
  364|  37.8M|                for (size_t i = 0; i + 1 < str.size() /* May change */; ++i)
  ------------------
  |  Branch (364:36): [True: 35.7M, False: 2.18M]
  ------------------
  365|  35.7M|                {
  366|  35.7M|                    if (str[i] == '\\' && str[i + 1] == '"')
  ------------------
  |  Branch (366:25): [True: 11.0k, False: 35.6M]
  |  Branch (366:43): [True: 493, False: 10.5k]
  ------------------
  367|    493|                    {
  368|    493|                        str.erase(str.begin() + i);
  369|       |                        // Don't need to adjust i
  370|    493|                    }
  371|  35.7M|                    else if (str[i] == '\\' && str[i + 1] == '\n')
  ------------------
  |  Branch (371:30): [True: 10.5k, False: 35.6M]
  |  Branch (371:48): [True: 6.91k, False: 3.66k]
  ------------------
  372|  6.91k|                    {
  373|  6.91k|                        str.erase(str.begin() + i);
  374|  6.91k|                        str.erase(str.begin() + i);
  375|  6.91k|                        --i; // Invert ++ that will be applied
  376|  6.91k|                    }
  377|  35.7M|                }
  378|  2.18M|                return token(token::quoted_string, str);
  379|  2.18M|            }
  380|  10.2k|            if (*begin == '<')
  ------------------
  |  Branch (380:17): [True: 9.81k, False: 407]
  ------------------
  381|  9.81k|            {
  382|  9.81k|                std::string::const_iterator saved_begin = begin;
  383|  9.81k|                int counter = 0;
  384|  9.81k|                do
  385|  6.44M|                {
  386|  6.44M|                    if (begin == end)
  ------------------
  |  Branch (386:25): [True: 59, False: 6.44M]
  ------------------
  387|     59|                        throw_lex_error("Unclosed HTML string");
  388|  6.44M|                    if (*begin != '<')
  ------------------
  |  Branch (388:25): [True: 6.25M, False: 191k]
  ------------------
  389|  6.25M|                    {
  390|  6.25M|                        ++begin;
  391|  6.25M|                        continue;
  392|  6.25M|                    }
  393|   191k|                    found = boost::regex_search(
  394|   191k|                        begin, end, results, xml_tag_token);
  395|   191k|                    if (found)
  ------------------
  |  Branch (395:25): [True: 190k, False: 710]
  ------------------
  396|   190k|                    {
  397|   190k|                        begin = results.suffix().first;
  398|   190k|                        if (results[1].str() == "/")
  ------------------
  |  Branch (398:29): [True: 67.6k, False: 122k]
  ------------------
  399|  67.6k|                        { // Close tag
  400|  67.6k|                            --counter;
  401|  67.6k|                        }
  402|   122k|                        else if (results[2].str() == "/")
  ------------------
  |  Branch (402:34): [True: 655, False: 122k]
  ------------------
  403|    655|                        { // Empty tag
  404|    655|                        }
  405|   122k|                        else
  406|   122k|                        { // Open tag
  407|   122k|                            ++counter;
  408|   122k|                        }
  409|   190k|                        continue;
  410|   190k|                    }
  411|    710|                    found = boost::regex_search(begin, end, results, cdata);
  412|    710|                    if (found)
  ------------------
  |  Branch (412:25): [True: 384, False: 326]
  ------------------
  413|    384|                    {
  414|    384|                        begin = results.suffix().first;
  415|    384|                        continue;
  416|    384|                    }
  417|    326|                    throw_lex_error("Invalid contents in HTML string");
  418|  6.44M|                } while (counter > 0);
  ------------------
  |  Branch (418:26): [True: 6.43M, False: 9.81k]
  ------------------
  419|      0|                return token(
  420|  9.81k|                    token::identifier, std::string(saved_begin, begin));
  421|  9.81k|            }
  422|    407|            else
  423|    407|            {
  424|    407|                throw_lex_error("Invalid character");
  425|    407|                return token();
  426|    407|            }
  427|  10.2k|        }
_ZN5boost20read_graphviz_detail9tokenizer4skipEv:
  230|  2.91M|        {
  231|  2.91M|            boost::match_results< std::string::const_iterator > results;
  232|       |#ifndef NDEBUG
  233|       |            bool found =
  234|       |#endif
  235|  2.91M|                boost::regex_search(begin, end, results, stuff_to_skip);
  236|       |#ifndef NDEBUG
  237|       |            BOOST_ASSERT(found);
  238|       |#endif
  239|  2.91M|            boost::sub_match< std::string::const_iterator > sm1
  240|  2.91M|                = results.suffix();
  241|  2.91M|            BOOST_ASSERT(sm1.second == end);
  ------------------
  |  |   66|  2.91M|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  242|  2.91M|            begin = sm1.first;
  243|  2.91M|        }
_ZN5boost20read_graphviz_detail9tokenizer14peek_token_rawEv:
  430|  2.18M|        {
  431|  2.18M|            if (lookahead.empty())
  ------------------
  |  Branch (431:17): [True: 2.18M, False: 0]
  ------------------
  432|  2.18M|            {
  433|  2.18M|                token t = get_token_raw();
  434|  2.18M|                lookahead.push_back(t);
  435|  2.18M|            }
  436|  2.18M|            return lookahead.front();
  437|  2.18M|        }
_ZN5boost20read_graphviz_detail9tokenizer15throw_lex_errorERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  462|    744|        {
  463|    744|            boost::throw_exception(
  464|    744|                lex_error(errmsg, (begin == end ? '\0' : *begin)));
  ------------------
  |  Branch (464:36): [True: 80, False: 664]
  ------------------
  465|    744|        }
_ZN5boost20read_graphviz_detail5tokenC2ENS1_10token_typeERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
   90|  5.10M|        : type(type), normalized_value(normalized_value)
   91|  5.10M|        {
   92|  5.10M|        }
_ZN5boost20read_graphviz_detail6parser3getEv:
  552|  2.91M|        {
  553|  2.91M|            if (lookahead.empty())
  ------------------
  |  Branch (553:17): [True: 0, False: 2.91M]
  ------------------
  554|      0|            {
  555|      0|                token t = the_tokenizer.get_token();
  556|      0|                return t;
  557|      0|            }
  558|  2.91M|            else
  559|  2.91M|            {
  560|  2.91M|                token t = lookahead.front();
  561|  2.91M|                lookahead.erase(lookahead.begin());
  562|  2.91M|                return t;
  563|  2.91M|            }
  564|  2.91M|        }
_ZN5boost20read_graphviz_detail6parser5errorERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  576|  2.91k|        {
  577|  2.91k|            boost::throw_exception(parse_error(str, peek()));
  578|  2.91k|        }
_ZN5boost20read_graphviz_detail6parser15parse_stmt_listEv:
  643|  94.7k|        {
  644|  2.78M|            while (true)
  ------------------
  |  Branch (644:20): [Folded - Ignored]
  ------------------
  645|  2.76M|            {
  646|  2.76M|                if (peek().type == token::right_brace)
  ------------------
  |  Branch (646:21): [True: 72.5k, False: 2.68M]
  ------------------
  647|  72.5k|                    return;
  648|  2.68M|                parse_stmt();
  649|  2.68M|                if (peek().type == token::semicolon)
  ------------------
  |  Branch (649:21): [True: 613, False: 2.68M]
  ------------------
  650|    613|                    get();
  651|  2.68M|            }
  652|  94.7k|        }
_ZN5boost20read_graphviz_detail6parser10parse_stmtEv:
  655|  2.68M|        {
  656|  2.68M|            switch (peek().type)
  657|  2.68M|            {
  658|    365|            case token::kw_node:
  ------------------
  |  Branch (658:13): [True: 365, False: 2.68M]
  ------------------
  659|    591|            case token::kw_edge:
  ------------------
  |  Branch (659:13): [True: 226, False: 2.68M]
  ------------------
  660|    842|            case token::kw_graph:
  ------------------
  |  Branch (660:13): [True: 251, False: 2.68M]
  ------------------
  661|    842|                parse_attr_stmt();
  662|    842|                break;
  663|  3.89k|            case token::kw_subgraph:
  ------------------
  |  Branch (663:13): [True: 3.89k, False: 2.68M]
  ------------------
  664|  77.6k|            case token::left_brace:
  ------------------
  |  Branch (664:13): [True: 73.7k, False: 2.61M]
  ------------------
  665|  2.68M|            case token::identifier:
  ------------------
  |  Branch (665:13): [True: 2.60M, False: 80.3k]
  ------------------
  666|  2.68M|            {
  667|  2.68M|                token id = get();
  668|  2.68M|                if (id.type == token::identifier && peek().type == token::equal)
  ------------------
  |  Branch (668:21): [True: 2.60M, False: 77.6k]
  |  Branch (668:21): [True: 2.98k, False: 2.68M]
  |  Branch (668:53): [True: 2.98k, False: 2.60M]
  ------------------
  669|  2.98k|                { // Graph property
  670|  2.98k|                    get();
  671|  2.98k|                    if (peek().type != token::identifier)
  ------------------
  |  Branch (671:25): [True: 11, False: 2.97k]
  ------------------
  672|     11|                        error("Wanted identifier as right side of =");
  673|  2.98k|                    token id2 = get();
  674|  2.98k|                    current_graph_props()[id.normalized_value]
  675|  2.98k|                        = id2.normalized_value;
  676|  2.98k|                }
  677|  2.68M|                else
  678|  2.68M|                {
  679|  2.68M|                    edge_endpoint ep = parse_endpoint_rest(id);
  680|  2.68M|                    if (peek().type == token::dash_dash
  ------------------
  |  Branch (680:25): [True: 17.4k, False: 2.66M]
  |  Branch (680:25): [True: 8.26k, False: 2.67M]
  ------------------
  681|  2.68M|                        || peek().type == token::dash_greater)
  ------------------
  |  Branch (681:28): [True: 8.26k, False: 2.65M]
  ------------------
  682|  8.26k|                    { // Edge
  683|  8.26k|                        parse_edge_stmt(ep);
  684|  8.26k|                    }
  685|  2.67M|                    else
  686|  2.67M|                    {
  687|  2.67M|                        if (!ep.is_subgraph)
  ------------------
  |  Branch (687:29): [True: 2.60M, False: 75.1k]
  ------------------
  688|  2.60M|                        { // Only nodes can have attribute lists
  689|       |                            // This node already exists because of its first
  690|       |                            // mention (properties set to defaults by
  691|       |                            // parse_node_and_port, called by
  692|       |                            // parse_endpoint_rest)
  693|  2.60M|                            properties this_node_props;
  694|  2.60M|                            if (peek().type == token::left_bracket)
  ------------------
  |  Branch (694:33): [True: 2.46k, False: 2.59M]
  ------------------
  695|  2.46k|                            {
  696|  2.46k|                                parse_attr_list(this_node_props);
  697|  2.46k|                            }
  698|  2.60M|                            for (properties::const_iterator i
  699|  2.60M|                                 = this_node_props.begin();
  700|  2.60M|                                 i != this_node_props.end(); ++i)
  ------------------
  |  Branch (700:34): [True: 8.19k, False: 2.60M]
  ------------------
  701|  8.19k|                            {
  702|       |                                // Override old properties with same names
  703|  8.19k|                                r.nodes[ep.node_ep.name][i->first] = i->second;
  704|  8.19k|                            }
  705|  2.60M|                            current_members().push_back(
  706|  2.60M|                                noderef(ep.node_ep.name));
  707|  2.60M|                        }
  708|  75.1k|                        else
  709|  75.1k|                        {
  710|  75.1k|                            current_members().push_back(
  711|  75.1k|                                subgraphref(ep.subgraph_ep));
  712|  75.1k|                        }
  713|  2.67M|                    }
  714|  2.68M|                }
  715|  2.68M|                break;
  716|  77.6k|            }
  717|  1.88k|            default:
  ------------------
  |  Branch (717:13): [True: 1.88k, False: 2.68M]
  ------------------
  718|  1.88k|                error("Invalid start token for statement");
  719|  2.68M|            }
  720|  2.68M|        }
_ZN5boost20read_graphviz_detail6parser15parse_attr_stmtEv:
  723|    842|        {
  724|    842|            switch (get().type)
  725|    842|            {
  726|    251|            case token::kw_graph:
  ------------------
  |  Branch (726:13): [True: 251, False: 591]
  ------------------
  727|    251|                parse_attr_list(current_graph_props());
  728|    251|                break;
  729|    365|            case token::kw_node:
  ------------------
  |  Branch (729:13): [True: 365, False: 477]
  ------------------
  730|    365|                parse_attr_list(current().def_node_props);
  731|    365|                break;
  732|    226|            case token::kw_edge:
  ------------------
  |  Branch (732:13): [True: 226, False: 616]
  ------------------
  733|    226|                parse_attr_list(current().def_edge_props);
  734|    226|                break;
  735|      0|            default:
  ------------------
  |  Branch (735:13): [True: 0, False: 842]
  ------------------
  736|      0|                BOOST_ASSERT(!"Bad attr_stmt case");
  ------------------
  |  |   66|      0|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  737|    842|            }
  738|    842|        }
_ZN5boost20read_graphviz_detail6parser19parse_endpoint_restERKNS0_5tokenE:
  761|  2.72M|        {
  762|  2.72M|            switch (first_token.type)
  763|  2.72M|            {
  764|  4.54k|            case token::kw_subgraph:
  ------------------
  |  Branch (764:13): [True: 4.54k, False: 2.71M]
  ------------------
  765|  94.1k|            case token::left_brace:
  ------------------
  |  Branch (765:13): [True: 89.5k, False: 2.63M]
  ------------------
  766|  94.1k|                return edge_endpoint::subgraph(parse_subgraph(first_token));
  767|  2.63M|            default:
  ------------------
  |  Branch (767:13): [True: 2.63M, False: 94.1k]
  ------------------
  768|  2.63M|                return edge_endpoint::node(parse_node_and_port(first_token));
  769|  2.72M|            }
  770|  2.72M|        }
_ZN5boost20read_graphviz_detail13edge_endpoint8subgraphERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  483|   111k|        {
  484|   111k|            edge_endpoint r;
  485|   111k|            r.is_subgraph = true;
  486|   111k|            r.subgraph_ep = ep;
  487|   111k|            return r;
  488|   111k|        }
_ZN5boost20read_graphviz_detail6parser14parse_subgraphERKNS0_5tokenE:
  773|  94.1k|        {
  774|  94.1k|            std::string name;
  775|  94.1k|            bool is_anonymous = true;
  776|  94.1k|            if (first_token.type == token::kw_subgraph)
  ------------------
  |  Branch (776:17): [True: 4.54k, False: 89.5k]
  ------------------
  777|  4.54k|            {
  778|  4.54k|                switch (peek().type)
  779|  4.54k|                {
  780|  4.13k|                case token::identifier:
  ------------------
  |  Branch (780:17): [True: 4.13k, False: 409]
  ------------------
  781|  4.13k|                    name = get().normalized_value;
  782|  4.13k|                    is_anonymous = false;
  783|  4.13k|                    break;
  784|    388|                case token::left_brace:
  ------------------
  |  Branch (784:17): [True: 388, False: 4.16k]
  ------------------
  785|    388|                    is_anonymous = true;
  786|    388|                    break;
  787|     16|                default:
  ------------------
  |  Branch (787:17): [True: 16, False: 4.53k]
  ------------------
  788|     16|                    error("Subgraph reference needs a name");
  789|     16|                    break;
  790|  4.54k|                }
  791|  4.54k|            }
  792|  94.1k|            if (is_anonymous)
  ------------------
  |  Branch (792:17): [True: 89.9k, False: 4.13k]
  ------------------
  793|  89.9k|            {
  794|  89.9k|                name = "___subgraph_"
  795|  89.9k|                    + boost::lexical_cast< std::string >(++sgcounter);
  796|  89.9k|            }
  797|  94.1k|            if (subgraphs.find(name) == subgraphs.end())
  ------------------
  |  Branch (797:17): [True: 91.4k, False: 2.67k]
  ------------------
  798|  91.4k|            {
  799|  91.4k|                subgraphs[name]
  800|  91.4k|                    = current(); // Initialize properties and defaults
  801|  91.4k|                subgraphs[name].members.clear(); // Except member list
  802|  91.4k|            }
  803|  94.1k|            if (!is_anonymous && peek().type != token::left_brace)
  ------------------
  |  Branch (803:17): [True: 4.13k, False: 89.9k]
  |  Branch (803:17): [True: 3.12k, False: 90.9k]
  |  Branch (803:34): [True: 3.12k, False: 1.01k]
  ------------------
  804|  3.12k|            {
  805|  3.12k|                return name;
  806|  3.12k|            }
  807|  90.9k|            subgraph_name old_sg = current_subgraph_name;
  808|  90.9k|            if (++sgnesting_level > max_subgraph_nesting_level)
  ------------------
  |  Branch (808:17): [True: 11, False: 90.9k]
  ------------------
  809|     11|            {
  810|     11|                error("Exceeded maximum subgraph nesting level");
  811|     11|            }
  812|  90.9k|            current_subgraph_name = name;
  813|  90.9k|            if (first_token.type != token::left_brace)
  ------------------
  |  Branch (813:17): [True: 1.38k, False: 89.5k]
  ------------------
  814|  1.38k|            {
  815|  1.38k|                if (peek().type == token::left_brace)
  ------------------
  |  Branch (815:21): [True: 1.38k, False: 0]
  ------------------
  816|  1.38k|                    get();
  817|      0|                else
  818|      0|                    error("Wanted left brace to start subgraph");
  819|  1.38k|            }
  820|  90.9k|            parse_stmt_list();
  821|  90.9k|            if (peek().type == token::right_brace)
  ------------------
  |  Branch (821:17): [True: 71.3k, False: 19.5k]
  ------------------
  822|  71.3k|                get();
  823|  19.5k|            else
  824|  19.5k|                error("Wanted right brace to end subgraph");
  825|  90.9k|            current_subgraph_name = old_sg;
  826|  90.9k|            sgnesting_level -= 1;
  827|  90.9k|            return name;
  828|  94.1k|        }
_ZN5boost20read_graphviz_detail13edge_endpoint4nodeERKNS0_13node_and_portE:
  475|  3.43M|        {
  476|  3.43M|            edge_endpoint r;
  477|  3.43M|            r.is_subgraph = false;
  478|  3.43M|            r.node_ep = ep;
  479|  3.43M|            return r;
  480|  3.43M|        }
_ZN5boost20read_graphviz_detail6parser19parse_node_and_portERKNS0_5tokenE:
  831|  2.63M|        {
  832|       |            // A node ID is a node name, followed optionally by a port angle and
  833|       |            // a port location (in either order); a port location is either :id,
  834|       |            // :id:id, or :(id,id); the last two forms are treated as equivalent
  835|       |            // although I am not sure about that.
  836|  2.63M|            node_and_port id;
  837|  2.63M|            id.name = name.normalized_value;
  838|  2.63M|        parse_more:
  839|  2.63M|            switch (peek().type)
  840|  2.63M|            {
  841|  1.81k|            case token::at:
  ------------------
  |  Branch (841:13): [True: 1.81k, False: 2.63M]
  ------------------
  842|  1.81k|            {
  843|  1.81k|                get();
  844|  1.81k|                if (peek().type != token::identifier)
  ------------------
  |  Branch (844:21): [True: 11, False: 1.80k]
  ------------------
  845|     11|                    error("Wanted identifier as port angle");
  846|  1.81k|                if (!id.angle.empty())
  ------------------
  |  Branch (846:21): [True: 22, False: 1.79k]
  ------------------
  847|     22|                    error("Duplicate port angle");
  848|  1.81k|                id.angle = get().normalized_value;
  849|  1.81k|                goto parse_more;
  850|      0|            }
  851|  3.54k|            case token::colon:
  ------------------
  |  Branch (851:13): [True: 3.54k, False: 2.63M]
  ------------------
  852|  3.54k|            {
  853|  3.54k|                get();
  854|  3.54k|                if (!id.location.empty())
  ------------------
  |  Branch (854:21): [True: 4, False: 3.54k]
  ------------------
  855|      4|                    error("Duplicate port location");
  856|  3.54k|                switch (peek().type)
  857|  3.54k|                {
  858|  2.69k|                case token::identifier:
  ------------------
  |  Branch (858:17): [True: 2.69k, False: 857]
  ------------------
  859|  2.69k|                {
  860|  2.69k|                    id.location.push_back(get().normalized_value);
  861|  2.69k|                    switch (peek().type)
  862|  2.69k|                    {
  863|    617|                    case token::colon:
  ------------------
  |  Branch (863:21): [True: 617, False: 2.07k]
  ------------------
  864|    617|                    {
  865|    617|                        get();
  866|    617|                        if (peek().type != token::identifier)
  ------------------
  |  Branch (866:29): [True: 7, False: 610]
  ------------------
  867|      7|                            error("Wanted identifier as port location");
  868|    617|                        id.location.push_back(get().normalized_value);
  869|    617|                        goto parse_more;
  870|      0|                    }
  871|  2.06k|                    default:
  ------------------
  |  Branch (871:21): [True: 2.06k, False: 623]
  ------------------
  872|  2.06k|                        goto parse_more;
  873|  2.69k|                    }
  874|  2.69k|                }
  875|    845|                case token::left_paren:
  ------------------
  |  Branch (875:17): [True: 845, False: 2.70k]
  ------------------
  876|    845|                {
  877|    845|                    get();
  878|    845|                    if (peek().type != token::identifier)
  ------------------
  |  Branch (878:25): [True: 9, False: 836]
  ------------------
  879|      9|                        error("Wanted identifier as first element of port "
  880|      9|                              "location");
  881|    845|                    id.location.push_back(get().normalized_value);
  882|    845|                    if (peek().type != token::comma)
  ------------------
  |  Branch (882:25): [True: 14, False: 831]
  ------------------
  883|     14|                        error("Wanted comma between parts of port location");
  884|    845|                    get();
  885|    845|                    if (peek().type != token::identifier)
  ------------------
  |  Branch (885:25): [True: 12, False: 833]
  ------------------
  886|     12|                        error("Wanted identifier as second element of port "
  887|     12|                              "location");
  888|    845|                    id.location.push_back(get().normalized_value);
  889|    845|                    if (peek().type != token::right_paren)
  ------------------
  |  Branch (889:25): [True: 14, False: 831]
  ------------------
  890|     14|                        error(
  891|     14|                            "Wanted right parenthesis to close port location");
  892|    845|                    get();
  893|    845|                    goto parse_more;
  894|  2.69k|                }
  895|      6|                default:
  ------------------
  |  Branch (895:17): [True: 6, False: 3.54k]
  ------------------
  896|      6|                    error("Wanted identifier or left parenthesis as start of "
  897|      6|                          "port location");
  898|  3.54k|                }
  899|  3.54k|            }
  900|      0|            break;
  901|  2.63M|            default:
  ------------------
  |  Branch (901:13): [True: 2.63M, False: 5.39k]
  ------------------
  902|  2.63M|                break;
  903|  2.63M|            }
  904|  2.63M|            if (r.nodes.find(id.name) == r.nodes.end())
  ------------------
  |  Branch (904:17): [True: 29.7k, False: 2.60M]
  ------------------
  905|  29.7k|            { // First mention
  906|  29.7k|                r.nodes[id.name] = current().def_node_props;
  907|  29.7k|            }
  908|  2.63M|            return id;
  909|  2.63M|        }
_ZN5boost20read_graphviz_detail6parser15parse_edge_stmtERKNS0_13edge_endpointE:
  912|  8.26k|        {
  913|  8.26k|            std::vector< edge_endpoint > nodes_in_chain(1, lhs);
  914|  46.8k|            while (true)
  ------------------
  |  Branch (914:20): [Folded - Ignored]
  ------------------
  915|  46.8k|            {
  916|  46.8k|                bool leave_loop = true;
  917|  46.8k|                switch (peek().type)
  918|  46.8k|                {
  919|      4|                case token::dash_dash:
  ------------------
  |  Branch (919:17): [True: 4, False: 46.8k]
  ------------------
  920|      4|                {
  921|      4|                    if (r.graph_is_directed)
  ------------------
  |  Branch (921:25): [True: 4, False: 0]
  ------------------
  922|      4|                        error("Using -- in directed graph");
  923|      4|                    get();
  924|      4|                    nodes_in_chain.push_back(parse_endpoint());
  925|      4|                    leave_loop = false;
  926|      4|                    break;
  927|      0|                }
  928|  41.0k|                case token::dash_greater:
  ------------------
  |  Branch (928:17): [True: 41.0k, False: 5.72k]
  ------------------
  929|  41.0k|                {
  930|  41.0k|                    if (!r.graph_is_directed)
  ------------------
  |  Branch (930:25): [True: 0, False: 41.0k]
  ------------------
  931|      0|                        error("Using -> in undirected graph");
  932|  41.0k|                    get();
  933|  41.0k|                    nodes_in_chain.push_back(parse_endpoint());
  934|  41.0k|                    leave_loop = false;
  935|  41.0k|                    break;
  936|      0|                }
  937|  5.71k|                default:
  ------------------
  |  Branch (937:17): [True: 5.71k, False: 41.1k]
  ------------------
  938|  5.71k|                    leave_loop = true;
  939|  5.71k|                    break;
  940|  46.8k|                }
  941|  44.2k|                if (leave_loop)
  ------------------
  |  Branch (941:21): [True: 5.71k, False: 38.5k]
  ------------------
  942|  5.71k|                    break;
  943|  44.2k|            }
  944|  5.71k|            properties this_edge_props = current().def_edge_props;
  945|  5.71k|            if (peek().type == token::left_bracket)
  ------------------
  |  Branch (945:17): [True: 824, False: 4.89k]
  ------------------
  946|    824|                parse_attr_list(this_edge_props);
  947|  5.71k|            BOOST_ASSERT(nodes_in_chain.size()
  ------------------
  |  |   66|  5.71k|# define BOOST_ASSERT(expr) assert(expr)
  ------------------
  948|  5.71k|                >= 2); // Should be in node parser otherwise
  949|  43.3k|            for (size_t i = 0; i + 1 < nodes_in_chain.size(); ++i)
  ------------------
  |  Branch (949:32): [True: 37.6k, False: 5.71k]
  ------------------
  950|  37.6k|            {
  951|  37.6k|                do_orig_edge(
  952|  37.6k|                    nodes_in_chain[i], nodes_in_chain[i + 1], this_edge_props);
  953|  37.6k|            }
  954|  5.71k|        }
_ZN5boost20read_graphviz_detail6parser14parse_endpointEv:
  741|  41.0k|        {
  742|  41.0k|            switch (peek().type)
  743|  41.0k|            {
  744|    657|            case token::kw_subgraph:
  ------------------
  |  Branch (744:13): [True: 657, False: 40.4k]
  ------------------
  745|  16.4k|            case token::left_brace:
  ------------------
  |  Branch (745:13): [True: 15.8k, False: 25.2k]
  ------------------
  746|  41.0k|            case token::identifier:
  ------------------
  |  Branch (746:13): [True: 24.6k, False: 16.4k]
  ------------------
  747|  41.0k|            {
  748|  41.0k|                token first = get();
  749|  41.0k|                return parse_endpoint_rest(first);
  750|  16.4k|            }
  751|     26|            default:
  ------------------
  |  Branch (751:13): [True: 26, False: 41.0k]
  ------------------
  752|     26|            {
  753|     26|                error("Wanted \"subgraph\", \"{\", or identifier to start node "
  754|     26|                      "or subgraph");
  755|     26|                return edge_endpoint();
  756|  16.4k|            }
  757|  41.0k|            }
  758|  41.0k|        }
_ZN5boost20read_graphviz_detail6parser12do_orig_edgeERKNS0_13edge_endpointES4_RKNSt3__13mapINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESC_NS5_4lessISC_EENSA_INS5_4pairIKSC_SC_EEEEEE:
  960|  37.6k|        {
  961|  37.6k|            std::set< node_and_port > sources = get_recursive_members(src);
  962|  37.6k|            std::set< node_and_port > targets = get_recursive_members(tgt);
  963|  37.6k|            for (std::set< node_and_port >::const_iterator i = sources.begin();
  964|   368k|                 i != sources.end(); ++i)
  ------------------
  |  Branch (964:18): [True: 331k, False: 37.6k]
  ------------------
  965|   331k|            {
  966|   331k|                for (std::set< node_and_port >::const_iterator j
  967|   331k|                     = targets.begin();
  968|  8.23M|                     j != targets.end(); ++j)
  ------------------
  |  Branch (968:22): [True: 7.90M, False: 331k]
  ------------------
  969|  7.90M|                {
  970|  7.90M|                    do_edge(*i, *j, props);
  971|  7.90M|                }
  972|   331k|            }
  973|  37.6k|        }
_ZN5boost20read_graphviz_detail6parser21get_recursive_membersERKNS0_13edge_endpointE:
  978|  75.2k|        {
  979|  75.2k|            std::set< node_and_port > result;
  980|  75.2k|            std::vector< edge_endpoint > worklist(1, orig_ep);
  981|  75.2k|            std::set< subgraph_name > done;
  982|   987k|            while (!worklist.empty())
  ------------------
  |  Branch (982:20): [True: 912k, False: 75.2k]
  ------------------
  983|   912k|            {
  984|   912k|                edge_endpoint ep = worklist.back();
  985|   912k|                worklist.pop_back();
  986|   912k|                if (ep.is_subgraph)
  ------------------
  |  Branch (986:21): [True: 65.8k, False: 846k]
  ------------------
  987|  65.8k|                {
  988|  65.8k|                    if (done.find(ep.subgraph_ep) == done.end())
  ------------------
  |  Branch (988:25): [True: 64.9k, False: 849]
  ------------------
  989|  64.9k|                    {
  990|  64.9k|                        done.insert(ep.subgraph_ep);
  991|  64.9k|                        std::map< subgraph_name, subgraph_info >::const_iterator
  992|  64.9k|                            info_i
  993|  64.9k|                            = subgraphs.find(ep.subgraph_ep);
  994|  64.9k|                        if (info_i != subgraphs.end())
  ------------------
  |  Branch (994:29): [True: 64.9k, False: 0]
  ------------------
  995|  64.9k|                        {
  996|  64.9k|                            const subgraph_member_list& members
  997|  64.9k|                                = info_i->second.members;
  998|  64.9k|                            for (subgraph_member_list::const_iterator i
  999|  64.9k|                                 = members.begin();
 1000|   901k|                                 i != members.end(); ++i)
  ------------------
  |  Branch (1000:34): [True: 836k, False: 64.9k]
  ------------------
 1001|   836k|                            {
 1002|   836k|                                node_or_subgraph_ref ref = *i;
 1003|   836k|                                if (ref.is_subgraph)
  ------------------
  |  Branch (1003:37): [True: 36.6k, False: 800k]
  ------------------
 1004|  36.6k|                                {
 1005|  36.6k|                                    worklist.push_back(
 1006|  36.6k|                                        edge_endpoint::subgraph(ref.name));
 1007|  36.6k|                                }
 1008|   800k|                                else
 1009|   800k|                                {
 1010|   800k|                                    node_and_port np;
 1011|   800k|                                    np.name = ref.name;
 1012|   800k|                                    worklist.push_back(edge_endpoint::node(np));
 1013|   800k|                                }
 1014|   836k|                            }
 1015|  64.9k|                        }
 1016|  64.9k|                    }
 1017|  65.8k|                }
 1018|   846k|                else
 1019|   846k|                {
 1020|   846k|                    result.insert(ep.node_ep);
 1021|   846k|                }
 1022|   912k|            }
 1023|  75.2k|            return result;
 1024|  75.2k|        }
_ZN5boost20read_graphviz_detail6parser7do_edgeERKNS0_13node_and_portES4_RKNSt3__13mapINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESC_NS5_4lessISC_EENSA_INS5_4pairIKSC_SC_EEEEEE:
 1029|  7.90M|        {
 1030|  7.90M|            if (r.graph_is_strict)
  ------------------
  |  Branch (1030:17): [True: 73.7k, False: 7.83M]
  ------------------
 1031|  73.7k|            {
 1032|  73.7k|                if (src.name == tgt.name)
  ------------------
  |  Branch (1032:21): [True: 2.85k, False: 70.8k]
  ------------------
 1033|  2.85k|                    return;
 1034|  70.8k|                std::pair< node_name, node_name > tag(src.name, tgt.name);
 1035|  70.8k|                if (existing_edges.find(tag) != existing_edges.end())
  ------------------
  |  Branch (1035:21): [True: 27.9k, False: 42.9k]
  ------------------
 1036|  27.9k|                {
 1037|  27.9k|                    return; // Parallel edge
 1038|  27.9k|                }
 1039|  42.9k|                existing_edges.insert(tag);
 1040|  42.9k|            }
 1041|  7.87M|            edge_info e;
 1042|  7.87M|            e.source = src;
 1043|  7.87M|            e.target = tgt;
 1044|  7.87M|            e.props = props;
 1045|  7.87M|            r.edges.push_back(e);
 1046|  7.87M|        }
_ZN5boost20read_graphviz_detail6parser15parse_attr_listERNSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEES9_NS2_4lessIS9_EENS7_INS2_4pairIKS9_S9_EEEEEE:
 1049|  4.12k|        {
 1050|  4.63k|            while (true)
  ------------------
  |  Branch (1050:20): [Folded - Ignored]
  ------------------
 1051|  4.59k|            {
 1052|  4.59k|                if (peek().type == token::left_bracket)
  ------------------
  |  Branch (1052:21): [True: 4.56k, False: 31]
  ------------------
 1053|  4.56k|                    get();
 1054|     31|                else
 1055|     31|                    error("Wanted left bracket to start attribute list");
 1056|  25.6k|                while (true)
  ------------------
  |  Branch (1056:24): [Folded - Ignored]
  ------------------
 1057|  25.6k|                {
 1058|  25.6k|                    switch (peek().type)
 1059|  25.6k|                    {
 1060|    740|                    case token::right_bracket:
  ------------------
  |  Branch (1060:21): [True: 740, False: 24.8k]
  ------------------
 1061|    740|                        break;
 1062|  24.6k|                    case token::identifier:
  ------------------
  |  Branch (1062:21): [True: 24.6k, False: 906]
  ------------------
 1063|  24.6k|                    {
 1064|  24.6k|                        std::string lhs = get().normalized_value;
 1065|  24.6k|                        std::string rhs = "true";
 1066|  24.6k|                        if (peek().type == token::equal)
  ------------------
  |  Branch (1066:29): [True: 602, False: 24.0k]
  ------------------
 1067|    602|                        {
 1068|    602|                            get();
 1069|    602|                            if (peek().type != token::identifier)
  ------------------
  |  Branch (1069:33): [True: 9, False: 593]
  ------------------
 1070|      9|                                error(
 1071|      9|                                    "Wanted identifier as value of attribute");
 1072|    602|                            rhs = get().normalized_value;
 1073|    602|                        }
 1074|  24.6k|                        props[lhs] = rhs;
 1075|  24.6k|                        break;
 1076|      0|                    }
 1077|    165|                    default:
  ------------------
  |  Branch (1077:21): [True: 165, False: 25.4k]
  ------------------
 1078|    165|                        error("Wanted identifier as name of attribute");
 1079|  25.6k|                    }
 1080|  25.4k|                    if (peek().type == token::comma
  ------------------
  |  Branch (1080:25): [True: 256, False: 25.1k]
  |  Branch (1080:25): [True: 442, False: 24.9k]
  ------------------
 1081|  25.4k|                        || peek().type == token::semicolon)
  ------------------
  |  Branch (1081:28): [True: 188, False: 24.9k]
  ------------------
 1082|    442|                        get();
 1083|  24.9k|                    else if (peek().type == token::right_bracket)
  ------------------
  |  Branch (1083:30): [True: 4.36k, False: 20.6k]
  ------------------
 1084|  4.36k|                        break;
 1085|  25.4k|                }
 1086|  4.40k|                if (peek().type == token::right_bracket)
  ------------------
  |  Branch (1086:21): [True: 4.36k, False: 33]
  ------------------
 1087|  4.36k|                    get();
 1088|     33|                else
 1089|     33|                    error("Wanted right bracket to end attribute list");
 1090|  4.40k|                if (peek().type != token::left_bracket)
  ------------------
  |  Branch (1090:21): [True: 3.90k, False: 501]
  ------------------
 1091|  3.90k|                    break;
 1092|  4.40k|            }
 1093|  4.12k|        }
read_graphviz_new.cpp:_ZN5boost20read_graphviz_detailL7noderefERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  499|  2.59M|    {
  500|  2.59M|        node_or_subgraph_ref r;
  501|  2.59M|        r.is_subgraph = false;
  502|  2.59M|        r.name = n;
  503|  2.59M|        return r;
  504|  2.59M|    }
read_graphviz_new.cpp:_ZN5boost20read_graphviz_detailL11subgraphrefERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  507|  57.6k|    {
  508|  57.6k|        node_or_subgraph_ref r;
  509|  57.6k|        r.is_subgraph = true;
  510|  57.6k|        r.name = n;
  511|  57.6k|        return r;
  512|  57.6k|    }
_ZN5boost20read_graphviz_detaillsERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKNS0_5tokenE:
   95|  2.91k|        {
   96|  2.91k|            switch (t.type)
   97|  2.91k|            {
   98|      5|            case token::kw_strict:
  ------------------
  |  Branch (98:13): [True: 5, False: 2.91k]
  ------------------
   99|      5|                o << "<strict>";
  100|      5|                break;
  101|      7|            case token::kw_graph:
  ------------------
  |  Branch (101:13): [True: 7, False: 2.90k]
  ------------------
  102|      7|                o << "<graph>";
  103|      7|                break;
  104|      4|            case token::kw_digraph:
  ------------------
  |  Branch (104:13): [True: 4, False: 2.91k]
  ------------------
  105|      4|                o << "<digraph>";
  106|      4|                break;
  107|      4|            case token::kw_node:
  ------------------
  |  Branch (107:13): [True: 4, False: 2.91k]
  ------------------
  108|      4|                o << "<node>";
  109|      4|                break;
  110|      1|            case token::kw_edge:
  ------------------
  |  Branch (110:13): [True: 1, False: 2.91k]
  ------------------
  111|      1|                o << "<edge>";
  112|      1|                break;
  113|      2|            case token::kw_subgraph:
  ------------------
  |  Branch (113:13): [True: 2, False: 2.91k]
  ------------------
  114|      2|                o << "<subgraph>";
  115|      2|                break;
  116|     20|            case token::left_brace:
  ------------------
  |  Branch (116:13): [True: 20, False: 2.89k]
  ------------------
  117|     20|                o << "<left_brace>";
  118|     20|                break;
  119|     24|            case token::right_brace:
  ------------------
  |  Branch (119:13): [True: 24, False: 2.89k]
  ------------------
  120|     24|                o << "<right_brace>";
  121|     24|                break;
  122|      3|            case token::semicolon:
  ------------------
  |  Branch (122:13): [True: 3, False: 2.91k]
  ------------------
  123|      3|                o << "<semicolon>";
  124|      3|                break;
  125|     17|            case token::equal:
  ------------------
  |  Branch (125:13): [True: 17, False: 2.89k]
  ------------------
  126|     17|                o << "<equal>";
  127|     17|                break;
  128|      8|            case token::left_bracket:
  ------------------
  |  Branch (128:13): [True: 8, False: 2.90k]
  ------------------
  129|      8|                o << "<left_bracket>";
  130|      8|                break;
  131|     32|            case token::right_bracket:
  ------------------
  |  Branch (131:13): [True: 32, False: 2.88k]
  ------------------
  132|     32|                o << "<right_bracket>";
  133|     32|                break;
  134|      4|            case token::comma:
  ------------------
  |  Branch (134:13): [True: 4, False: 2.91k]
  ------------------
  135|      4|                o << "<comma>";
  136|      4|                break;
  137|     14|            case token::colon:
  ------------------
  |  Branch (137:13): [True: 14, False: 2.90k]
  ------------------
  138|     14|                o << "<colon>";
  139|     14|                break;
  140|     16|            case token::dash_greater:
  ------------------
  |  Branch (140:13): [True: 16, False: 2.89k]
  ------------------
  141|     16|                o << "<dash-greater>";
  142|     16|                break;
  143|      5|            case token::dash_dash:
  ------------------
  |  Branch (143:13): [True: 5, False: 2.91k]
  ------------------
  144|      5|                o << "<dash-dash>";
  145|      5|                break;
  146|      7|            case token::plus:
  ------------------
  |  Branch (146:13): [True: 7, False: 2.90k]
  ------------------
  147|      7|                o << "<plus>";
  148|      7|                break;
  149|     15|            case token::left_paren:
  ------------------
  |  Branch (149:13): [True: 15, False: 2.90k]
  ------------------
  150|     15|                o << "<left_paren>";
  151|     15|                break;
  152|      7|            case token::right_paren:
  ------------------
  |  Branch (152:13): [True: 7, False: 2.90k]
  ------------------
  153|      7|                o << "<right_paren>";
  154|      7|                break;
  155|      6|            case token::at:
  ------------------
  |  Branch (155:13): [True: 6, False: 2.90k]
  ------------------
  156|      6|                o << "<at>";
  157|      6|                break;
  158|    452|            case token::identifier:
  ------------------
  |  Branch (158:13): [True: 452, False: 2.46k]
  ------------------
  159|    452|                o << "<identifier>";
  160|    452|                break;
  161|      0|            case token::quoted_string:
  ------------------
  |  Branch (161:13): [True: 0, False: 2.91k]
  ------------------
  162|      0|                o << "<quoted_string>";
  163|      0|                break;
  164|  2.26k|            case token::eof:
  ------------------
  |  Branch (164:13): [True: 2.26k, False: 653]
  ------------------
  165|  2.26k|                o << "<eof>";
  166|  2.26k|                break;
  167|      0|            default:
  ------------------
  |  Branch (167:13): [True: 0, False: 2.91k]
  ------------------
  168|      0|                o << "<invalid type>";
  169|      0|                break;
  170|  2.91k|            }
  171|  2.91k|            o << " '" << t.normalized_value << "'";
  172|  2.91k|            return o;
  173|  2.91k|        }

LLVMFuzzerTestOneInput:
   40|  4.79k|{
   41|  4.79k|    FuzzedDataProvider fdp(data, size);
   42|  4.79k|    try
   43|  4.79k|    {
   44|  4.79k|        graph_t graphviz;
   45|  4.79k|        boost::dynamic_properties dp(boost::ignore_other_properties);
   46|  4.79k|        dp.property("node_id", boost::get(&DotVertex::name, graphviz));
   47|  4.79k|        read_graphviz(fdp.ConsumeRemainingBytesAsString(), graphviz, dp);
   48|  4.79k|        auto viter = make_iterator_range(vertices(graphviz));
   49|       |#ifdef DEBUG
   50|       |        for (auto v : viter) {
   51|       |            std::cout << v << " ";
   52|       |        }
   53|       |#endif
   54|  4.79k|    } catch(...) {
   55|  3.67k|    }
   56|  4.79k|    return 0;
   57|  4.79k|}

