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

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:        // メッセージ出力
        !            52:        void putmsg(const char *fmt, ...) __printflike(2, 3);
        !            53:        void vputmsg(const char *fmt, va_list ap) __printflike(2, 0);
        !            54: 
        !            55:        // ログ出力
        !            56:        // loglevel が lv 以上の時だけ表示。
        !            57:        // 仮想時刻と現在の PC も表示する。VM 実行中は基本的にこれで表示。
        !            58:        inline void
        !            59:        putlog(int lv, const char *fmt, ...) __printflike(3, 4)
        !            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:        // ログ出力(ログレベル限定なし)
        !            70:        void putlog(const char *fmt, ...) __printflike(2, 3);
        !            71:        void vputlog(const char *fmt, va_list ap) __printflike(2, 0);
        !            72: 
        !            73:        // デバイス名(デバッグ表示用)
        !            74:        // XXX オブジェクトなのにデバイス名とは一体...
        !            75:        const char *devname = NULL;
        !            76: 
        !            77:        // ログの最新行
        !            78:        char lastbuf[1024] {};
        !            79: 
        !            80:        //
        !            81:        // モニター
        !            82:        //
        !            83: 
        !            84:        // モニター更新 (派生クラス側で用意)
        !            85:        // 戻り値はモニタースクリーンの有無。
        !            86:        // 基底クラスのこれはモニタースクリーンを提供していないので false を返す。
        !            87:        // 派生クラス側のは必ず true を返すこと。
        !            88:        virtual bool MonitorUpdate();
        !            89: 
        !            90:        // モニター用のテキストスクリーン
        !            91:        TextScreen monitor;
        !            92: };
        !            93: 
        !            94: // 全オブジェクトのリスト
        !            95: 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.