Rev 35 | Rev 39 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | |||
33 | Werner | 2 | #ifndef STAMPCONTAINER_H |
3 | #define STAMPCONTAINER_H |
||
4 | |||
5 | #include "stamp.h" |
||
6 | #include "grid.h" |
||
7 | |||
8 | /** Collection of @class Stamp for one tree species. |
||
9 | Per species several stamps are stored (different BHD, different HD relations). This class |
||
10 | encapsulates storage and access to these stamps. The design goal is to deliver high |
||
38 | Werner | 11 | access speeds for the "stamp()" method. |
33 | Werner | 12 | Use getStamp(bhd, hd) or getStamp(bhd, height) to access. */ |
13 | class StampContainer |
||
14 | { |
||
15 | public: |
||
16 | StampContainer(); |
||
17 | ~StampContainer(); |
||
18 | void useLookup(const bool use) { m_useLookup = use; } |
||
19 | /// addStamp() add a pre-allocated stamp @param stamp to internal collection. Caller must allocate stamp on the heap, |
||
20 | /// freeing is done by this class. |
||
21 | int addStamp(Stamp* stamp, const float bhd, const float hd_value); |
||
38 | Werner | 22 | const Stamp* stamp(const float bhd_cm, const float height_m); |
33 | Werner | 23 | /// save the content of the StampContainer to the output stream (binary encoding) |
24 | void save(QDataStream &out); |
||
34 | Werner | 25 | /// load the content of the StampContainer to the output stream (binary encoding) |
33 | Werner | 26 | void load(QDataStream &in); |
34 | Werner | 27 | |
28 | /** factory creation function for stamps of different size. |
||
29 | newStamp() creates new Stamp-Objects on the heap with a given type (see @enum Stamp::StampType).*/ |
||
30 | static Stamp* newStamp(const Stamp::StampType type); |
||
31 | |||
35 | Werner | 32 | QString dump(); |
33 | |||
33 | Werner | 34 | private: |
35 | static const int cBHDclassWidth; |
||
36 | static const int cHDclassWidth; |
||
37 | static const int cBHDclassLow; ///< bhd classes start with 2: class 0 = 2..6, class1 = 6..10 |
||
38 | static const int cHDclassLow; ///< hd classes offset is 40: class 0 = 40-50, class 1 = 50-60 |
||
39 | static const int cBHDclassCount; ///< class count, 50: highest class = 50*4 +- 2 = 198 - 202 |
||
40 | static const int cHDclassCount; ///< class count. highest class: 140-150 |
||
41 | struct StampItem { |
||
42 | Stamp* stamp; |
||
43 | float bhd; |
||
44 | float hd; |
||
45 | }; |
||
46 | inline int getKey(const float bhd, const float hd_value); |
||
47 | int m_maxBhd; |
||
48 | bool m_useLookup; // use lookup table? |
||
49 | QList<StampItem> m_stamps; |
||
50 | Grid<Stamp*> m_lookup; |
||
51 | }; |
||
52 | |||
53 | #endif // STAMPCONTAINER_H |