| 238 | // --------------------------------------------------------------------------- |
| 239 | |
| 240 | Expected<TimeDomainId> DataEngine::createTimeDomain(std::string name, TimeDomainId requested_id) { |
| 241 | std::unique_lock<std::recursive_mutex> lock(impl_->mutex_); |
| 242 | TimeDomainId id = requested_id != 0 ? requested_id : impl_->next_time_domain_id; |
| 243 | if (requested_id != 0) { |
| 244 | if (impl_->time_domains.find(requested_id) != impl_->time_domains.end()) { |
| 245 | return PJ::unexpected(fmt::format("Time domain {} already exists", requested_id)); |
| 246 | } |
| 247 | if (impl_->next_time_domain_id <= id) { |
| 248 | impl_->next_time_domain_id = id + 1; |
| 249 | } |
| 250 | } else { |
| 251 | ++impl_->next_time_domain_id; |
| 252 | } |
| 253 | TimeDomain td; |
| 254 | td.id = id; |
| 255 | td.name = std::move(name); |
| 256 | impl_->time_domains.emplace(id, std::move(td)); |
| 257 | return id; |
| 258 | } |
| 259 | |
| 260 | const TimeDomain* DataEngine::getTimeDomain(TimeDomainId id) const { |
| 261 | auto it = impl_->time_domains.find(id); |