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 = 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 637 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 642 of file BitSpec.h.

◆ bitset_type

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

Definition at line 640 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 687 of file BitSpec.h.

688 {
689 return std::tuple_cat(
692 );
693 }

◆ 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 767 of file BitSpec.h.

767 {
768 if (A::lo <= B::hi && B::lo <= A::hi) {
769 return true;
770 }
771 return false;
772 }

◆ 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 646 of file BitSpec.h.

646 {
648 }

◆ 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 658 of file BitSpec.h.

658 {
659 std::apply([&](const auto *... field) { (func(*field), ...); }, Derived::allFields());
660 }
static constexpr decltype(auto) field()
Definition BitSpec.h:646

◆ json()

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

Definition at line 663 of file BitSpec.h.

663 {
665 j["data_width"] = width;
666 j["fields"] = nlohmann::json::array();
667 forEachField([&](const auto &field) {
669 f["name"] = field.name;
670 f["description"] = field.description;
671 f["start"] = field.lo;
672 f["width"] = field.width;
673 j["fields"].push_back(f);
674 });
675 return j.dump(4);
676 }
static constexpr std::size_t width
Definition BitSpec.h:639
static constexpr void forEachField(auto &&func)
Definition BitSpec.h:658

◆ 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 682 of file BitSpec.h.

682 {
683 return std::tuple{&fields...};
684 }

◆ 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 653 of file BitSpec.h.

653 {
655 }

◆ 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 701 of file BitSpec.h.

701 {
703
705 [&](const auto *... field) {
706 (field->pack(result, obj), ...);
707 },
708 fields);
709
710 return result;
711 }
Bitset< N > bitset_type
Definition BitSpec.h:640

◆ 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 758 of file BitSpec.h.

758 {
759 return Field::lo <= Field::hi && Field::hi < N;
760 }

◆ 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 742 of file BitSpec.h.

743 {
744 if constexpr (sizeof...(Rest) == 0)
745 {
746 return validateField<First>();
747 }
748 else
749 {
750 return validateField<First>() &&
751 (validateField<Rest>() && ...) &&
752 ((!checkOverlap<First, Rest>()) && ...) &&
754 }
755 }
static consteval bool validateField()
Definition BitSpec.h:758
static consteval bool checkOverlap()
Definition BitSpec.h:767
static consteval bool validateFieldList()
Definition BitSpec.h:742

◆ validateFields()

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

Definition at line 725 of file BitSpec.h.

726 {
727 return std::apply(
728 []<typename... FieldPtrs>(FieldPtrs... field) {
729 return validateFieldList<
730 std::remove_cvref_t<decltype(*field)>...
731 >();
732 },
734 }

◆ Object

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

Definition at line 641 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 639 of file BitSpec.h.


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