--- nono/lib/object.cpp 2026/04/29 17:04:31 1.1.1.2 +++ nono/lib/object.cpp 2026/04/29 17:04:54 1.1.1.7 @@ -1,22 +1,29 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #include "object.h" #include "logger.h" #include "mpu.h" -#include "scheduler.h" #include "textscreen.h" // 全オブジェクトのリスト std::vector gObjects; +// +// オブジェクトクラス +// + // コンストラクタ -Object::Object() +Object::Object(const std::string& objname_) { - logname = "?"; - devname = "?"; + // オブジェクト名(ログ表示名)を設定。 + objname = objname_; + + // コンストラクタで指定した場合はエイリアスにも登録しておく。 + AddAlias(objname_); // 自分自身をリストに繋ぐ gObjects.push_back(this); @@ -25,56 +32,45 @@ Object::Object() // デストラクタ Object::~Object() { + // 自分自身をリストから削除する + // XXX マルチスレッドな状況からは呼ばれないはず? + for (auto it = gObjects.begin(); it != gObjects.end(); ++it) { + if (*it == this) { + gObjects.erase(it); + break; + } + } } // メッセージ表示 // 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用) void -Object::putmsg(const char *fmt, ...) const -{ - va_list ap; - - va_start(ap, fmt); - vputmsg(fmt, ap); - va_end(ap); -} - -// メッセージ出力 (va_list) -// 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用) -void -Object::vputmsg(const char *fmt, va_list ap) const +Object::putmsgn(const char *fmt, ...) const { char buf[1024]; int len; - - // デバイス名だけ生表示されても分かりづらいので括弧でもつけておく - len = snprintf(buf, sizeof(buf), "(%s) ", devname); - vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); - gLogger->Write(buf); -} - -// ログ出力 (可変引数) -// 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用) -void -Object::putlog(const char *fmt, ...) const -{ va_list ap; + // 名前だけ生表示されても分かりづらいので括弧でもつけておく + len = snprintf(buf, sizeof(buf), "(%s) ", GetName().c_str()); va_start(ap, fmt); - vputlog(fmt, ap); + vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); va_end(ap); + + gLogger.Write(buf); } -// ログ出力 (va_list) +// ログ出力 (可変引数) // 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用) void -Object::vputlog(const char *fmt, va_list ap) const +Object::putlogn(const char *fmt, ...) const { char buf[1024]; + va_list ap; uint64 vt; int len = 0; - vt = gScheduler->GetVirtTime(); + vt = gMPU->GetVirtTime(); len += snprintf(buf + len, sizeof(buf) - len, "%4d.%03d'%03d'%03d ", (int)(vt / 1000 / 1000 / 1000), (int)((vt / 1000 / 1000) % 1000), @@ -82,16 +78,11 @@ Object::vputlog(const char *fmt, va_list (int)(vt % 1000)); len += snprintf(buf + len, sizeof(buf) - len, "%08x %s ", - gMPU->GetPPC(), devname); - vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); + gMPU->GetPPC(), GetName().c_str()); - gLogger->Write(buf); -} + va_start(ap, fmt); + vsnprintf(buf + len, sizeof(buf) - len, fmt, ap); + va_end(ap); -// モニタースクリーンを更新する。 -bool -Object::MonitorUpdate() -{ - // モニタースクリーンなし - return false; + gLogger.Write(buf); }