|
|
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.