comparison src/core/anime_db.cpp @ 11:fc1bf97c528b

*: use C++11 standard I've been meaning to do this for a while, but I didn't want to reimplement the filesystem code. Now we are on C++11 and most compilers from the past 5 centuries should support this now
author Paper <mrpapersonic@gmail.com>
date Sun, 17 Sep 2023 06:14:30 -0400
parents 4b198a111713
children fe719c109dbc
comparison
equal deleted inserted replaced
10:4b198a111713 11:fc1bf97c528b
3 3
4 namespace Anime { 4 namespace Anime {
5 5
6 int Database::GetTotalAnimeAmount() { 6 int Database::GetTotalAnimeAmount() {
7 int total = 0; 7 int total = 0;
8 for (const auto& [id, anime] : items) { 8 for (const auto& a : items) {
9 if (anime.IsInUserList()) 9 if (a.second.IsInUserList())
10 total++; 10 total++;
11 } 11 }
12 return total; 12 return total;
13 } 13 }
14 14
15 int Database::GetListsAnimeAmount(ListStatus status) { 15 int Database::GetListsAnimeAmount(ListStatus status) {
16 if (status == ListStatus::NOT_IN_LIST) 16 if (status == ListStatus::NOT_IN_LIST)
17 return 0; 17 return 0;
18 int total = 0; 18 int total = 0;
19 for (const auto& [id, anime] : items) { 19 for (const auto& a : items) {
20 if (anime.IsInUserList() && anime.GetUserStatus() == status) 20 if (a.second.IsInUserList() && a.second.GetUserStatus() == status)
21 total++; 21 total++;
22 } 22 }
23 return total; 23 return total;
24 } 24 }
25 25
26 int Database::GetTotalEpisodeAmount() { 26 int Database::GetTotalEpisodeAmount() {
27 int total = 0; 27 int total = 0;
28 for (const auto& [id, anime] : items) { 28 for (const auto& a : items) {
29 if (anime.IsInUserList()) { 29 if (a.second.IsInUserList()) {
30 total += anime.GetUserRewatchedTimes() * anime.GetEpisodes(); 30 total += a.second.GetUserRewatchedTimes() * a.second.GetEpisodes();
31 total += anime.GetUserProgress(); 31 total += a.second.GetUserProgress();
32 } 32 }
33 } 33 }
34 return total; 34 return total;
35 } 35 }
36 36
37 /* Returns the total watched amount in minutes. */ 37 /* Returns the total watched amount in minutes. */
38 int Database::GetTotalWatchedAmount() { 38 int Database::GetTotalWatchedAmount() {
39 int total = 0; 39 int total = 0;
40 for (const auto& [id, anime] : items) { 40 for (const auto& a : items) {
41 if (anime.IsInUserList()) { 41 if (a.second.IsInUserList()) {
42 total += anime.GetDuration() * anime.GetUserProgress(); 42 total += a.second.GetDuration() * a.second.GetUserProgress();
43 total += anime.GetEpisodes() * anime.GetDuration() * anime.GetUserRewatchedTimes(); 43 total += a.second.GetEpisodes() * a.second.GetDuration() * a.second.GetUserRewatchedTimes();
44 } 44 }
45 } 45 }
46 return total; 46 return total;
47 } 47 }
48 48
51 amount of episodes, as AniList will let you 51 amount of episodes, as AniList will let you
52 set episode counts up to 32768. But that should 52 set episode counts up to 32768. But that should
53 rather be handled elsewhere. */ 53 rather be handled elsewhere. */
54 int Database::GetTotalPlannedAmount() { 54 int Database::GetTotalPlannedAmount() {
55 int total = 0; 55 int total = 0;
56 for (const auto& [id, anime] : items) { 56 for (const auto& a : items) {
57 if (anime.IsInUserList()) 57 if (a.second.IsInUserList())
58 total += anime.GetDuration() * (anime.GetEpisodes() - anime.GetUserProgress()); 58 total += a.second.GetDuration() * (a.second.GetEpisodes() - a.second.GetUserProgress());
59 } 59 }
60 return total; 60 return total;
61 } 61 }
62 62
63 /* I'm sure many will appreciate this being called an 63 /* I'm sure many will appreciate this being called an
64 "average" instead of a "mean" */ 64 "average" instead of a "mean" */
65 double Database::GetAverageScore() { 65 double Database::GetAverageScore() {
66 double avg = 0; 66 double avg = 0;
67 int amt = 0; 67 int amt = 0;
68 for (const auto& [id, anime] : items) { 68 for (const auto& a : items) {
69 if (anime.IsInUserList() && anime.GetUserScore()) { 69 if (a.second.IsInUserList() && a.second.GetUserScore()) {
70 avg += anime.GetUserScore(); 70 avg += a.second.GetUserScore();
71 amt++; 71 amt++;
72 } 72 }
73 } 73 }
74 return avg / amt; 74 return avg / amt;
75 } 75 }
76 76
77 double Database::GetScoreDeviation() { 77 double Database::GetScoreDeviation() {
78 double squares_sum = 0, avg = GetAverageScore(); 78 double squares_sum = 0, avg = GetAverageScore();
79 int amt = 0; 79 int amt = 0;
80 for (const auto& [id, anime] : items) { 80 for (const auto& a : items) {
81 if (anime.GetUserScore()) { 81 if (a.second.IsInUserList() && a.second.GetUserScore()) {
82 squares_sum += std::pow((double)anime.GetUserScore() - avg, 2); 82 squares_sum += std::pow((double)a.second.GetUserScore() - avg, 2);
83 amt++; 83 amt++;
84 } 84 }
85 } 85 }
86 return (amt > 0) ? std::sqrt(squares_sum / amt) : 0; 86 return (amt > 0) ? std::sqrt(squares_sum / amt) : 0;
87 } 87 }
88 88
89 Database db;
90
89 } // namespace Anime 91 } // namespace Anime