openMSX
RecordedCommand.hh
Go to the documentation of this file.
1 #ifndef RECORDEDCOMMAND_HH
2 #define RECORDEDCOMMAND_HH
3 
4 #include "Command.hh"
5 #include "StateChangeListener.hh"
6 #include "StateChange.hh"
7 #include "TclObject.hh"
8 #include "EmuTime.hh"
9 
10 namespace openmsx {
11 
12 class CommandController;
13 class StateChangeDistributor;
14 class Scheduler;
15 
20 class MSXCommandEvent final : public StateChange
21 {
22 public:
23  MSXCommandEvent() = default; // for serialize
24  MSXCommandEvent(span<std::string> tokens, EmuTime::param time);
25  MSXCommandEvent(span<const TclObject> tokens, EmuTime::param time);
26  const std::vector<TclObject>& getTokens() const { return tokens; }
27 
28  template<typename Archive>
29  void serialize(Archive& ar, unsigned version);
30 private:
31  std::vector<TclObject> tokens;
32 };
33 
34 
46 {
47 public:
51  virtual void execute(
52  span<const TclObject> tokens, TclObject& result,
53  EmuTime::param time) = 0;
54 
60  virtual bool needRecord(span<const TclObject> tokens) const;
61 
62 protected:
63  RecordedCommand(CommandController& commandController,
64  StateChangeDistributor& stateChangeDistributor,
65  Scheduler& scheduler,
66  std::string_view name);
67  ~RecordedCommand();
68 
69 private:
70  // Command
71  void execute(span<const TclObject> tokens, TclObject& result) override;
72 
73  // StateChangeListener
74  void signalStateChange(const std::shared_ptr<StateChange>& event) override;
75  void stopReplay(EmuTime::param time) override;
76 
77  StateChangeDistributor& stateChangeDistributor;
78  Scheduler& scheduler;
79  TclObject dummyResultObject;
80  TclObject* currentResultObject;
81 };
82 
83 } // namespace openmsx
84 
85 #endif
This class is used to for Tcl commands that directly influence the MSX state (e.g.
Definition: span.hh:34
Commands that directly influence the MSX state should send and events so that they can be recorded by...
void serialize(Archive &ar, unsigned version)
Thanks to enen for testing this on a real cartridge:
Definition: Autofire.cc:5
const std::vector< TclObject > & getTokens() const
Base class for all external MSX state changing events.
Definition: StateChange.hh:13