8#ifndef FMTCOMPLEXYIELDHANDLER_Hm_included
9#define FMTCOMPLEXYIELDHANDLER_Hm_included
14#include <boost/serialization/serialization.hpp>
15#include <boost/serialization/nvp.hpp>
85 virtual operator std::string()
const;
127 virtual std::vector<std::string>
indexes(
const std::vector<std::string>& names)
const;
152 virtual bool pushData(
const std::string& yld,
const double& value);
166 virtual std::unique_ptr<FMTYieldHandler>
clone()
const;
205 virtual const FMTData&
at(
const std::string& yldname)
const;
242 friend class boost::serialization::access;
250 template<
class Archive>
251 void serialize(Archive& ar,
const unsigned int version)
253 ar& boost::serialization::make_nvp(
"FMTyieldhandler", boost::serialization::base_object<FMTYieldHandler>(*
this));
254 ar& BOOST_SERIALIZATION_NVP(m_elements);
256 std::map<std::string, FMTData, cmpYieldString>m_elements;
265 std::map<std::string, double> _getSources(
const std::map<std::string,
const std::unique_ptr<FMTYieldHandler>*>& srcdata,
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;
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);
299 std::vector<double>_getSourcesArray(
const std::map<std::string,
const std::unique_ptr<FMTYieldHandler>*>& srcdata,
310 std::unique_ptr<FMTYieldHandler>_toAgeYld(
const FMTYieldRequest& request,
311 const std::vector<std::string>& yieldnames,
const int& minage,
const int& maxage)
const;
329 double _getMultiply(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
347 double _getSubstract(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
356 double _getDivide(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
392 double _getEquation(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
401 double _getEndPoint(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
410 double _getDelta(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
419 double _getDistance(
const FMTData* p_data,
const std::string& p_yld,
const FMTYieldRequest& p_request)
const;
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;
#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