|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2019 [email protected] ! 4: // ! 5: ! 6: #pragma once ! 7: ! 8: #include "header.h" ! 9: ! 10: // ホストのメモリ領域に対するストリームクラスみたいなもの。 ! 11: // データの受け渡しはホストエンディアンで、 ! 12: // アクセスはビッグエンディアンになる。 ! 13: class MemoryStreamBE ! 14: { ! 15: protected: ! 16: union union_ptr { ! 17: uint8 *b; ! 18: uint16 *w; ! 19: uint32 *l; ! 20: }; ! 21: ! 22: public: ! 23: // コンストラクタ ! 24: MemoryStreamBE() { ! 25: } ! 26: MemoryStreamBE(void *p) { ! 27: SetPtr(p); ! 28: } ! 29: // デストラクタ不要 ! 30: ! 31: // ポインタを設定する ! 32: void SetPtr(void *p) { ! 33: ptr.b = (uint8 *)p; ! 34: } ! 35: ! 36: // ポインタを取得する ! 37: void *GetPtr() const { ! 38: return (void *)ptr.b; ! 39: } ! 40: ! 41: // 1バイト読み込んでポインタを進める ! 42: uint32 Read8() { ! 43: uint32 data = *ptr.b++; ! 44: return data; ! 45: } ! 46: // BE で2バイト読み込んでポインタを進める ! 47: uint32 Read16() { ! 48: uint32 data = *ptr.w++; ! 49: return be16toh(data); ! 50: } ! 51: // BE で4バイト読み込んでポインタを進める ! 52: uint32 Read32() { ! 53: uint32 data = *ptr.l++; ! 54: return be32toh(data); ! 55: } ! 56: ! 57: // 1バイト書き込んでポインタを進める ! 58: void Write8(uint32 data) { ! 59: *ptr.b++ = data; ! 60: } ! 61: // BE で2バイト書き込んでポインタを進める ! 62: void Write16(uint32 data) { ! 63: *ptr.w++ = htobe16(data); ! 64: } ! 65: // BE で4バイト書き込んでポインタを進める ! 66: void Write32(uint32 data) { ! 67: *ptr.l++ = htobe32(data); ! 68: } ! 69: ! 70: private: ! 71: union_ptr ptr {}; ! 72: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.