|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "textscreen.h"
10: #include <vector>
11:
12: //
13: // 基本オブジェクト
14: //
15: // ログ出力機能を持つ。
16: //
1.1.1.4 root 17: class Object : public IMonitor
1.1 root 18: {
19: public:
20: Object();
1.1.1.4 root 21: virtual ~Object() override;
1.1 root 22:
23: //
24: // ログ
25: //
26:
27: // ログ識別名
1.1.1.5 ! root 28: std::string logname {};
1.1 root 29: // ログレベル
30: // 0: 未実装動作などのデバッグログではない情報
31: // 1: 大雑把なデバッグログ
32: // 2: 詳細なデバッグログ
33: // 3: うるさいデバッグログ
1.1.1.5 ! root 34: int loglevel {};
1.1 root 35:
36: // メッセージ出力
37: // loglevel が lv 以上の時だけ表示。
38: // こちらは仮想時刻、現在の PC を表示しない。Init() など VM 実行前や
39: // 仮想マシン(特に仮想時刻、PC) に関係ないあたりはこちらを使用。
40: inline void
41: putmsg(int lv, const char *fmt, ...) __printflike(3, 4)
42: {
43: if (__predict_false(loglevel >= lv)) {
44: va_list ap;
45:
46: va_start(ap, fmt);
47: vputmsg(fmt, ap);
48: va_end(ap);
49: }
50: }
51: // メッセージ出力
1.1.1.2 root 52: void putmsg(const char *fmt, ...) const __printflike(2, 3);
53: void vputmsg(const char *fmt, va_list ap) const __printflike(2, 0);
1.1 root 54:
55: // ログ出力
56: // loglevel が lv 以上の時だけ表示。
57: // 仮想時刻と現在の PC も表示する。VM 実行中は基本的にこれで表示。
58: inline void
1.1.1.2 root 59: putlog(int lv, const char *fmt, ...) const __printflike(3, 4)
1.1 root 60: {
61: if (__predict_false(loglevel >= lv)) {
62: va_list ap;
63:
64: va_start(ap, fmt);
65: vputlog(fmt, ap);
66: va_end(ap);
67: }
68: }
69: // ログ出力(ログレベル限定なし)
1.1.1.2 root 70: void putlog(const char *fmt, ...) const __printflike(2, 3);
71: void vputlog(const char *fmt, va_list ap) const __printflike(2, 0);
1.1 root 72:
73: // デバイス名(デバッグ表示用)
74: // XXX オブジェクトなのにデバイス名とは一体...
1.1.1.5 ! root 75: std::string devname {};
1.1 root 76:
77: //
78: // モニター
79: //
80:
81: // モニター更新 (派生クラス側で用意)
1.1.1.4 root 82: void MonitorUpdate(TextScreen&) override { }
83: nnSize GetMonitorSize() override { return monitor_size; }
84: nnSize monitor_size {};
1.1 root 85: };
86:
87: // 全オブジェクトのリスト
88: extern std::vector<Object*> gObjects;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.