Cockatrice 2026-04-21-Development-2.11.0-beta.61
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
deck_list_statistics_analyzer.h
Go to the documentation of this file.
1#ifndef COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
2#define COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
3
4#include "deck_list_model.h"
5
6#include <QHash>
7#include <QObject>
8#include <unordered_map>
9
10class DeckListModel;
11
22
23class DeckListStatisticsAnalyzer : public QObject
24{
25 Q_OBJECT
26
27public:
28 explicit DeckListStatisticsAnalyzer(QObject *parent,
31
32 void analyze();
33
34 [[nodiscard]] const QHash<QString, int> &getManaBase() const
35 {
36 return manaBaseMap;
37 }
38 [[nodiscard]] const std::unordered_map<int, int> &getManaCurve() const
39 {
40 return manaCurveMap;
41 }
42 [[nodiscard]] const std::unordered_map<char, int> &getDevotion() const
43 {
44 return manaDevotionMap;
45 }
46
47 const QHash<QString, int> &getDevotionPipCount() const
48 {
49 return devotionPipCount;
50 }
51 const QHash<QString, int> &getDevotionCardCount() const
52 {
53 return devotionCardCount;
54 }
55
56 const QHash<QString, int> &getProductionPipCount() const
57 {
58 return productionPipCount;
59 }
60 const QHash<QString, int> &getProductionCardCount() const
61 {
63 }
64
65 const QHash<QString, int> &getTypeCount() const
66 {
67 return typeCount;
68 }
69 const QHash<QString, int> &getSubtypeCount() const
70 {
71 return subtypeCount;
72 }
73 const QHash<QString, int> &getColorCount() const
74 {
75 return colorCount;
76 }
77 const QHash<QString, int> &getRarityCount() const
78 {
79 return rarityCount;
80 }
81 const QHash<int, int> &getManaValueCount() const
82 {
83 return manaValueCount;
84 }
85
86 const QHash<QString, QHash<int, int>> &getManaCurveByType() const
87 {
88 return manaCurveByType;
89 }
90 const QHash<QString, QHash<int, int>> &getManaCurveBySubtype() const
91 {
92 return manaCurveBySubtype;
93 }
94 const QHash<QString, QHash<int, int>> &getManaCurveByColor() const
95 {
96 return manaCurveByColor;
97 }
98 const QHash<QString, QHash<int, int>> &getManaCurveByPower() const
99 {
100 return manaCurveByPower;
101 }
102 const QHash<QString, QHash<int, int>> &getManaCurveByToughness() const
103 {
105 }
106
107 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByType() const
108 {
110 }
111
112 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsBySubtype() const
113 {
115 }
116
117 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByColor() const
118 {
120 }
121
122 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByPower() const
123 {
125 }
126
127 const QHash<QString, QHash<int, QStringList>> &getManaCurveCardsByToughness() const
128 {
130 }
131
133 {
134 return model;
135 }
136
141
142signals:
144
145private:
148
149 QHash<QString, int> manaBaseMap;
150 std::unordered_map<int, int> manaCurveMap;
151 std::unordered_map<char, int> manaDevotionMap;
152
153 QHash<QString, int> devotionPipCount; // W/U/B/R/G total symbols
154 QHash<QString, int> devotionCardCount; // how many cards provide devotion
155
156 QHash<QString, int> productionPipCount; // mana produced by cards
157 QHash<QString, int> productionCardCount; // number of producers
158
159 QHash<QString, int> typeCount;
160 QHash<QString, int> subtypeCount;
161 QHash<QString, int> colorCount;
162 QHash<QString, int> rarityCount;
163 QHash<int, int> manaValueCount;
164
165 QHash<QString, QHash<int, int>> manaCurveByType;
166 QHash<QString, QHash<int, int>> manaCurveBySubtype;
167 QHash<QString, QHash<int, int>> manaCurveByColor;
168 QHash<QString, QHash<int, int>> manaCurveByPower;
169 QHash<QString, QHash<int, int>> manaCurveByToughness;
170
171 QHash<QString, QHash<int, QStringList>> manaCurveCardsByType;
172 QHash<QString, QHash<int, QStringList>> manaCurveCardsBySubtype;
173 QHash<QString, QHash<int, QStringList>> manaCurveCardsByColor;
174 QHash<QString, QHash<int, QStringList>> manaCurveCardsByPower;
175 QHash<QString, QHash<int, QStringList>> manaCurveCardsByToughness;
176
177 // Not storing card info — only numeric results.
178 QHash<QString, QHash<int, QHash<int, double>>> probabilityExact;
179 QHash<QString, QHash<int, QHash<int, double>>> probabilityAtLeast;
180
181 QHash<QString, int> determineManaProduction(const QString &);
182 std::unordered_map<char, int> countManaSymbols(const QString &);
183 double hypergeometric(int N, int K, int n, int k);
184 void clearData();
185};
186
187#endif // COCKATRICE_DECK_LIST_STATISTICS_ANALYZER_H
Qt model representing a decklist for use in views (tree/table).
Definition deck_list_model.h:214
std::unordered_map< int, int > manaCurveMap
Definition deck_list_statistics_analyzer.h:150
DeckListModel * getModel() const
Definition deck_list_statistics_analyzer.h:132
const QHash< QString, QHash< int, int > > & getManaCurveByType() const
Definition deck_list_statistics_analyzer.h:86
QHash< QString, QHash< int, int > > manaCurveByPower
Definition deck_list_statistics_analyzer.h:168
const QHash< QString, QHash< int, int > > & getManaCurveBySubtype() const
Definition deck_list_statistics_analyzer.h:90
std::unordered_map< char, int > manaDevotionMap
Definition deck_list_statistics_analyzer.h:151
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsBySubtype() const
Definition deck_list_statistics_analyzer.h:112
QHash< QString, int > determineManaProduction(const QString &)
Definition deck_list_statistics_analyzer.cpp:120
const QHash< QString, int > & getSubtypeCount() const
Definition deck_list_statistics_analyzer.h:69
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByPower() const
Definition deck_list_statistics_analyzer.h:122
QHash< int, int > manaValueCount
Definition deck_list_statistics_analyzer.h:163
double hypergeometric(int N, int K, int n, int k)
Definition deck_list_statistics_analyzer.cpp:187
QHash< QString, int > rarityCount
Definition deck_list_statistics_analyzer.h:162
std::unordered_map< char, int > countManaSymbols(const QString &)
Definition deck_list_statistics_analyzer.cpp:147
const QHash< QString, QHash< int, int > > & getManaCurveByPower() const
Definition deck_list_statistics_analyzer.h:98
QHash< QString, QHash< int, int > > manaCurveBySubtype
Definition deck_list_statistics_analyzer.h:166
const QHash< QString, int > & getDevotionPipCount() const
Definition deck_list_statistics_analyzer.h:47
DeckListStatisticsAnalyzerConfig & getConfig()
Definition deck_list_statistics_analyzer.h:137
QHash< QString, int > devotionCardCount
Definition deck_list_statistics_analyzer.h:154
DeckListStatisticsAnalyzer(QObject *parent, DeckListModel *model, DeckListStatisticsAnalyzerConfig _config=DeckListStatisticsAnalyzerConfig())
Definition deck_list_statistics_analyzer.cpp:10
const QHash< QString, int > & getTypeCount() const
Definition deck_list_statistics_analyzer.h:65
const QHash< QString, int > & getManaBase() const
Definition deck_list_statistics_analyzer.h:34
DeckListModel * model
Definition deck_list_statistics_analyzer.h:146
QHash< QString, QHash< int, QHash< int, double > > > probabilityExact
Definition deck_list_statistics_analyzer.h:178
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByType() const
Definition deck_list_statistics_analyzer.h:107
QHash< QString, QHash< int, QStringList > > manaCurveCardsByColor
Definition deck_list_statistics_analyzer.h:173
const QHash< QString, int > & getProductionCardCount() const
Definition deck_list_statistics_analyzer.h:60
QHash< QString, QHash< int, QHash< int, double > > > probabilityAtLeast
Definition deck_list_statistics_analyzer.h:179
QHash< QString, QHash< int, int > > manaCurveByType
Definition deck_list_statistics_analyzer.h:165
QHash< QString, int > devotionPipCount
Definition deck_list_statistics_analyzer.h:153
const std::unordered_map< int, int > & getManaCurve() const
Definition deck_list_statistics_analyzer.h:38
QHash< QString, int > colorCount
Definition deck_list_statistics_analyzer.h:161
QHash< QString, QHash< int, QStringList > > manaCurveCardsByType
Definition deck_list_statistics_analyzer.h:171
const std::unordered_map< char, int > & getDevotion() const
Definition deck_list_statistics_analyzer.h:42
const QHash< QString, int > & getRarityCount() const
Definition deck_list_statistics_analyzer.h:77
QHash< QString, int > manaBaseMap
Definition deck_list_statistics_analyzer.h:149
QHash< QString, int > typeCount
Definition deck_list_statistics_analyzer.h:159
const QHash< QString, QHash< int, int > > & getManaCurveByToughness() const
Definition deck_list_statistics_analyzer.h:102
QHash< QString, QHash< int, QStringList > > manaCurveCardsBySubtype
Definition deck_list_statistics_analyzer.h:172
const QHash< QString, int > & getColorCount() const
Definition deck_list_statistics_analyzer.h:73
QHash< QString, QHash< int, QStringList > > manaCurveCardsByPower
Definition deck_list_statistics_analyzer.h:174
QHash< QString, QHash< int, QStringList > > manaCurveCardsByToughness
Definition deck_list_statistics_analyzer.h:175
const QHash< QString, QHash< int, int > > & getManaCurveByColor() const
Definition deck_list_statistics_analyzer.h:94
const QHash< int, int > & getManaValueCount() const
Definition deck_list_statistics_analyzer.h:81
QHash< QString, int > productionCardCount
Definition deck_list_statistics_analyzer.h:157
const QHash< QString, int > & getDevotionCardCount() const
Definition deck_list_statistics_analyzer.h:51
QHash< QString, QHash< int, int > > manaCurveByToughness
Definition deck_list_statistics_analyzer.h:169
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByToughness() const
Definition deck_list_statistics_analyzer.h:127
DeckListStatisticsAnalyzerConfig config
Definition deck_list_statistics_analyzer.h:147
QHash< QString, int > productionPipCount
Definition deck_list_statistics_analyzer.h:156
QHash< QString, QHash< int, int > > manaCurveByColor
Definition deck_list_statistics_analyzer.h:167
void analyze()
Definition deck_list_statistics_analyzer.cpp:18
void clearData()
Definition deck_list_statistics_analyzer.cpp:209
QHash< QString, int > subtypeCount
Definition deck_list_statistics_analyzer.h:160
const QHash< QString, QHash< int, QStringList > > & getManaCurveCardsByColor() const
Definition deck_list_statistics_analyzer.h:117
const QHash< QString, int > & getProductionPipCount() const
Definition deck_list_statistics_analyzer.h:56
Definition deck_list_statistics_analyzer.h:13
bool includeSideboard
Definition deck_list_statistics_analyzer.h:20
bool computeCategories
Definition deck_list_statistics_analyzer.h:17
bool computeManaCurve
Definition deck_list_statistics_analyzer.h:15
bool computeProbabilities
Definition deck_list_statistics_analyzer.h:19
bool computeCurveBreakdowns
Definition deck_list_statistics_analyzer.h:18
bool computeManaBase
Definition deck_list_statistics_analyzer.h:14
bool computeDevotion
Definition deck_list_statistics_analyzer.h:16