File indexing completed on 2025-09-16 08:27:50
0001
0002
0003 #ifndef ACTSPODIOEDM_TrackState_H
0004 #define ACTSPODIOEDM_TrackState_H
0005
0006 #include "ActsPodioEdm/Surface.h"
0007 #include "ActsPodioEdm/TrackStateInfo.h"
0008 #include "ActsPodioEdm/TrackStateObj.h"
0009
0010 #include <cstdint>
0011 #include <ostream>
0012
0013 #include "podio/detail/OrderKey.h"
0014 #include "podio/utilities/MaybeSharedPtr.h"
0015
0016 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0017 #include "nlohmann/json_fwd.hpp"
0018 #endif
0019
0020
0021 namespace ActsPodioEdm {
0022 class TrackStateCollection;
0023 }
0024
0025 namespace podio::detail {
0026
0027
0028 OrderKey getOrderKey(const ActsPodioEdm::TrackState& obj);
0029 };
0030
0031 namespace ActsPodioEdm {
0032
0033 class MutableTrackState;
0034 class TrackStateCollection;
0035 class TrackStateCollectionData;
0036
0037
0038
0039
0040
0041 class TrackState {
0042 friend class MutableTrackState;
0043 friend class TrackStateCollection;
0044 friend class ActsPodioEdm::TrackStateCollectionData;
0045 friend class TrackStateCollectionIterator;
0046 friend podio::detail::OrderKey podio::detail::getOrderKey(
0047 const TrackState& obj);
0048
0049 public:
0050 using mutable_type = MutableTrackState;
0051 using collection_type = TrackStateCollection;
0052
0053
0054 TrackState();
0055
0056
0057 TrackState(const ActsPodioEdm::TrackStateInfo& data,
0058 const ActsPodioEdm::Surface& referenceSurface);
0059
0060
0061 TrackState(const TrackState& other) = default;
0062
0063
0064 TrackState& operator=(
0065 TrackState other) &;
0066 TrackState& operator=(TrackState other) && =
0067 delete;
0068
0069
0070
0071 MutableTrackState clone(bool cloneRelations = true) const;
0072
0073
0074 ~TrackState() = default;
0075
0076
0077 TrackState(const MutableTrackState& other);
0078
0079 static TrackState makeEmpty();
0080
0081 public:
0082 static constexpr std::string_view typeName = "ActsPodioEdm::TrackState";
0083
0084
0085 const ActsPodioEdm::TrackStateInfo& getData() const;
0086
0087
0088 const ActsPodioEdm::Surface& getReferenceSurface() const;
0089
0090
0091 bool isAvailable() const;
0092
0093 void unlink() {
0094 m_obj = podio::utils::MaybeSharedPtr<TrackStateObj>{nullptr};
0095 }
0096
0097 bool operator==(const TrackState& other) const {
0098 return m_obj == other.m_obj;
0099 }
0100 bool operator==(const MutableTrackState& other) const;
0101
0102 bool operator!=(const TrackState& other) const { return !(*this == other); }
0103 bool operator!=(const MutableTrackState& other) const {
0104 return !(*this == other);
0105 }
0106
0107
0108 bool operator<(const TrackState& other) const {
0109 return podio::detail::getOrderKey(*this) <
0110 podio::detail::getOrderKey(other);
0111 }
0112
0113 podio::ObjectID id() const { return getObjectID(); }
0114
0115 const podio::ObjectID getObjectID() const;
0116
0117 friend std::hash<TrackState>;
0118
0119 friend void swap(TrackState& a, TrackState& b) {
0120 using std::swap;
0121 swap(a.m_obj, b.m_obj);
0122 }
0123
0124 private:
0125
0126 explicit TrackState(podio::utils::MaybeSharedPtr<TrackStateObj> obj);
0127 TrackState(TrackStateObj* obj);
0128
0129 podio::utils::MaybeSharedPtr<TrackStateObj> m_obj{nullptr};
0130 };
0131
0132 std::ostream& operator<<(std::ostream& o, const TrackState& value);
0133
0134 #if defined(PODIO_JSON_OUTPUT) && !defined(__CLING__)
0135 void to_json(nlohmann::json& j, const TrackState& value);
0136 #endif
0137
0138 }
0139
0140 template <>
0141 struct std::hash<ActsPodioEdm::TrackState> {
0142 std::size_t operator()(const ActsPodioEdm::TrackState& obj) const {
0143 return std::hash<ActsPodioEdm::TrackStateObj*>{}(obj.m_obj.get());
0144 }
0145 };
0146
0147
0148
0149
0150
0151 #if defined(__clang__)
0152 #pragma clang diagnostic push
0153 #pragma clang diagnostic ignored "-Wunknown-warning-option"
0154 #pragma clang diagnostic ignored "-Wdeprecated-redundant-constexpr-static-def"
0155 #pragma clang diagnostic ignored "-Wdeprecated"
0156 constexpr std::string_view ActsPodioEdm::TrackState::typeName;
0157 #pragma clang diagnostic pop
0158 #elif defined(__GNUC__)
0159 #pragma GCC diagnostic push
0160 #pragma GCC diagnostic ignored "-Wdeprecated"
0161 constexpr std::string_view ActsPodioEdm::TrackState::typeName;
0162 #pragma GCC diagnostic pop
0163 #endif
0164
0165 #endif