File:  [Isaki's NoNo m68k/m88k emulator] / nono / lib / object.cpp
Revision 1.1.1.12 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:56 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v027, HEAD
nono 1.7.0

//
// nono
// Copyright (C) 2020 nono project
// Licensed under nono-license.txt
//

//
// 基本オブジェクト
//
// オブジェクトはログ出力機能 (とそのための自身のオブジェクト名) を持つ。

#include "nono.h"
#include "object.h"
#include "logger.h"
#include "mainapp.h"

// コンストラクタ
Object::Object(uint objid_)
{
	objid = objid_;
	assertmsg(objid < idname.size(),
		"objid=%u, size=%zu", objid, idname.size());

	// オブジェクト名(ログ表示名)は ID から引く。
	// (コンストラクタでは SetName() のオーバーライド版は呼ばれないことに注意)
	SetName(idname[objid]);

	// コンストラクタで指定した場合はエイリアスにも登録しておく。
	// ただし OBJ_NONE ならログを出すことも想定していないはずなので
	// エイリアスも追加しない。
	if (objid != OBJ_NONE) {
		AddAlias(GetName());
	}

	// 自分自身をリストに繋ぐ
	gMainApp.RegistObject(this);
}

// デストラクタ
Object::~Object()
{
	// 自分自身をリストから削除する
	gMainApp.UnregistObject(this);
}

// ログレベルを設定する。
void
Object::SetLogLevel(int loglevel_)
{
	loglevel = loglevel_;
}

// メッセージ表示
// 常に表示 (あらかじめ loglevel の評価をした後で呼び出す用)
void
Object::putmsgn(const char *fmt, ...) const
{
	char buf[1024];
	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);

	WriteLog(buf);
}

// ログ表示 (継承側で用意すること)
void
Object::putlogn(const char *fmt, ...) const
{
	PANIC("Object::putlogn called");
}

// ロガーに出力する共通部分
void
Object::WriteLog(const char *buf) const
{
	logger->WriteLog(buf);
}

// このオブジェクトの ID を文字列にして返す
const char *
Object::GetIdStr() const
{
	return GetIdStr(GetId());
}

// 指定のオブジェクト ID を文字列にして返す
/*static*/ const char *
Object::GetIdStr(uint target_id)
{
	if (target_id < idname.size()) {
		return idname[target_id];
	}
	return "unknownID?";
}

// 指定のオブジェクト ID を持つオブジェクトを返す。
/*static*/ Object *
Object::GetObject(uint target_id)
{
	return gMainApp.GetObject(target_id);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.