FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WakeRegistry.h
1#pragma once
4
5#include <marenv/marenv.h>
6#include <marenv/wake/JetField.h>
7#include <marenv/wake/WakeField.h>
8#include <marenv/wake/WakeSelection.h>
9
10#include <array>
11#include <cstdint>
12#include <memory>
13#include <span>
14#include <string>
15#include <utility>
16#include <vector>
17
18namespace marenv::wake
19{
47{
48public:
55 void Add(const std::string& id, std::shared_ptr<WakeField> field);
56
63 void AddJet(const std::string& id, std::shared_ptr<JetField> field);
64
68 std::shared_ptr<JetField> GetJet(const std::string& id) const;
69
73 void Remove(const std::string& id);
74
76 bool Has(const std::string& id) const;
77
81 std::shared_ptr<WakeField> Get(const std::string& id) const;
82
84 std::vector<std::string> Ids() const;
85
87 std::vector<std::string> JetIds() const;
88
105 WakeSelection Select(const WakeQueryRegion& region, const WakeQuery& query = {}, const WaterVelocityParts& parts = {}) const;
106
115 WakeComposition Compose(double time, const double pos[3], const WakeQuery& query = {}, const WaterVelocityParts& parts = {}) const;
116
130 void ComposeMany(double time, std::span<const std::array<double, 3>> positions, const WakeQuery& query, std::span<WakeComposition> out, const WaterVelocityParts& parts = {}) const;
131
139 std::uint64_t Revision() const;
140
146 bool StaticFrom(double t) const;
147
148private:
149 using Entry = std::pair<std::string, std::shared_ptr<WakeField>>;
150 using JetEntry = std::pair<std::string, std::shared_ptr<JetField>>;
151
152 std::vector<Entry>::const_iterator Find(const std::string& id) const;
153
154 std::vector<JetEntry>::const_iterator FindJet(const std::string& id) const;
155
157 bool IsTaken(const std::string& id) const;
158
159 std::vector<Entry> m_fields;
160 std::vector<JetEntry> m_jets;
161 std::vector<const WakeField*> m_fieldPointers;
162 std::vector<const JetField*> m_jetPointers;
163 std::uint64_t m_registrations = 0;
164};
165
166} // namespace marenv::wake
Definition WakeRegistry.h:47
std::vector< std::string > JetIds() const
The identifiers of the jet fields (AddJet()), in registration order.
void Add(const std::string &id, std::shared_ptr< WakeField > field)
std::shared_ptr< JetField > GetJet(const std::string &id) const
bool StaticFrom(double t) const
std::uint64_t Revision() const
bool Has(const std::string &id) const
Whether a wake field is registered under id.
std::vector< std::string > Ids() const
The identifiers in registration order.
WakeSelection Select(const WakeQueryRegion &region, const WakeQuery &query={}, const WaterVelocityParts &parts={}) const
std::shared_ptr< WakeField > Get(const std::string &id) const
void AddJet(const std::string &id, std::shared_ptr< JetField > field)
void ComposeMany(double time, std::span< const std::array< double, 3 > > positions, const WakeQuery &query, std::span< WakeComposition > out, const WaterVelocityParts &parts={}) const
void Remove(const std::string &id)
WakeComposition Compose(double time, const double pos[3], const WakeQuery &query={}, const WaterVelocityParts &parts={}) const
Definition WakeSelection.h:119
Policy mixin: this type is neither copyable nor movable.
Definition marenv.h:96
Definition WaterVelocity.h:33
Definition WakeTypes.h:138
Definition WakeField.h:23
Definition WakeSelection.h:33