--- nono/lib/object.cpp 2026/04/29 17:04:54 1.1.1.7 +++ nono/lib/object.cpp 2026/04/29 17:05:08 1.1.1.8 @@ -4,18 +4,16 @@ // Licensed under nono-license.txt // -#include "object.h" -#include "logger.h" -#include "mpu.h" -#include "textscreen.h" - -// 全オブジェクトのリスト -std::vector gObjects; - // -// オブジェクトクラス +// 基本オブジェクト // +// オブジェクトはログ出力機能 (とそのための自身のオブジェクト名) を持つ。 + +#include "object.h" +#include "logger.h" +#include "mainapp.h" + // コンストラクタ Object::Object(const std::string& objname_) { @@ -26,20 +24,21 @@ Object::Object(const std::string& objnam AddAlias(objname_); // 自分自身をリストに繋ぐ - gObjects.push_back(this); + gMainApp.AddObject(this); } // デストラクタ Object::~Object() { // 自分自身をリストから削除する - // XXX マルチスレッドな状況からは呼ばれないはず? - for (auto it = gObjects.begin(); it != gObjects.end(); ++it) { - if (*it == this) { - gObjects.erase(it); - break; - } - } + gMainApp.DeleteObject(this); +} + +// ログレベルを設定する。 +void +Object::SetLogLevel(int loglevel_) +{ + loglevel = loglevel_; } // メッセージ表示 @@ -48,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()); + 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(), GetName().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); }