|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2022 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // 諸情報付きのアドレス ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: class saddr_t ! 14: { ! 15: public: ! 16: // コンストラクタ ! 17: saddr_t() { } ! 18: ! 19: saddr_t(uint32 addr_, bool super_) ! 20: : saddr_t(addr_, super_, false) { } ! 21: ! 22: saddr_t(uint32 addr_, bool super_, bool data_) { ! 23: Set(addr_, super_, data_); ! 24: } ! 25: // コピーコンストラクタ ! 26: saddr_t(const saddr_t& rhs) { ! 27: Set(rhs); ! 28: } ! 29: // 代入演算子 ! 30: saddr_t& operator=(const saddr_t& rhs) { ! 31: Set(rhs); ! 32: return *this; ! 33: } ! 34: ! 35: // 代入演算子 (uint32 を代入するとアドレスだけ差し替える) ! 36: saddr_t& operator=(uint32 rhs) { ! 37: SetAddr(rhs); ! 38: return *this; ! 39: } ! 40: ! 41: // 代入 ! 42: void Set(uint32 addr_, bool super_, bool data_) { ! 43: addr = addr_; ! 44: super = super_; ! 45: data = data_; ! 46: } ! 47: ! 48: uint32 GetAddr() const { return addr; } ! 49: bool IsSuper() const { return super; } ! 50: bool IsData() const { return data; } ! 51: void SetAddr(uint32 addr_) { addr = addr_; } ! 52: void SetSuper(bool super_) { super = super_; } ! 53: void SetData(bool data_) { data = data_; } ! 54: ! 55: // (uint32)saddr でアドレスだけ取り出せると楽 ! 56: explicit operator uint32() const { return GetAddr(); } ! 57: ! 58: // saddr += n でアドレス進められると楽 ! 59: uint32 operator+=(uint32 val) { ! 60: addr += val; ! 61: return addr; ! 62: } ! 63: // saddr++ でアドレス進められると楽 ! 64: void operator++(int n) { ! 65: addr++; ! 66: } ! 67: ! 68: private: ! 69: void Set(const saddr_t& rhs) { ! 70: addr = rhs.addr; ! 71: super = rhs.super; ! 72: data = rhs.data; ! 73: } ! 74: ! 75: uint32 addr {}; // アドレス (32bit) ! 76: bool super {}; // スーパーバイザアクセスなら true ! 77: bool data {}; // データ空間アクセスなら true ! 78: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.