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() {} // for serialize
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  array_ref<TclObject> tokens, TclObject& result,
53  EmuTime::param time) = 0;
54 
60  virtual bool needRecord(array_ref<TclObject> tokens) const;
61 
62 protected:
63  RecordedCommand(CommandController& commandController,
64  StateChangeDistributor& stateChangeDistributor,
65  Scheduler& scheduler,
66  string_ref name);
67  ~RecordedCommand();
68 
69 private:
70  // Command
71  void execute(array_ref<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.
Commands that directly influence the MSX state should send and events so that they can be recorded by...
This class implements a subset of the proposal for std::string_ref (proposed for the next c++ standar...
Definition: string_ref.hh:18
void serialize(Archive &ar, unsigned version)
This class implements a subset of the proposal for std::array_ref (proposed for the next c++ standard...
Definition: array_ref.hh:19
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