FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTData.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 FMTDATA_Hm_included
9#define FMTDATA_Hm_included
10
11
12#include <vector>
13#include <string>
14#include <map>
15#include "FMTutility.h"
16#include <boost/serialization/serialization.hpp>
17#include <boost/serialization/nvp.hpp>
18#include <boost/serialization/map.hpp>
19#include <boost/serialization/vector.hpp>
20#include <boost/serialization/binary_object.hpp>
21#include <boost/serialization/export.hpp>
22#include <memory>
23
24namespace Core
25{
26class FMTDevelopment;
27class FMTYieldRequest;
28class FMTExpression;
29class FMTMask;
30
31// DocString: FMTData
36 {
37 public:
38 std::vector<double> data;
39 // DocString: FMTData()
44 // DocString: ~FMTData()
48 ~FMTData()=default;
49 // DocString: FMTData(const FMTData&)
54 FMTData(const FMTData& rhs);
55 // DocString: FMTData(const std::vector<double>&,const FMTyieldparserop&,const std::vector<std::string>&)
62 FMTData(const std::vector<double>& lvalues,
63 const FMTyieldparserop& lops,
64 const std::vector<std::string>& lsource);
65 // DocString: FMTData(const std::vector<double>&,const FMTyieldparserop&,const std::vector<std::string>&,const std::vector<bool>&)
73 FMTData(const std::vector<double>& lvalues,
74 const FMTyieldparserop& lops,
75 const std::vector<std::string>& lsource,
76 const std::vector<bool>& varstack);
77 // DocString: FMTData::operator=
83 FMTData& operator = (const FMTData& rhs);
84 // DocString: FMTData::getOp
90 // DocString: FMTData::clearCache
94 void clearCache();
95 // DocString: FMTData::constant
100 bool constant() const;
101 // DocString: FMTData::nullData
106 bool nullData() const;
107 // DocString: FMTData::cacheValue
113 bool cacheValue(const FMTYieldRequest& request) const;
114 // DocString: FMTData::get
120 double get(const FMTYieldRequest& request) const;
121 // DocString: FMTData::set
128 void set(const double& value, const FMTYieldRequest& request, const bool& age_only) const;
129 // DocString: FMTData::getSources
134 std::vector<const std::string*> getSources() const;
135 // DocString: FMTData::getSourcesCopy
140 std::vector<std::string> getSourcesCopy() const;
141 // DocString: FMTData::getValues
146 std::vector<const double*>getValues() const;
147 //std::vector<double>tovalues(const std::map<std::string, double>& sources) const;
148 // DocString: FMTData::toExpression
154 // DocString: FMTData::operator==
160 bool operator == (const FMTData& rhs) const;
161 // DocString: FMTData::operator std::string
166 operator std::string() const;
167 // DocString: FMTData::operator*
173 FMTData operator * (const double& factor) const;
174 private:
175 friend class boost::serialization::access;
176 // DocString: FMTData::serialize
183 template<class Archive>
184 void serialize(Archive& ar, const unsigned int version)
185 {
186 ar& BOOST_SERIALIZATION_NVP(ops);
187 ar& BOOST_SERIALIZATION_NVP(source);
188 ar& BOOST_SERIALIZATION_NVP(stacking);
189 ar& BOOST_SERIALIZATION_NVP(data);
190 }
192 std::vector<std::string>source;
193 std::vector<bool>stacking;//Stacking a string = true stacking a number = false
194 //mutable std::unique_ptr<boost::unordered_map<FMTDevelopment,double>> _cache; //hash base on (age and/or period and/or mask) //only for complex yield!!!!
195 mutable std::unique_ptr<std::map<FMTDevelopment, double>> _cache; //hash base on (age and/or period and/or mask) //only for complex yield!!!!
196 mutable bool _agebase;
197 //size_t hashdata(const int& period, const int& age, const FMTMask& mask) const;
198 // DocString: FMTData::getSummaryDevelopment
204 FMTDevelopment getSummaryDevelopment(const FMTYieldRequest& request) const;
205 // DocString: FMTData::allocateCache
209 void allocateCache() const;
210 // DocString: FMTData::deAllocateCache
214 void deAllocateCache() const;
215 };
216}
217
218BOOST_CLASS_EXPORT_KEY(Core::FMTData)
219
220
221#endif // FMTDATA_Hm_included
#define FMTEXPORT
Definition: FMTutility.h:125
Data of a yield holding the values, sources and operators used to compute complex yields.
Definition: FMTData.h:36
FMTExpression toExpression() const
Convert the data to an FMTExpression.
std::vector< const std::string * > getSources() const
Return pointers to the sources of the data.
std::vector< double > data
Definition: FMTData.h:38
void set(const double &value, const FMTYieldRequest &request, const bool &age_only) const
Cache the value of the data for a yield request.
bool cacheValue(const FMTYieldRequest &request) const
Return true if the value for a yield request is cached.
std::vector< std::string > getSourcesCopy() const
Return a copy of the sources of the data.
double get(const FMTYieldRequest &request) const
Get the value of the data for a yield request.
~FMTData()=default
Default destructor for FMTData.
FMTData(const std::vector< double > &lvalues, const FMTyieldparserop &lops, const std::vector< std::string > &lsource, const std::vector< bool > &varstack)
Construct a FMTData from values, an operator, sources and a stacking.
bool nullData() const
Return true if the data is null.
std::vector< const double * > getValues() const
Return pointers to the values of the data.
FMTyieldparserop getOp() const
Return the yield parser operator of the data.
FMTData()
Default constructor for FMTData.
FMTData(const FMTData &rhs)
Copy constructor for FMTData.
FMTData(const std::vector< double > &lvalues, const FMTyieldparserop &lops, const std::vector< std::string > &lsource)
Construct a FMTData from values, an operator and sources.
void clearCache()
Clear the cached values of the data.
bool constant() const
Return true if the data is constant.
Base class of FMTActualDevelopment and FMTFuturDevelopment representing a forest stand.
Definition: FMTDevelopment.h:44
Mathematical expression evaluated with the shunting yard algorithm, used in yields and outputs.
Definition: FMTExpression.h:23
Request for yield values using a development and optionally a graph vertex.
Definition: FMTYieldRequest.h:37
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
FMTyieldparserop
Enumerator describing the operators usable in the yield section.
Definition: FMTutility.h:74