Implemented datastore shared memory codebase
Changes: - Added SharedMemory module for file-backed memory-mapped storage - Added MappingInfo, FileHeader, RecordState and TrackedRecord infrastructure - Replaced CSV-based serialization with binary struct serialization - Added DataStore initialization and shutdown lifecycle management - Added datastore mutex synchronization for multi-process access - Added shared-memory mapping configuration for all datastore entities - Added generic loadRecords and saveRecords template infrastructure - Added automatic datastore directory creation and .dat file storage - Updated configuration to use binary datastore files and initial capacities - Added enum underlying types for serialization compatibility - Added password masking support for login, registration and password change flows - Added Visual Studio project configuration for shared-memory components - Added datastore-owned record caches for runtime object management - Updated datastore APIs to return cached tracked-record collections by reference - Added generic cache refresh and cleanup infrastructure - Updated save operations to persist datastore caches directly - Added automatic cache cleanup during datastore destruction - Prepared datastore for multi-process shared-memory persistence
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include <limits>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <conio.h>
|
||||
|
||||
namespace util
|
||||
{
|
||||
@@ -54,6 +55,48 @@ namespace util
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user