Commit dfc1fc5b authored by Mathieu Valois's avatar Mathieu Valois
Browse files

Fix map collision by using multimap for stats in decreasing order

parent df80fdf5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -37,8 +37,8 @@ using MapIterator = typename std::map<K, V>::const_iterator;
 * @return ordered map
 */
template<typename A>
std::map<uint64_t, A, std::greater<uint64_t>> flip_map(const std::unordered_map<A, uint64_t> & src) {
	std::map<uint64_t, A, std::greater<uint64_t>> dst;
std::multimap<uint64_t, A, std::greater<uint64_t>> flip_map(const std::unordered_map<A, uint64_t> & src) {
	std::multimap<uint64_t, A, std::greater<uint64_t>> dst;

	for(UnorderedMapIterator<A, uint64_t> it = src.begin(); it != src.end(); ++it)
		dst.insert(std::make_pair(it->second, it->first));
@@ -83,7 +83,7 @@ void readResult(const uint64_t & res, const Type& carac, int & count, const uint
template<typename Type>
void showMap(const std::unordered_map<Type, uint64_t> & stats, const int & top, const uint64_t & total_counter, const int & hiderare, int & count) {
	count = 0;
	std::map<uint64_t, Type, std::greater<uint64_t>> reverse = flip_map<Type>(stats);
	std::multimap<uint64_t, Type, std::greater<uint64_t>> reverse = flip_map<Type>(stats);
	std::pair<uint64_t, Type> it;
	for(std::pair<uint64_t, Type> it : reverse) {
		readResult<Type>(it.first, it.second, count, total_counter, hiderare);
+1 −1
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ void Statsgen::print_stats() {
	if (! outfile_name.empty()){
		locale::global(locale("C"));
		ofstream outfile_stream(outfile_name);
		map<uint64_t, string, greater<uint64_t>> reverse = flip_map(results.advancedmasks);
		multimap<uint64_t, string, greater<uint64_t>> reverse = flip_map(results.advancedmasks);
		for(pair<uint64_t, string> it : reverse){
			if(it.second == "othermasks") continue;
			outfile_stream << it.second << "," << it.first << endl;
+4 −4
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ double MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCh
    percentageSecurity = percentage(stats.getNbSecurePasswords(), total);

    /* LENGTH HISTOGRAM */
    map<uint64_t, int, greater<uint64_t>> reverseL = flip_map<int>(stats.getStatsLength());
    multimap<uint64_t, int, greater<uint64_t>> reverseL = flip_map<int>(results.length);
    double percentageL;
    double maxPercLength = 0;
    uint64_t nbHideL = 0;
@@ -187,7 +187,7 @@ double MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCh


    /* CHARSET PIECHART */
    map<uint64_t, string, greater<uint64_t>> reverseC = flip_map(stats.getStatsCharsets());
    multimap<uint64_t, string, greater<uint64_t>> reverseC = flip_map(results.charactersets);
    uint64_t top = 0;
    uint64_t nbHideC = 0;
    pieCharset->clear();
@@ -203,7 +203,7 @@ double MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCh
    pieCharset->append("Other charsets", nbHideC);

    /* SIMPLE PIECHART */
    map<uint64_t, string, greater<uint64_t>> reverseS = flip_map(stats.getStatsSimple());
    multimap<uint64_t, string, greater<uint64_t>> reverseS = flip_map(results.simplemasks);
    uint64_t top_simple = 0;
    uint64_t nbHideS = 0;
    pieSimple->clear();
@@ -219,7 +219,7 @@ double MainWindow::initGraphicalStats(QBarSeries * barLength, QPieSeries * pieCh
    pieSimple->append("Other Masks", nbHideS);

    /* ADVANCED PIECHART */
    map<uint64_t, string, greater<uint64_t>> reverseA = flip_map(stats.getStatsAdvanced());
    multimap<uint64_t, string, greater<uint64_t>> reverseA = flip_map(results.advancedmasks);
    uint64_t top_advanced = 0;
    uint64_t nbHideA = 0;
    pieAdvanced->clear();