Annotation of nono/lib/memorystream.h, revision 1.1.1.5

1.1       root        1: //
                      2: // nono
1.1.1.2   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
1.1.1.4   root        7: //
                      8: // メモリストリーム
                      9: //
                     10: 
1.1       root       11: #pragma once
                     12: 
                     13: #include "header.h"
                     14: 
                     15: // ホストのメモリ領域に対するストリームクラスみたいなもの。
                     16: // データの受け渡しはホストエンディアンで、
                     17: // アクセスはビッグエンディアンになる。
                     18: class MemoryStreamBE
                     19: {
                     20:  public:
                     21:        // コンストラクタ
                     22:        MemoryStreamBE() {
                     23:        }
1.1.1.4   root       24:        MemoryStreamBE(void *start_) {
                     25:                Init(start_);
1.1       root       26:        }
                     27:        // デストラクタ不要
                     28: 
1.1.1.4   root       29:        // 開始ポインタを設定する
                     30:        // 現在のポインタ位置は開始ポインタ位置になる
                     31:        void Init(void *start_) {
                     32:                start = (uint8 *)start_;
                     33:                ptr = start;
                     34:        }
                     35: 
                     36:        // 開始ポインタを取得する
                     37:        void *GetStartPtr() const
                     38:        {
                     39:                return (void *)start;
                     40:        }
                     41: 
                     42:        // バイトオフセットを設定する
                     43:        void SetOffset(uint32 ofs)
                     44:        {
                     45:                ptr = start + ofs;
1.1       root       46:        }
                     47: 
1.1.1.4   root       48:        // 現在のバイトオフセットを取得する
                     49:        uint32 GetOffset() const
                     50:        {
                     51:                return (uint32)(ptr - start);
1.1       root       52:        }
                     53: 
                     54:        // 1バイト読み込んでポインタを進める
                     55:        uint32 Read8() {
1.1.1.3   root       56:                uint32 data = *ptr++;
1.1       root       57:                return data;
                     58:        }
                     59:        // BE で2バイト読み込んでポインタを進める
                     60:        uint32 Read16() {
1.1.1.3   root       61:                uint32 data;
                     62:                data  = Read8() << 8;
                     63:                data |= Read8();
                     64:                return data;
1.1       root       65:        }
                     66:        // BE で4バイト読み込んでポインタを進める
                     67:        uint32 Read32() {
1.1.1.3   root       68:                uint32 data;
                     69:                data  = Read16() << 16;
                     70:                data |= Read16();
                     71:                return data;
1.1       root       72:        }
                     73: 
                     74:        // 1バイト書き込んでポインタを進める
                     75:        void Write8(uint32 data) {
1.1.1.3   root       76:                *ptr++ = data;
1.1       root       77:        }
                     78:        // BE で2バイト書き込んでポインタを進める
                     79:        void Write16(uint32 data) {
1.1.1.3   root       80:                Write8(data >> 8);
                     81:                Write8(data & 0xff);
1.1       root       82:        }
                     83:        // BE で4バイト書き込んでポインタを進める
                     84:        void Write32(uint32 data) {
1.1.1.3   root       85:                Write16(data >> 16);
                     86:                Write16(data & 0xffff);
1.1       root       87:        }
                     88: 
1.1.1.5 ! root       89:        // LE で2バイト書き込んでポインタを進める。アドレス整列不要。
        !            90:        void Write16LE(uint32 data) {
        !            91:                Write8(data & 0xff);
        !            92:                Write8(data >> 8);
        !            93:        }
        !            94: 
        !            95:        // 文字列を書き込んでポインタを進める。
        !            96:        // 書き込む文字列も終端の '\0' まで書く。
        !            97:        void WriteString(const char *p) {
        !            98:                while (*p) {
        !            99:                        Write8(*p++);
        !           100:                }
        !           101:                Write8('\0');
        !           102:        }
        !           103: 
1.1       root      104:  private:
1.1.1.3   root      105:        uint8 *ptr {};
1.1.1.4   root      106:        uint8 *start {};
1.1       root      107: };

unix.superglobalmegacorp.com

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