EnigmaMachineCore 0.1.0
A modular Enigma Machine simulation in C++20
Loading...
Searching...
No Matches
RotorBox.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <memory>
9#include <vector>
10
12#include "EnigmaTypes.hpp"
13#include "IEnigmaObserver.hpp"
14#include "Transformer.hpp"
15
24class RotorBox {
25private:
27 std::vector<AlphabetIndex> rotorPositions;
28 std::vector<std::unique_ptr<Transformer>> transformers;
29 std::vector<IEnigmaObserver*> observers;
30 ILogger* logger;
31
38 void initTransformers(const std::vector<RotorConfig>& rotors, const ReflectorConfig& reflector);
39
43 void updateRotors();
44
45public:
53 explicit RotorBox(ILogger* logger = nullptr);
54
66 RotorBox(const std::vector<AlphabetIndex>& rotorPositions, const std::vector<RotorConfig>& rotors,
67 const ReflectorConfig& reflector, ILogger* logger = nullptr);
68
76 RotorBox(std::vector<AlphabetIndex>&& rotorPositions, std::vector<RotorConfig>&& rotors,
77 ReflectorConfig&& reflector, ILogger* logger = nullptr);
78
79 // Disable Copy
80 RotorBox(const RotorBox&) = delete;
81 RotorBox& operator=(const RotorBox&) = delete;
82
83 // Enable Move
84 RotorBox(RotorBox&&) = default;
86
87 ~RotorBox() = default;
88
93 void registerObserver(IEnigmaObserver* observer);
94
99 void removeObserver(IEnigmaObserver* observer);
100
105 void printTransformers() const;
106
113 AlphabetIndex keyTransform(AlphabetIndex input);
114
119 void setLogger(ILogger* logger);
120};
Header file for the Transformer class.
Class representing a box of rotors in the Enigma machine.
Definition RotorBox.hpp:24
void updateRotors()
Updates the positions of the rotors.
Definition RotorBox.cpp:142
RotorBox(RotorBox &&)=default
int rotorCount
Definition RotorBox.hpp:26
~RotorBox()=default
RotorBox(const RotorBox &)=delete
void initTransformers(const std::vector< RotorConfig > &rotors, const ReflectorConfig &reflector)
Initializes the transformer vector with rotors and a reflector.
Definition RotorBox.cpp:85
ILogger * logger
Definition RotorBox.hpp:30
RotorBox & operator=(const RotorBox &)=delete
std::vector< AlphabetIndex > rotorPositions
Definition RotorBox.hpp:27
void registerObserver(IEnigmaObserver *observer)
Registers an observer to receive notifications.
Definition RotorBox.cpp:71
std::vector< IEnigmaObserver * > observers
Definition RotorBox.hpp:29
void printTransformers() const
Prints the types of transformers in the transformer vector. This function iterates through the transf...
Definition RotorBox.cpp:95
std::vector< std::unique_ptr< Transformer > > transformers
Definition RotorBox.hpp:28
AlphabetIndex keyTransform(AlphabetIndex input)
Transforms the input key through the rotor box.
Definition RotorBox.cpp:112
void removeObserver(IEnigmaObserver *observer)
Removes an observer.
Definition RotorBox.cpp:73
RotorBox & operator=(RotorBox &&)=default
void setLogger(ILogger *logger)
Sets the logger for the rotor box.
Definition RotorBox.cpp:132
Interface for observing Enigma Machine events. Implement this interface to receive notifications abou...
Configuration structure for a Reflector.