--- nono/lib/object.h 2026/04/29 17:04:28 1.1 +++ nono/lib/object.h 2026/04/29 17:04:40 1.1.1.5 @@ -1,11 +1,11 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once -#include "header.h" #include "textscreen.h" #include @@ -14,24 +14,24 @@ // // ログ出力機能を持つ。 // -class Object +class Object : public IMonitor { public: Object(); - virtual ~Object(); + virtual ~Object() override; // // ログ // // ログ識別名 - std::string logname; + std::string logname {}; // ログレベル // 0: 未実装動作などのデバッグログではない情報 // 1: 大雑把なデバッグログ // 2: 詳細なデバッグログ // 3: うるさいデバッグログ - int loglevel = 0; + int loglevel {}; // メッセージ出力 // loglevel が lv 以上の時だけ表示。 @@ -49,14 +49,14 @@ class Object } } // メッセージ出力 - void putmsg(const char *fmt, ...) __printflike(2, 3); - void vputmsg(const char *fmt, va_list ap) __printflike(2, 0); + void putmsg(const char *fmt, ...) const __printflike(2, 3); + void vputmsg(const char *fmt, va_list ap) const __printflike(2, 0); // ログ出力 // loglevel が lv 以上の時だけ表示。 // 仮想時刻と現在の PC も表示する。VM 実行中は基本的にこれで表示。 inline void - putlog(int lv, const char *fmt, ...) __printflike(3, 4) + putlog(int lv, const char *fmt, ...) const __printflike(3, 4) { if (__predict_false(loglevel >= lv)) { va_list ap; @@ -67,28 +67,21 @@ class Object } } // ログ出力(ログレベル限定なし) - void putlog(const char *fmt, ...) __printflike(2, 3); - void vputlog(const char *fmt, va_list ap) __printflike(2, 0); + void putlog(const char *fmt, ...) const __printflike(2, 3); + void vputlog(const char *fmt, va_list ap) const __printflike(2, 0); // デバイス名(デバッグ表示用) // XXX オブジェクトなのにデバイス名とは一体... - const char *devname = NULL; - - // ログの最新行 - char lastbuf[1024] {}; + std::string devname {}; // // モニター // // モニター更新 (派生クラス側で用意) - // 戻り値はモニタースクリーンの有無。 - // 基底クラスのこれはモニタースクリーンを提供していないので false を返す。 - // 派生クラス側のは必ず true を返すこと。 - virtual bool MonitorUpdate(); - - // モニター用のテキストスクリーン - TextScreen monitor; + void MonitorUpdate(TextScreen&) override { } + nnSize GetMonitorSize() override { return monitor_size; } + nnSize monitor_size {}; }; // 全オブジェクトのリスト