FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTMaskFilter.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 FMTMASKFILTER_Hm_included
9#define FMTMASKFILTER_Hm_included
10
11
12#include <boost/dynamic_bitset.hpp>
13#include <boost/serialization/serialization.hpp>
14#include <boost/serialization/nvp.hpp>
15#include <vector>
16#include <boost/functional/hash.hpp>
17#include "FMTutility.h"
18
19
20namespace Core
21{
22 class FMTMask;
23 class FMTTheme;
24
25
26// DocString: FMTMaskFilter
31 {
32 public:
33 // DocString: FMTMaskFilter()
38 // DocString: ~FMTMaskFilter()
42 virtual ~FMTMaskFilter()=default;
43 // DocString: FMTMaskFilter(const FMTMaskFilter&)
49 // DocString: FMTMaskFilter::operator=
55 FMTMaskFilter& operator = (const FMTMaskFilter& rhs);
56 // DocString: FMTMaskFilter(const FMTMask&, const FMTMask&)
62 FMTMaskFilter(const FMTMask& presolveselection, const FMTMask& buffermask);
63 // DocString: FMTMaskFilter(const FMTMask&)
68 FMTMaskFilter(const FMTMask& presolveselection);
69 // DocString: FMTMaskFilter(std::vector<FMTMask>&)
74 FMTMaskFilter(std::vector<FMTMask>& masks);
75 // DocString: FMTMaskFilter(std::vector<FMTMask>&,const std::vector<FMTTheme>&)
81 FMTMaskFilter(std::vector<FMTMask>& masks,const std::vector<FMTTheme>& themes);
82 // DocString: FMTMaskFilter::filter
88 FMTMask filter(const FMTMask& devmask) const;
89 // DocString: FMTMaskFilter::swap
94 void swap(FMTMaskFilter& rhs);
95 // DocString: FMTMaskFilter::preSolve
101 FMTMaskFilter preSolve(const std::vector<FMTTheme>& themes) const;
102 // DocString: FMTMaskFilter::canPreSolve
109 bool canPreSolve(const FMTMask& mask, const std::vector<const Core::FMTTheme*>& themes) const;
110 // DocString: FMTMaskFilter::getSelectedThemes
116 std::vector<const Core::FMTTheme*> getSelectedThemes(const std::vector<Core::FMTTheme>& themes) const;
117 // DocString: FMTMaskFilter::emptyFlipped
122 inline bool emptyFlipped() const
123 {
124 return flippedselection.empty();
125 }
126 // DocString: FMTMaskFilter::empty
131 inline bool empty() const
132 {
133 return selection.empty();
134 }
135 // DocString: FMTMaskFilter::hash
140 inline size_t hash() const
141 {
142 return (boost::hash<boost::dynamic_bitset<uint8_t>>()(selection) ^ boost::hash<boost::dynamic_bitset<uint8_t>>()(flippedselection));
143 }
144 protected:
145 /*boost::dynamic_bitset<> fullset;*/
146 boost::dynamic_bitset<uint8_t> selection;
147 boost::dynamic_bitset<uint8_t> flippedselection;
148 //std::vector<size_t>index;
149 private:
150 friend class boost::serialization::access;
151 friend class FMTTheme;
152 friend class FMTMask;
153 // DocString: FMTMaskFilter::serialize
160 template<class Archive>
161 void serialize(Archive& ar, const unsigned int version)
162 {
163 /*ar & BOOST_SERIALIZATION_NVP(fullset);*/
164 ar & BOOST_SERIALIZATION_NVP(selection);
165 ar & BOOST_SERIALIZATION_NVP(flippedselection);
166 //ar & BOOST_SERIALIZATION_NVP(index);
167 }
168 };
169
170
171
172}
173
174namespace boost {
175
176 template <>
177 struct hash<Core::FMTMaskFilter>
178 {
179 std::size_t operator()(const Core::FMTMaskFilter& filter) const
180 {
181
182 return (filter.hash());
183 }
184 };
185
186
187}
188
189#endif // FMTMASKFILTER_Hm_included
#define FMTEXPORT
Definition: FMTutility.h:125
Filter built from masks used to preSolve and postsolve FMTMask objects.
Definition: FMTMaskFilter.h:31
boost::dynamic_bitset< uint8_t > flippedselection
Definition: FMTMaskFilter.h:147
FMTMaskFilter preSolve(const std::vector< FMTTheme > &themes) const
Return a presolved copy of the filter.
FMTMaskFilter(const FMTMask &presolveselection)
Construct a filter from a preSolve selection mask.
bool canPreSolve(const FMTMask &mask, const std::vector< const Core::FMTTheme * > &themes) const
Return true if the mask can be presolved with the filter.
boost::dynamic_bitset< uint8_t > selection
Definition: FMTMaskFilter.h:146
bool empty() const
Return true if the selection is empty.
Definition: FMTMaskFilter.h:131
void swap(FMTMaskFilter &rhs)
Swap this filter with another.
FMTMaskFilter(const FMTMaskFilter &rhs)
Copy constructor for FMTMaskFilter.
size_t hash() const
Return the hash of the filter.
Definition: FMTMaskFilter.h:140
std::vector< const Core::FMTTheme * > getSelectedThemes(const std::vector< Core::FMTTheme > &themes) const
Return the themes selected by the filter.
FMTMaskFilter(std::vector< FMTMask > &masks, const std::vector< FMTTheme > &themes)
Construct a filter from a vector of masks and the themes.
FMTMask filter(const FMTMask &devmask) const
Filter a development mask.
bool emptyFlipped() const
Return true if the flipped selection is empty.
Definition: FMTMaskFilter.h:122
virtual ~FMTMaskFilter()=default
Default virtual destructor for FMTMaskFilter.
FMTMaskFilter(std::vector< FMTMask > &masks)
Construct a filter from a vector of masks.
FMTMaskFilter()
Default constructor for FMTMaskFilter.
FMTMaskFilter(const FMTMask &presolveselection, const FMTMask &buffermask)
Construct a filter from a preSolve selection mask and a buffer mask.
Core class holding, as a boost dynamic bitset, which theme attributes are part of a mask.
Definition: FMTMask.h:96
Class holding the attributes and aggregates of a single theme, describing a part of a FMTMask.
Definition: FMTTheme.h:47
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
Definition: FMTAction.h:463
std::size_t operator()(const Core::FMTMaskFilter &filter) const
Definition: FMTMaskFilter.h:179