--- nono/lib/memorystream.h 2026/04/29 17:04:30 1.1 +++ nono/lib/memorystream.h 2026/04/29 17:04:37 1.1.1.3 @@ -1,6 +1,7 @@ // // nono -// Copyright (C) 2019 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once @@ -12,13 +13,6 @@ // アクセスはビッグエンディアンになる。 class MemoryStreamBE { - protected: - union union_ptr { - uint8 *b; - uint16 *w; - uint32 *l; - }; - public: // コンストラクタ MemoryStreamBE() { @@ -30,43 +24,49 @@ class MemoryStreamBE // ポインタを設定する void SetPtr(void *p) { - ptr.b = (uint8 *)p; + ptr = (uint8 *)p; } // ポインタを取得する void *GetPtr() const { - return (void *)ptr.b; + return (void *)ptr; } // 1バイト読み込んでポインタを進める uint32 Read8() { - uint32 data = *ptr.b++; + uint32 data = *ptr++; return data; } // BE で2バイト読み込んでポインタを進める uint32 Read16() { - uint32 data = *ptr.w++; - return be16toh(data); + uint32 data; + data = Read8() << 8; + data |= Read8(); + return data; } // BE で4バイト読み込んでポインタを進める uint32 Read32() { - uint32 data = *ptr.l++; - return be32toh(data); + uint32 data; + data = Read16() << 16; + data |= Read16(); + return data; } // 1バイト書き込んでポインタを進める void Write8(uint32 data) { - *ptr.b++ = data; + *ptr++ = data; } // BE で2バイト書き込んでポインタを進める void Write16(uint32 data) { - *ptr.w++ = htobe16(data); + Write8(data >> 8); + Write8(data & 0xff); } // BE で4バイト書き込んでポインタを進める void Write32(uint32 data) { - *ptr.l++ = htobe32(data); + Write16(data >> 16); + Write16(data & 0xffff); } private: - union_ptr ptr {}; + uint8 *ptr {}; };