Annotation of nono/lib/object.h, revision 1.1.1.2

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2018 [email protected]
                      4: //
                      5: 
                      6: #pragma once
                      7: 
                      8: #include "header.h"
                      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 オブジェクトなのにデバイス名とは一体...
                     75:        const char *devname = NULL;
                     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;

unix.superglobalmegacorp.com

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