Skip to content
Snippets Groups Projects
Commit c07d2b19 authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

[skip ci] ideas on composite..

parent 1a45fd7d
No related branches found
No related tags found
1 merge request!448Draft: Resolve "Implementation of new nodes creation"
Pipeline #12148 skipped
...@@ -53,13 +53,7 @@ class SpecStateSensor : public SpecState ...@@ -53,13 +53,7 @@ class SpecStateSensor : public SpecState
std::string print(const std::string& _spaces = "") const override; std::string print(const std::string& _spaces = "") const override;
}; };
class SpecSensorComposite : public SpecCompositeTemplate<SpecStateSensor> typedef TemplateComposite<SpecStateSensor> SpecSensorComposite;
{
public:
using SpecCompositeTemplate::SpecCompositeTemplate;
SpecComposite getSpecComposite() const;
};
inline bool SpecStateSensor::isDynamic() const { return dynamic_; } inline bool SpecStateSensor::isDynamic() const { return dynamic_; }
......
...@@ -65,27 +65,38 @@ class SpecState ...@@ -65,27 +65,38 @@ class SpecState
virtual std::string print(const std::string& _spaces = "") const; virtual std::string print(const std::string& _spaces = "") const;
}; };
template <typename SPEC> template <typename T>
class SpecCompositeTemplate : public std::unordered_map<char, SPEC> class TemplateComposite : public std::unordered_map<char, T>
{ {
public: public:
using unordered_map<char, SPEC>::unordered_map; using unordered_map<char, T>::unordered_map;
SpecCompositeTemplate(const YAML::Node& _n); TemplateComposite(const YAML::Node& _n);
virtual ~SpecCompositeTemplate() = default; virtual ~TemplateComposite() = default;
VectorComposite getState() const; VectorComposite getState() const;
void emplace(char _key, const SPEC& _spec); template <typename OTHER_T>
TemplateComposite<OTHER_T> cast() const
{
TemplateComposite<OTHER_T> casted_composite;
for (auto pair : *this)
{
casted_composite.emplace(pair.first, static_cast<OTHER_T>(pair.second));
}
return casted_composite;
}
void emplace(char _key, const T& _spec);
std::string print() const; std::string print() const;
}; };
typedef SpecCompositeTemplate<SpecState> SpecComposite; typedef TemplateComposite<SpecState> SpecComposite;
template <typename SPEC> template <typename T>
SpecCompositeTemplate<SPEC>::SpecCompositeTemplate(const YAML::Node& _n) TemplateComposite<T>::TemplateComposite(const YAML::Node& _n)
{ {
if (not _n.IsMap()) if (not _n.IsMap())
{ {
...@@ -93,18 +104,18 @@ SpecCompositeTemplate<SPEC>::SpecCompositeTemplate(const YAML::Node& _n) ...@@ -93,18 +104,18 @@ SpecCompositeTemplate<SPEC>::SpecCompositeTemplate(const YAML::Node& _n)
} }
for (auto spec_pair : _n) for (auto spec_pair : _n)
{ {
this->emplace(spec_pair.first.as<char>(), SPEC(spec_pair.second)); this->emplace(spec_pair.first.as<char>(), T(spec_pair.second));
} }
} }
template <typename SPEC> template <typename T>
void SpecCompositeTemplate<SPEC>::emplace(char _key, const SPEC& _spec) void TemplateComposite<T>::emplace(char _key, const T& _spec)
{ {
this->insert({_key,_spec}); this->insert({_key,_spec});
} }
template <typename SPEC> template <typename T>
VectorComposite SpecCompositeTemplate<SPEC>::getState() const VectorComposite TemplateComposite<T>::getState() const
{ {
VectorComposite states; VectorComposite states;
for (auto spec_pair : *this) for (auto spec_pair : *this)
...@@ -114,8 +125,14 @@ VectorComposite SpecCompositeTemplate<SPEC>::getState() const ...@@ -114,8 +125,14 @@ VectorComposite SpecCompositeTemplate<SPEC>::getState() const
return states; return states;
} }
template <typename SPEC> // template <typename T, typename OTHER_T>
std::string SpecCompositeTemplate<SPEC>::print() const // TemplateComposite<OTHER_T> TemplateComposite<T>::cast() const
// {
// return TemplateComposite<OTHER_T>();
// }
template <typename T>
std::string TemplateComposite<T>::print() const
{ {
std::string output; std::string output;
......
...@@ -73,6 +73,10 @@ SensorBase::SensorBase(const std::string& _type, ...@@ -73,6 +73,10 @@ SensorBase::SensorBase(const std::string& _type,
if (prior.isDynamic()) if (prior.isDynamic())
setDriftStd(key, prior.getDriftStd()); setDriftStd(key, prior.getDriftStd());
} }
WOLF_INFO(_priors.print());
auto base_prior = _priors.cast<SpecState>();
WOLF_INFO(base_prior.print());
} }
SensorBase::~SensorBase() SensorBase::~SensorBase()
......
...@@ -27,19 +27,6 @@ ...@@ -27,19 +27,6 @@
namespace wolf namespace wolf
{ {
SpecComposite SpecSensorComposite::getSpecComposite() const
{
SpecComposite spec_composite;
for (auto spec_sensor_pair : *this)
{
spec_composite.emplace(spec_sensor_pair.first, SpecState(spec_sensor_pair.second.getType(),
spec_sensor_pair.second.getState(),
spec_sensor_pair.second.getMode(),
spec_sensor_pair.second.getNoiseStd()));
}
return spec_composite;
}
SpecStateSensor::SpecStateSensor(const std::string& _type, SpecStateSensor::SpecStateSensor(const std::string& _type,
const Eigen::VectorXd& _state, const Eigen::VectorXd& _state,
const std::string& _mode, const std::string& _mode,
......
...@@ -57,10 +57,13 @@ HasStateBlocks::HasStateBlocks(const SpecComposite& _specs) ...@@ -57,10 +57,13 @@ HasStateBlocks::HasStateBlocks(const SpecComposite& _specs)
StateBlockPtr HasStateBlocks::addStateBlock(const char& _sb_key, const StateBlockPtr& _sb, ProblemPtr _problem) StateBlockPtr HasStateBlocks::addStateBlock(const char& _sb_key, const StateBlockPtr& _sb, ProblemPtr _problem)
{ {
assert(state_block_map_.count(_sb_key) == 0 && state_block_const_map_.count(_sb_key) == 0 && "Trying to add a state block with an existing type! Use setStateBlock instead."); assert(state_block_map_.count(_sb_key) == 0 and
state_block_const_map_.count(_sb_key) == 0 and
"Trying to add a state block with an existing type! Use setStateBlock instead.");
state_block_map_.emplace(_sb_key, _sb); state_block_map_.emplace(_sb_key, _sb);
state_block_const_map_.emplace(_sb_key, _sb); state_block_const_map_.emplace(_sb_key, _sb);
if (!isInStructure(_sb_key)) if (not isInStructure(_sb_key))
appendToStructure(_sb_key); appendToStructure(_sb_key);
// conditionally register to problem // conditionally register to problem
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment