|
|
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: //
17: class Object
18: {
19: public:
20: Object();
21: virtual ~Object();
22:
23: //
24: // ログ
25: //
26:
27: // ログ識別名
28: std::string logname;
29: // ログレベル
30: // 0: 未実装動作などのデバッグログではない情報
31: // 1: 大雑把なデバッグログ
32: // 2: 詳細なデバッグログ
33: // 3: うるさいデバッグログ
34: int loglevel = 0;
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.3 ! root 75: std::string devname;
1.1 root 76:
77: //
78: // モニター
79: //
80:
81: // モニター更新 (派生クラス側で用意)
82: // 戻り値はモニタースクリーンの有無。
83: // 基底クラスのこれはモニタースクリーンを提供していないので false を返す。
84: // 派生クラス側のは必ず true を返すこと。
85: virtual bool MonitorUpdate();
86:
87: // モニター用のテキストスクリーン
88: TextScreen monitor;
89: };
90:
91: // 全オブジェクトのリスト
92: extern std::vector<Object*> gObjects;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.