File indexing completed on 2025-02-21 09:58:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef DDCOND_CONDITIONSPOOL_H
0014 #define DDCOND_CONDITIONSPOOL_H
0015
0016
0017 #include "DD4hep/NamedObject.h"
0018 #include "DD4hep/ConditionsMap.h"
0019 #include "DDCond/ConditionsManager.h"
0020
0021
0022
0023
0024 namespace dd4hep {
0025
0026
0027 namespace cond {
0028
0029
0030 class ConditionsSlice;
0031 class ConditionsIOVPool;
0032 class ConditionDependency;
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054 class ConditionsPool : public NamedObject {
0055 protected:
0056
0057 ConditionsManager m_manager;
0058
0059 public:
0060 enum { AGE_NONE = 0,
0061 AGE_ANY = 9999999,
0062 AGE_EXPIRED = 12345678
0063 };
0064
0065 IOV* iov;
0066
0067 int age_value;
0068
0069 public:
0070
0071 void onRegister(Condition condition);
0072
0073 void onRemove(Condition condition);
0074
0075 public:
0076
0077 ConditionsPool(ConditionsManager mgr, IOV* iov);
0078
0079 virtual ~ConditionsPool();
0080
0081 void print() const;
0082
0083 void print(const std::string& opt) const;
0084
0085 virtual size_t size() const = 0;
0086
0087 virtual void clear() = 0;
0088
0089 virtual bool insert(Condition cond) = 0;
0090
0091 virtual void insert(RangeConditions& cond) = 0;
0092
0093 virtual Condition exists(Condition::key_type key) const = 0;
0094
0095 virtual size_t select(Condition::key_type key, RangeConditions& result) = 0;
0096
0097 virtual size_t select_all(RangeConditions& result) = 0;
0098
0099 virtual size_t select_all(const ConditionsSelect& predicate) = 0;
0100
0101 virtual size_t select_all(ConditionsPool& selection_pool) = 0;
0102 };
0103
0104
0105
0106
0107
0108
0109 class UpdatePool : public ConditionsPool {
0110
0111 public:
0112 typedef std::vector<Condition> ConditionEntries;
0113
0114 typedef std::map<const IOV*, ConditionEntries> UpdateEntries;
0115
0116 public:
0117
0118 UpdatePool(ConditionsManager mgr, IOV* iov);
0119
0120 virtual ~UpdatePool();
0121
0122 virtual size_t popEntries(UpdateEntries& entries) = 0;
0123
0124 virtual void select_range(Condition::key_type key,
0125 const IOV& req_validity,
0126 RangeConditions& result) = 0;
0127 };
0128
0129
0130
0131
0132
0133
0134 class UserPool : public ConditionsMap {
0135 public:
0136
0137 typedef std::map<Condition::key_type,const ConditionDependency*> Dependencies;
0138
0139 protected:
0140
0141 IOV m_iov;
0142
0143 ConditionsManager m_manager;
0144
0145 public:
0146
0147 enum {
0148 PRINT_NONE = 0,
0149 PRINT_INSERT = 1<<0,
0150 PRINT_CLEAR = 1<<1,
0151 PRINT_LOAD = 1<<2,
0152 PRINT_COMPUTE= 1<<3,
0153 PRINT_LAST
0154 };
0155
0156 unsigned int flags = 0;
0157
0158
0159 virtual bool insert(Condition condition) = 0;
0160
0161 public:
0162
0163 UserPool(ConditionsManager mgr);
0164
0165 virtual ~UserPool();
0166
0167 const IOV& validity() const { return m_iov; }
0168
0169 const IOV* validityPtr() const { return &m_iov; }
0170
0171 virtual void print(const std::string& opt) const = 0;
0172
0173 virtual size_t size() const = 0;
0174
0175 virtual void clear() = 0;
0176
0177 virtual bool exists(Condition::key_type key) const = 0;
0178
0179 virtual bool exists(const ConditionKey& key) const = 0;
0180
0181 virtual Condition get(Condition::key_type key) const = 0;
0182
0183 virtual Condition get(const ConditionKey& key) const = 0;
0184
0185 virtual bool remove(Condition::key_type hash_key) = 0;
0186
0187 virtual bool remove(const ConditionKey& key) = 0;
0188
0189
0190 virtual bool registerOne(const IOV& iov, Condition cond) = 0;
0191
0192 virtual size_t registerMany(const IOV& iov, const std::vector<Condition>& values) = 0;
0193
0194 template <typename CONT> size_t registerUnmapped(const IOV& iov, CONT& c) {
0195 std::vector<Condition> conditions;
0196 conditions.reserve(c.size());
0197 std::copy(std::begin(c), std::end(c), std::back_inserter(conditions));
0198 return this->registerMany(iov, conditions);
0199 }
0200
0201 template <typename CONT> size_t registerMapping(const IOV& iov, CONT& c) {
0202 std::vector<Condition> conditions;
0203 conditions.reserve(c.size());
0204 std::transform(std::begin(c), std::end(c), std::back_inserter(conditions), detail::get_2nd<CONT>());
0205 return this->registerMany(iov, conditions);
0206 }
0207
0208 virtual bool insert(DetElement detector, Condition::itemkey_type key, Condition condition) = 0;
0209
0210
0211 virtual Condition get(DetElement detector, Condition::itemkey_type key) const = 0;
0212
0213 virtual std::vector<Condition> get(Condition::key_type lower,
0214 Condition::key_type upper) const = 0;
0215
0216 virtual std::vector<Condition> get(DetElement detector,
0217 Condition::itemkey_type lower,
0218 Condition::itemkey_type upper) const = 0;
0219
0220
0221 virtual void scan(const Condition::Processor& processor) const = 0;
0222
0223 virtual void scan(Condition::key_type lower,
0224 Condition::key_type upper,
0225 const Condition::Processor& processor) const = 0;
0226
0227 virtual void scan(DetElement detector,
0228 Condition::itemkey_type lower,
0229 Condition::itemkey_type upper,
0230 const Condition::Processor& processor) const = 0;
0231
0232
0233 virtual ConditionsManager::Result prepare(const IOV& required,
0234 ConditionsSlice& slice,
0235 ConditionUpdateUserContext* user_param = 0) = 0;
0236
0237
0238 virtual ConditionsManager::Result load(const IOV& required_validity,
0239 ConditionsSlice& slice,
0240 ConditionUpdateUserContext* ctxt=0) = 0;
0241
0242 virtual ConditionsManager::Result compute(const IOV& required_validity,
0243 ConditionsSlice& slice,
0244 ConditionUpdateUserContext* ctxt=0) = 0;
0245
0246
0247 virtual size_t compute(const Dependencies& dependencies,
0248 ConditionUpdateUserContext* user_param,
0249 bool force) = 0;
0250 };
0251 }
0252 }
0253 #endif