Files
jaildoctors_dilemma/source/stats.h
2025-02-20 13:56:07 +01:00

73 lines
2.2 KiB
C++

#pragma once
#include <string> // Para string, basic_string
#include <vector> // Para vector
struct options_t;
class Stats
{
private:
struct stats_t
{
std::string name; // Nombre de la habitación
int visited; // Cuenta las veces que se ha visitado una habitación
int died; // Cuenta las veces que se ha muerto en una habitación
};
struct stats_dictionary_t
{
std::string number; // Numero de la habitación
std::string name; // Nombre de la habitación
};
// Punteros y objetos
options_t *options; // Puntero a la variable con todas las opciones del programa
// Variables
std::vector<stats_dictionary_t> dictionary; // Lista con la equivalencia nombre-numero de habitacion
std::vector<stats_t> bufferList; // Lista con las estadisticas temporales por habitación
std::vector<stats_t> list; // Lista con las estadisticas completas por habitación
std::string bufferPath; // Fichero con las estadísticas temporales
std::string filePath; // Fichero con las estadísticas completas
// Busca una entrada en la lista por nombre
int findByName(std::string name, std::vector<stats_t> &list);
// Carga las estadisticas desde un fichero
bool loadFromFile(std::string filePath, std::vector<stats_t> &list);
// Guarda las estadisticas en un fichero
void saveToFile(std::string filePath, std::vector<stats_t> &list);
// Calcula cual es la habitación con más muertes
void checkWorstNightmare();
// Obtiene el nombre de una habitación a partir del número
std::string numberToName(std::string number);
// Obtiene el número de una habitación a partir del nombre
std::string nameToNumber(std::string name);
// Vuelca los datos del buffer en la lista de estadisticas
void updateListFromBuffer();
public:
// Constructor
Stats(std::string file, std::string buffer, options_t *options);
// Destructor
~Stats();
// Inicializador
// Se debe llamar a este procedimiento una vez se haya creado el diccionario numero-nombre
void init();
// Añade una muerte a las estadisticas
void addDeath(std::string name);
// Añade una visita a las estadisticas
void addVisit(std::string name);
// Añade una entrada al diccionario
void addDictionary(std::string number, std::string name);
};