register_manager.hpp 943 B

1234567891011121314151617181920212223242526272829
  1. #pragma once
  2. #include <string>
  3. #include <unordered_map>
  4. #include <optional>
  5. namespace lumacs {
  6. /// @brief Manages Emacs-like registers for storing text.
  7. /// Registers are named storage locations (typically a single character).
  8. class RegisterManager {
  9. public:
  10. RegisterManager() = default;
  11. /// @brief Saves text to a named register.
  12. /// @param register_name The character name of the register (e.g., 'a', 'B', '1').
  13. /// @param text The string content to save.
  14. void copy_to_register(char register_name, const std::string& text);
  15. /// @brief Retrieves text from a named register.
  16. /// @param register_name The character name of the register.
  17. /// @return The optional string content if the register exists, `std::nullopt` otherwise.
  18. [[nodiscard]] std::optional<std::string> get_from_register(char register_name) const;
  19. private:
  20. std::unordered_map<char, std::string> registers_;
  21. };
  22. } // namespace lumacs