FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTComplexYieldHandler.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019 Gouvernement du Québec
3
4SPDX-License-Identifier: LiLiQ-R-1.1
5License-Filename: LICENSES/EN/LiLiQ-R11unicode.txt
6*/
7
8#ifndef FMTCOMPLEXYIELDHANDLER_Hm_included
9#define FMTCOMPLEXYIELDHANDLER_Hm_included
10
11#include "FMTYieldHandler.h"
12#include "FMTData.h"
13#include <string>
14#include <boost/serialization/serialization.hpp>
15#include <boost/serialization/nvp.hpp>
16#include "FMTYieldsCache.h"
17#include <memory>
18
19namespace Core
20{
21 // DocString: FMTComplexYieldHandler
26 {
27 public:
28 // DocString: FMTComplexYieldHandler::setTabou(const size_t&)
33 void setTabou(const size_t& index);
34 // DocString: FMTComplexYieldHandler::setTabou(const FMTComplexYieldHandler&)
40 // DocString: FMTComplexYieldHandler::getTabous
45 std::vector<size_t>getTabous() const override;
46 // DocString: FMTComplexYieldHandler::setOverrideIndex
51 virtual void setOverrideIndex(const size_t& newindex);
52 // DocString: FMTComplexYieldHandler::getOverrideIndex
57 virtual size_t getOverrideIndex() const;
58 // DocString: FMTComplexYieldHandler::getLastBase
63 virtual int getLastBase() const;
64 // DocString: FMTComplexYieldHandler::get
71 virtual double get(const std::string& yld, const FMTYieldRequest& request) const;
72 // DocString: FMTComplexYieldHandler::compareSources
79 bool compareSources(const std::string& yield,const FMTComplexYieldHandler& overridedyield) const;
80 // DocString: FMTComplexYieldHandler::operator std::string
85 virtual operator std::string() const;
86 // DocString: ~FMTComplexYieldHandler()
91 // DocString: FMTComplexYieldHandler()
96 // DocString: FMTComplexYieldHandler(const FMTComplexYieldHandler&)
102 // DocString: FMTComplexYieldHandler::operator=
108 FMTComplexYieldHandler& operator = (const FMTComplexYieldHandler& rhs) = default;
109 // DocString: FMTComplexYieldHandler(const FMTMask&)
115 // DocString: FMTComplexYieldHandler::getDataElements
120 const std::map<std::string, FMTData,cmpYieldString>& getDataElements() const;
121 // DocString: FMTComplexYieldHandler::indexes
127 virtual std::vector<std::string> indexes(const std::vector<std::string>& names) const;
128 // DocString: FMTComplexYieldHandler::getPeak
136 virtual double getPeak(const FMTYieldRequest& request, const std::string& yld, const int& targetage) const;
137 // DocString: FMTComplexYieldHandler::complexYldToAgeYld
144 std::unique_ptr<FMTYieldHandler>complexYldToAgeYld(const FMTYieldRequest& request, const FMTSpec& lspec) const;
145 // DocString: FMTComplexYieldHandler::pushData(const std::string&, const double&)
152 virtual bool pushData(const std::string& yld, const double& value);
153 // DocString: FMTComplexYieldHandler::pushData(const std::string&, const FMTData&)
160 virtual bool pushData(const std::string& yld, const FMTData& data);
161 // DocString: FMTComplexYieldHandler::clone
166 virtual std::unique_ptr<FMTYieldHandler>clone() const;
167 // DocString: FMTComplexYieldHandler::operator==
173 virtual bool operator == (const FMTComplexYieldHandler& rhs) const;
174 // DocString: FMTComplexYieldHandler::empty
179 virtual bool empty() const;
180 // DocString: FMTComplexYieldHandler::size
185 virtual size_t size() const;
186 // DocString: FMTComplexYieldHandler::getType
191 virtual FMTyldtype getType() const;
192 // DocString: FMTComplexYieldHandler::operator[]
198 virtual FMTData& operator[](const std::string& yldname);
199 // DocString: FMTComplexYieldHandler::at
205 virtual const FMTData& at(const std::string& yldname) const;
206 // DocString: FMTComplexYieldHandler::containsYield
212 virtual bool containsYield(const std::string& yldname) const;
213 // DocString: FMTComplexYieldHandler::getYieldNames
218 virtual std::vector<std::string>getYieldNames() const;
219 // DocString: FMTComplexYieldHandler::clearCache
223 virtual void clearCache();
224 // DocString: FMTComplexYieldHandler::getAge
231 virtual int getAge(const FMTYieldRequest& request, const FMTSpec& spec) const;
232 // DocString: FMTComplexYieldHandler::getYieldLinearValue
240 virtual double getYieldLinearValue(const std::string& yldname, const FMTYieldRequest& request, bool allowoutofrange=true) const;
241 private:
242 friend class boost::serialization::access;
243 // DocString: FMTComplexYieldHandler::serialize
250 template<class Archive>
251 void serialize(Archive& ar, const unsigned int version)
252 {
253 ar& boost::serialization::make_nvp("FMTyieldhandler", boost::serialization::base_object<FMTYieldHandler>(*this));
254 ar& BOOST_SERIALIZATION_NVP(m_elements);
255 }
256 std::map<std::string, FMTData, cmpYieldString>m_elements;
257 // DocString: FMTComplexYieldHandler::_getSources
265 std::map<std::string, double> _getSources(const std::map<std::string, const std::unique_ptr<FMTYieldHandler>*>& srcdata,
266 const FMTYieldRequest& request, bool& age_only) const;
267
268 // DocString: FMTComplexYieldHandler::_getData
276 std::vector<const std::unique_ptr<FMTYieldHandler>*>_getData(const FMTYieldRequest& request,
277 const std::vector<const std::string*>& names, const std::string& original) const;
278
279 // DocString: FMTComplexYieldHandler::_toMap
287 static std::map<std::string, double>_toMap(const FMTYieldRequest& p_request,
288 const std::vector<const std::string*>& p_names,
289 const std::vector<const std::unique_ptr<FMTYieldHandler>*>& p_data);
290
291 // DocString: FMTComplexYieldHandler::_getSourcesArray
299 std::vector<double>_getSourcesArray(const std::map<std::string, const std::unique_ptr<FMTYieldHandler>*>& srcdata,
300 const FMTYieldRequest& request, bool& age_only) const;
301 // DocString: FMTComplexYieldHandler::_toAgeYld
310 std::unique_ptr<FMTYieldHandler>_toAgeYld(const FMTYieldRequest& request,
311 const std::vector<std::string>& yieldnames, const int& minage, const int& maxage) const;
312 // DocString: FMTComplexYieldHandler::_getRange
320 double _getRange(const FMTData* p_data,const std::string& p_yld, const FMTYieldRequest& p_request) const;
321 // DocString: FMTComplexYieldHandler::_getMultiply
329 double _getMultiply(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
330 // DocString: FMTComplexYieldHandler::_getSum
338 double _getSum(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
339 // DocString: FMTComplexYieldHandler::_getSubstract
347 double _getSubstract(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
348 // DocString: FMTComplexYieldHandler::_getDivide
356 double _getDivide(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
357 // DocString: FMTComplexYieldHandler::_getYTP
365 double _getYTP(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
366 // DocString: FMTComplexYieldHandler::_getMAI
374 double _getMAI(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
375 // DocString: FMTComplexYieldHandler::_getCAI
383 double _getCAI(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
384 // DocString: FMTComplexYieldHandler::_getEquation
392 double _getEquation(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
393 // DocString: FMTComplexYieldHandler::_getEndPoint
401 double _getEndPoint(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
402 // DocString: FMTComplexYieldHandler::_getDelta
410 double _getDelta(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
411 // DocString: FMTComplexYieldHandler::_getDistance
419 double _getDistance(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
420 // DocString: FMTComplexYieldHandler::_getMax
428 double _getMax(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
429 // DocString: FMTComplexYieldHandler::_getMin
437 double _getMin(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
438 // DocString: FMTComplexYieldHandler::_getShift
446 double _getShift(const FMTData* p_data, const std::string& p_yld, const FMTYieldRequest& p_request) const;
447 std::unordered_set<size_t>m_overridetabou;
448 size_t m_overrideindex;
449 mutable FMTYieldsCache _cache;
450 };
451
452}
453
454#endif
455
456
#define FMTEXPORT
Definition: FMTutility.h:125
Yield handler for complex yields computed from other yields using operators, as seen in the yield sec...
Definition: FMTComplexYieldHandler.h:26
virtual void clearCache()
Clear the cache of the handler.
virtual std::vector< std::string > getYieldNames() const
Return the yield names of the handler.
virtual double getPeak(const FMTYieldRequest &request, const std::string &yld, const int &targetage) const
Return the peak value of a yield for a request.
virtual std::unique_ptr< FMTYieldHandler > clone() const
Clone the complex yield handler.
virtual int getAge(const FMTYieldRequest &request, const FMTSpec &spec) const
Return the age of a development from a request and a specification.
virtual const FMTData & at(const std::string &yldname) const
Access the data of a yield.
virtual FMTData & operator[](const std::string &yldname)
Access the data of a yield.
bool compareSources(const std::string &yield, const FMTComplexYieldHandler &overridedyield) const
Compare the sources of a yield with those of an overriding handler.
virtual std::vector< std::string > indexes(const std::vector< std::string > &names) const
Return the yield names that are indexes among the given names.
FMTComplexYieldHandler(const FMTMask &p_mask)
Construct a complex yield handler from a mask.
FMTComplexYieldHandler()
Default constructor for FMTComplexYieldHandler.
virtual double getYieldLinearValue(const std::string &yldname, const FMTYieldRequest &request, bool allowoutofrange=true) const
Return the linearly interpolated value of a yield for a request.
~FMTComplexYieldHandler()
Destructor for FMTComplexYieldHandler.
virtual bool empty() const
Return true if the handler is empty.
void setTabou(const FMTComplexYieldHandler &rhs)
Copy the tabou set from another complex yield handler.
virtual size_t getOverrideIndex() const
Return the override index of the handler.
virtual FMTyldtype getType() const
Return the type of the yield handler.
virtual bool containsYield(const std::string &yldname) const
Return true if the handler contains a given yield.
std::vector< size_t > getTabous() const override
Return the tabou indexes of the handler.
virtual bool pushData(const std::string &yld, const double &value)
Push a value for a yield.
virtual size_t size() const
Return the number of yields in the handler.
virtual double get(const std::string &yld, const FMTYieldRequest &request) const
Get the value of a yield for a request.
FMTComplexYieldHandler(const FMTComplexYieldHandler &rhs)=default
Copy constructor for FMTComplexYieldHandler.
std::unique_ptr< FMTYieldHandler > complexYldToAgeYld(const FMTYieldRequest &request, const FMTSpec &lspec) const
Convert the complex yield to an age yield handler for a request and specification.
virtual int getLastBase() const
Return the last base age of the handler.
virtual void setOverrideIndex(const size_t &newindex)
Set the override index of the handler.
virtual bool pushData(const std::string &yld, const FMTData &data)
Push data for a yield.
void setTabou(const size_t &index)
Add an override index to the tabou set.
const std::map< std::string, FMTData, cmpYieldString > & getDataElements() const
Return the data elements of the handler.
Data of a yield holding the values, sources and operators used to compute complex yields.
Definition: FMTData.h:36
Core class holding, as a boost dynamic bitset, which theme attributes are part of a mask.
Definition: FMTMask.h:96
Base class for yield handlers, holding a mask and the base ages of the yields.
Definition: FMTYieldHandler.h:80
Request for yield values using a development and optionally a graph vertex.
Definition: FMTYieldRequest.h:37
Cache of yield values keyed by development and yield name.
Definition: FMTYieldsCache.h:28
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
FMTyldtype
Enumerator describing the type of a yield (age, time, complex, model).
Definition: FMTutility.h:62