LCOV - code coverage report
Current view: top level - capy/detail - service_slot.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 4 4
Test Date: 2026-04-01 22:02:47 Functions: 100.0 % 10 10

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2026 Michael Vandeberg
       3                 : //
       4                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6                 : //
       7                 : // Official repository: https://github.com/cppalliance/capy
       8                 : //
       9                 : 
      10                 : #ifndef BOOST_CAPY_DETAIL_SERVICE_SLOT_HPP
      11                 : #define BOOST_CAPY_DETAIL_SERVICE_SLOT_HPP
      12                 : 
      13                 : #include <atomic>
      14                 : #include <cstddef>
      15                 : 
      16                 : namespace boost {
      17                 : namespace capy {
      18                 : namespace detail {
      19                 : 
      20                 : /* Slot ID infrastructure for O(1) service lookup.
      21                 : 
      22                 :    Each distinct service type T gets a unique integer index via
      23                 :    service_slot<T>(). The index is assigned on first call from a
      24                 :    global atomic counter and cached in a function-local static.
      25                 :    Cross-DLL safety relies on COMDAT deduplication (same mechanism
      26                 :    as type_id_impl<T>::tag).
      27                 : */
      28                 : 
      29                 : inline std::atomic<std::size_t> next_service_slot{0};
      30                 : 
      31                 : template<class T>
      32                 : std::size_t
      33 HIT         259 : service_slot() noexcept
      34                 : {
      35             259 :     static const std::size_t id =
      36              16 :         next_service_slot.fetch_add(1, std::memory_order_relaxed);
      37             259 :     return id;
      38                 : }
      39                 : 
      40                 : } // namespace detail
      41                 : } // namespace capy
      42                 : } // namespace boost
      43                 : 
      44                 : #endif
        

Generated by: LCOV version 2.3