ATLAS Offline Software
Loading...
Searching...
No Matches
GlobalSim::BitSpec< Derived, N, Base > Class Template Reference

#include <BitSpec.h>

Inheritance diagram for GlobalSim::BitSpec< Derived, N, Base >:
Collaboration diagram for GlobalSim::BitSpec< Derived, N, Base >:

Public Types

using bitset_type = std::bitset<N>
using BaseSpec = Base

Static Public Member Functions

template<std::size_t I>
static constexpr decltype(auto) field ()
static constexpr std::size_t numFields ()
static constexpr void forEachField (auto &&func)
static constexpr std::string json ()
template<typename Fields>
static bitset_type packFields (const Fields &fields, const SG::AuxElement &obj)

Static Public Attributes

static constexpr std::size_t width = N

Static Protected Member Functions

template<typename... Fields>
static constexpr auto makeFields (Fields &... fields)
static constexpr auto allFields ()
static consteval bool validateFields ()

Static Private Member Functions

template<typename First, typename... Rest>
static consteval bool validateFieldList ()
template<typename Field>
static consteval bool validateField ()
template<typename A, typename B>
static consteval bool checkOverlap ()

Friends

template<typename>
class Object

Detailed Description

template<typename Derived, std::size_t N, typename Base = NoBase>
class GlobalSim::BitSpec< Derived, N, Base >

Definition at line 499 of file BitSpec.h.

Member Typedef Documentation

◆ BaseSpec

template<typename Derived, std::size_t N, typename Base = NoBase>
using GlobalSim::BitSpec< Derived, N, Base >::BaseSpec = Base

Definition at line 504 of file BitSpec.h.

◆ bitset_type

template<typename Derived, std::size_t N, typename Base = NoBase>
using GlobalSim::BitSpec< Derived, N, Base >::bitset_type = std::bitset<N>

Definition at line 502 of file BitSpec.h.

Member Function Documentation

◆ allFields()

template<typename Derived, std::size_t N, typename Base = NoBase>
constexpr auto GlobalSim::BitSpec< Derived, N, Base >::allFields ( )
inlinestaticconstexprprotected

Definition at line 549 of file BitSpec.h.

550 {
551 return std::tuple_cat(
554 );
555 }

◆ checkOverlap()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename A, typename B>
consteval bool GlobalSim::BitSpec< Derived, N, Base >::checkOverlap ( )
inlinestaticconstevalprivate

Definition at line 629 of file BitSpec.h.

629 {
630 if (A::lo <= B::hi && B::lo <= A::hi) {
631 return true;
632 }
633 return false;
634 }

◆ field()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<std::size_t I>
constexpr decltype(auto) GlobalSim::BitSpec< Derived, N, Base >::field ( )
inlinestaticconstexpr

Definition at line 508 of file BitSpec.h.

508 {
510 }

◆ forEachField()

template<typename Derived, std::size_t N, typename Base = NoBase>
constexpr void GlobalSim::BitSpec< Derived, N, Base >::forEachField ( auto && func)
inlinestaticconstexpr

Definition at line 520 of file BitSpec.h.

520 {
521 std::apply([&](const auto *... field) { (func(*field), ...); }, Derived::allFields());
522 }
static constexpr decltype(auto) field()
Definition BitSpec.h:508

◆ json()

template<typename Derived, std::size_t N, typename Base = NoBase>
constexpr std::string GlobalSim::BitSpec< Derived, N, Base >::json ( )
inlinestaticconstexpr

Definition at line 525 of file BitSpec.h.

525 {
527 j["data_width"] = width;
528 j["fields"] = nlohmann::json::array();
529 forEachField([&](const auto &field) {
531 f["name"] = field.name();
532 f["description"] = field.description();
533 f["start"] = field.lo;
534 f["width"] = field.width;
535 j["fields"].push_back(f);
536 });
537 return j.dump(4);
538 }
static constexpr std::size_t width
Definition BitSpec.h:501
static constexpr void forEachField(auto &&func)
Definition BitSpec.h:520

◆ makeFields()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename... Fields>
constexpr auto GlobalSim::BitSpec< Derived, N, Base >::makeFields ( Fields &... fields)
inlinestaticconstexprprotected

Definition at line 544 of file BitSpec.h.

544 {
545 return std::tuple{&fields...};
546 }

◆ numFields()

template<typename Derived, std::size_t N, typename Base = NoBase>
constexpr std::size_t GlobalSim::BitSpec< Derived, N, Base >::numFields ( )
inlinestaticconstexpr

Definition at line 515 of file BitSpec.h.

515 {
517 }

◆ packFields()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename Fields>
bitset_type GlobalSim::BitSpec< Derived, N, Base >::packFields ( const Fields & fields,
const SG::AuxElement & obj )
inlinestatic

Definition at line 563 of file BitSpec.h.

563 {
565
567 [&](const auto *... field) {
568 (field->pack(result, obj), ...);
569 },
570 fields);
571
572 return result;
573 }
std::bitset< N > bitset_type
Definition BitSpec.h:502

◆ validateField()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename Field>
consteval bool GlobalSim::BitSpec< Derived, N, Base >::validateField ( )
inlinestaticconstevalprivate

Definition at line 620 of file BitSpec.h.

620 {
621 return Field::lo <= Field::hi && Field::hi < N;
622 }

◆ validateFieldList()

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename First, typename... Rest>
consteval bool GlobalSim::BitSpec< Derived, N, Base >::validateFieldList ( )
inlinestaticconstevalprivate

Definition at line 604 of file BitSpec.h.

605 {
606 if constexpr (sizeof...(Rest) == 0)
607 {
608 return validateField<First>();
609 }
610 else
611 {
612 return validateField<First>() &&
613 (validateField<Rest>() && ...) &&
614 ((!checkOverlap<First, Rest>()) && ...) &&
616 }
617 }
static consteval bool validateField()
Definition BitSpec.h:620
static consteval bool checkOverlap()
Definition BitSpec.h:629
static consteval bool validateFieldList()
Definition BitSpec.h:604

◆ validateFields()

template<typename Derived, std::size_t N, typename Base = NoBase>
consteval bool GlobalSim::BitSpec< Derived, N, Base >::validateFields ( )
inlinestaticconstevalprotected

Definition at line 587 of file BitSpec.h.

588 {
589 return std::apply(
590 []<typename... FieldPtrs>(FieldPtrs... field) {
591 return validateFieldList<
592 std::remove_cvref_t<decltype(*field)>...
593 >();
594 },
596 }

◆ Object

template<typename Derived, std::size_t N, typename Base = NoBase>
template<typename>
friend class Object
friend

Definition at line 503 of file BitSpec.h.

Member Data Documentation

◆ width

template<typename Derived, std::size_t N, typename Base = NoBase>
std::size_t GlobalSim::BitSpec< Derived, N, Base >::width = N
staticconstexpr

Definition at line 501 of file BitSpec.h.


The documentation for this class was generated from the following file: