404d217504
- Remove FileManager and related file-based persistence logic - Remove obsolete observer persistence utilities - Remove unused service APIs and includes - Delete duplicate DataStore mutex stubs - Perform general dead-code cleanup
111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
/*
|
|
* File: InputHelper.h
|
|
* Description: Handles input validation and error handling
|
|
* Author: Trenser
|
|
* Created: 18-May-2026
|
|
*/
|
|
|
|
#pragma once
|
|
#include <iostream>
|
|
#include <limits>
|
|
#include <string>
|
|
#include <stdexcept>
|
|
#include <conio.h>
|
|
|
|
namespace util
|
|
{
|
|
/*
|
|
* Function: read
|
|
* Description: Reads input from console into a variable of type T.
|
|
* Parameters:
|
|
* value - reference to a variable of type T where the input will be stored
|
|
* Returns:
|
|
* void - throws runtime_error if input is invalid
|
|
*/
|
|
template <typename T>
|
|
inline void read(T& value)
|
|
{
|
|
if (!(std::cin >> value))
|
|
{
|
|
std::cin.clear();
|
|
std::cin.ignore((std::numeric_limits<std::streamsize>::max)(), '\n');
|
|
throw std::runtime_error("Invalid console input");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Function: read
|
|
* Description: Reads a line of text input from console into a string and cleans it up.
|
|
* Parameters:
|
|
* value - reference to a string where the input will be stored
|
|
* Returns:
|
|
* void - no return value
|
|
*/
|
|
inline void read(std::string& value)
|
|
{
|
|
std::getline(std::cin >> std::ws, value);
|
|
std::string cleanedValue;
|
|
for (int index = 0; index < value.length(); index++)
|
|
{
|
|
if (value[index] != ',')
|
|
{
|
|
cleanedValue += value[index];
|
|
}
|
|
}
|
|
value = cleanedValue;
|
|
}
|
|
|
|
/*
|
|
* Function: readPassword
|
|
* Description: Reads a password from console without echoing characters;
|
|
* displays '*' for each character typed, handles backspace,
|
|
* and cleans commas from the result.
|
|
* Parameters:
|
|
* value - reference to a string where the password will be stored
|
|
* Returns:
|
|
* void - no return value
|
|
*/
|
|
inline void readPassword(std::string& value)
|
|
{
|
|
value.clear();
|
|
char currentCharacter;
|
|
while ((currentCharacter = _getch()) != '\r')
|
|
{
|
|
if (currentCharacter == '\b')
|
|
{
|
|
if (!value.empty())
|
|
{
|
|
value.pop_back();
|
|
std::cout << "\b \b";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
value += currentCharacter;
|
|
std::cout << '*';
|
|
}
|
|
}
|
|
std::cout << std::endl;
|
|
std::string cleanedValue;
|
|
for (int iterator = 0; iterator < value.length(); iterator++)
|
|
{
|
|
if (value[iterator] != ',')
|
|
{
|
|
cleanedValue += value[iterator];
|
|
}
|
|
}
|
|
value = cleanedValue;
|
|
}
|
|
|
|
/*
|
|
* Function: pressEnter
|
|
* Description: Pauses execution until the user presses Enter.
|
|
* Parameters: None
|
|
* Returns: void - no return value
|
|
*/
|
|
inline void pressEnter()
|
|
{
|
|
std::cout << std::endl;
|
|
system("pause");
|
|
}
|
|
} |