--- nono/lib/object.cpp 2026/04/29 17:04:49 1.1.1.6 +++ nono/lib/object.cpp 2026/04/29 17:05:08 1.1.1.8 @@ -4,27 +4,41 @@ // Licensed under nono-license.txt // +// +// 基本オブジェクト +// + +// オブジェクトはログ出力機能 (とそのための自身のオブジェクト名) を持つ。 + #include "object.h" #include "logger.h" -#include "mpu.h" -#include "textscreen.h" - -// 全オブジェクトのリスト -std::vector gObjects; +#include "mainapp.h" // コンストラクタ -Object::Object() +Object::Object(const std::string& objname_) { - logname = "?"; - devname = "?"; + // オブジェクト名(ログ表示名)を設定。 + objname = objname_; + + // コンストラクタで指定した場合はエイリアスにも登録しておく。 + AddAlias(objname_); // 自分自身をリストに繋ぐ - gObjects.push_back(this); + gMainApp.AddObject(this); } // デストラクタ Object::~Object() { + // 自分自身をリストから削除する + gMainApp.DeleteObject(this); +} + +// ログレベルを設定する。 +void +Object::SetLogLevel(int loglevel_) +{ + loglevel = loglevel_; } // メッセージ表示 @@ -33,41 +47,29 @@ void Object::putmsgn(const char *fmt, ...) const { char buf[1024]; - int len; va_list ap; + int len; + + // 名前だけ生表示されても分かりづらいので括弧でもつけておく + len = snprintf(buf, sizeof(buf), "(%s) ", GetName().c_str()); - // デバイス名だけ生表示されても分かりづらいので括弧でもつけておく - len = snprintf(buf, sizeof(buf), "(%s) ", devname.c_str()); va_start(ap, fmt); vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); va_end(ap); - gLogger.Write(buf); + WriteLog(buf); } -// ログ出力 (可変引数) -// 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用) +// ログ表示 (継承側で用意すること) void Object::putlogn(const char *fmt, ...) const { - char buf[1024]; - va_list ap; - uint64 vt; - int len = 0; - - vt = gMPU->GetVirtTime(); - len += snprintf(buf + len, sizeof(buf) - len, "%4d.%03d'%03d'%03d ", - (int)(vt / 1000 / 1000 / 1000), - (int)((vt / 1000 / 1000) % 1000), - (int)((vt / 1000) % 1000), - (int)(vt % 1000)); - - len += snprintf(buf + len, sizeof(buf) - len, "%08x %s ", - gMPU->GetPPC(), devname.c_str()); - - va_start(ap, fmt); - vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); - va_end(ap); + PANIC("Object::putlogn called"); +} - gLogger.Write(buf); +// ロガーに出力する共通部分 +void +Object::WriteLog(const char *buf) const +{ + logger->Write(buf); }