--- nono/vm/event.h 2026/04/29 17:04:52 1.1.1.7 +++ nono/vm/event.h 2026/04/29 17:05:10 1.1.1.9 @@ -4,10 +4,13 @@ // Licensed under nono-license.txt // +// +// イベント +// + #pragma once #include "device.h" -#include // ユーザ定義リテラルを使ったサフィックス @@ -53,7 +56,9 @@ static inline constexpr uint64 operator" // コールバック関数の型 class Event; -using DeviceCallback_t = void (Device::*)(Event&); +using EventCallback_t = void (Device::*)(Event&); +#define ToEventCallback(f) static_cast(f) + // イベント // @@ -66,12 +71,13 @@ class Event { public: Event(); - virtual ~Event(); + Event(Device *dev_); + ~Event(); - // このイベントタイマーを開始する - void Start(); - // このイベントタイマーを停止する - void Stop(); + // このイベントを登録する + void Regist(); + // このイベントを登録する (名前を同時に設定する) + void Regist(const std::string& name_); // このイベントが動作中なら true を返す bool IsRunning() const { @@ -85,20 +91,20 @@ class Event uint64 time {}; Device *dev {}; // デバイス - DeviceCallback_t func {}; // コールバック関数 + EventCallback_t func {}; // コールバック関数 int code {}; // コールバック関数への引数 - std::string GetName() const { return name; } + const std::string GetName() const { return name; } void SetName(const std::string& val); // スケジューラが内部で使う bool active {}; // スケジューラにセットされていれば真 uint64 vtime {}; // イベントを起こす仮想時刻 + uint64 count {}; // コールバックを呼び出した回数 + uint64 last_count {}; // (表示用)前回表示したときの count + private: // イベント名(表示用) // '\0' 含まず25文字まで。デバイス名も必要なら含めること。 std::string name {}; }; - -// 全イベントの配列 (scheduler.h にある有効イベントリストとは違うので注意) -extern std::vector gEvents;