mirror of
https://github.com/libretro/bsnes-libretro-cplusplus98.git
synced 2025-04-12 15:13:34 +00:00
Update nall:: to v74
This commit is contained in:
parent
0ec09d072c
commit
ad593aa7fd
@ -3,12 +3,12 @@
|
||||
|
||||
namespace nall {
|
||||
template<int bits> inline unsigned uclamp(const unsigned x) {
|
||||
enum { y = (1U << bits) - 1 };
|
||||
enum { y = (1U << (bits - 1)) + ((1U << (bits - 1)) - 1) };
|
||||
return y + ((x - y) & -(x < y)); //min(x, y);
|
||||
}
|
||||
|
||||
template<int bits> inline unsigned uclip(const unsigned x) {
|
||||
enum { m = (1U << bits) - 1 };
|
||||
enum { m = (1U << (bits - 1)) + ((1U << (bits - 1)) - 1) };
|
||||
return (x & m);
|
||||
}
|
||||
|
||||
|
@ -145,23 +145,19 @@ SNESCartridge::SNESCartridge(const uint8_t *data, unsigned size) {
|
||||
xml << " <map mode='linear' address='00-7f:8000-ffff'/>\n";
|
||||
xml << " <map mode='linear' address='80-ff:8000-ffff'/>\n";
|
||||
xml << " </rom>\n";
|
||||
xml << " <supergameboy revision='1'>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " </supergameboy>\n";
|
||||
xml << " <icd2 revision='1'>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </icd2>\n";
|
||||
} else if(type == TypeSuperGameBoy2Bios) {
|
||||
xml << " <rom>\n";
|
||||
xml << " <map mode='linear' address='00-7f:8000-ffff'/>\n";
|
||||
xml << " <map mode='linear' address='80-ff:8000-ffff'/>\n";
|
||||
xml << " </rom>\n";
|
||||
xml << " <supergameboy revision='2'>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " </supergameboy>\n";
|
||||
xml << " <icd2 revision='2'>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </icd2>\n";
|
||||
} else if(has_spc7110) {
|
||||
xml << " <rom>\n";
|
||||
xml << " <map mode='shadow' address='00-0f:8000-ffff'/>\n";
|
||||
@ -379,10 +375,8 @@ SNESCartridge::SNESCartridge(const uint8_t *data, unsigned size) {
|
||||
|
||||
if(has_srtc) {
|
||||
xml << " <srtc>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:2800-2801'/>\n";
|
||||
xml << " <map address='80-bf:2800-2801'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " <map address='00-3f:2800-2801'/>\n";
|
||||
xml << " <map address='80-bf:2800-2801'/>\n";
|
||||
xml << " </srtc>\n";
|
||||
}
|
||||
|
||||
@ -400,119 +394,90 @@ SNESCartridge::SNESCartridge(const uint8_t *data, unsigned size) {
|
||||
|
||||
if(has_cx4) {
|
||||
xml << " <cx4>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </cx4>\n";
|
||||
}
|
||||
|
||||
if(has_dsp1) {
|
||||
xml << " <upd77c25 program='dsp1b.bin' sha256='4d42db0f36faef263d6b93f508e8c1c4ae8fc2605fd35e3390ecc02905cd420c'>\n";
|
||||
xml << " <necdsp revision='upd7725' frequency='8000000' program='dsp1b.bin' sha256='4d42db0f36faef263d6b93f508e8c1c4ae8fc2605fd35e3390ecc02905cd420c'>\n";
|
||||
if(dsp1_mapper == DSP1LoROM1MB) {
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='20-3f:8000-bfff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-bfff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='20-3f:c000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:c000-ffff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " <dr mask='004000' test='000000'/>\n";
|
||||
xml << " <sr mask='004000' test='004000'/>\n";
|
||||
xml << " <map address='20-3f:8000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-ffff'/>\n";
|
||||
} else if(dsp1_mapper == DSP1LoROM2MB) {
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='60-6f:0000-3fff'/>\n";
|
||||
xml << " <map address='e0-ef:0000-3fff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='60-6f:4000-7fff'/>\n";
|
||||
xml << " <map address='e0-ef:4000-7fff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " <dr mask='004000' test='000000'/>\n";
|
||||
xml << " <sr mask='004000' test='004000'/>\n";
|
||||
xml << " <map address='60-6f:0000-7fff'/>\n";
|
||||
xml << " <map address='e0-ef:0000-7fff'/>\n";
|
||||
} else if(dsp1_mapper == DSP1HiROM) {
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='00-1f:6000-6fff'/>\n";
|
||||
xml << " <map address='80-9f:6000-6fff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='00-1f:7000-7fff'/>\n";
|
||||
xml << " <map address='80-9f:7000-7fff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " <dr mask='001000' test='000000'/>\n";
|
||||
xml << " <sr mask='001000' test='001000'/>\n";
|
||||
xml << " <map address='00-1f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-9f:6000-7fff'/>\n";
|
||||
}
|
||||
xml << " </upd77c25>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_dsp2) {
|
||||
xml << " <upd77c25 program='dsp2.bin' sha256='5efbdf96ed0652790855225964f3e90e6a4d466cfa64df25b110933c6cf94ea1'>\n";
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='20-3f:8000-bfff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-bfff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='20-3f:c000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:c000-ffff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " </upd77c25>\n";
|
||||
xml << " <necdsp revision='upd7725' frequency='8000000' program='dsp2.bin' sha256='5efbdf96ed0652790855225964f3e90e6a4d466cfa64df25b110933c6cf94ea1'>\n";
|
||||
xml << " <dr mask='004000' test='000000'/>\n";
|
||||
xml << " <sr mask='004000' test='004000'/>\n";
|
||||
xml << " <map address='20-3f:8000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-ffff'/>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_dsp3) {
|
||||
xml << " <upd77c25 program='dsp3.bin' sha256='2e635f72e4d4681148bc35429421c9b946e4f407590e74e31b93b8987b63ba90'>\n";
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='20-3f:8000-bfff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-bfff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='20-3f:c000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:c000-ffff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " </upd77c25>\n";
|
||||
xml << " <necdsp revision='upd7725' frequency='8000000' program='dsp3.bin' sha256='2e635f72e4d4681148bc35429421c9b946e4f407590e74e31b93b8987b63ba90'>\n";
|
||||
xml << " <dr mask='004000' test='000000'/>\n";
|
||||
xml << " <sr mask='004000' test='004000'/>\n";
|
||||
xml << " <map address='20-3f:8000-ffff'/>\n";
|
||||
xml << " <map address='a0-bf:8000-ffff'/>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_dsp4) {
|
||||
xml << " <upd77c25 program='dsp4.bin' sha256='63ede17322541c191ed1fdf683872554a0a57306496afc43c59de7c01a6e764a'>\n";
|
||||
xml << " <dr>\n";
|
||||
xml << " <map address='30-3f:8000-bfff'/>\n";
|
||||
xml << " <map address='b0-bf:8000-bfff'/>\n";
|
||||
xml << " </dr>\n";
|
||||
xml << " <sr>\n";
|
||||
xml << " <map address='30-3f:c000-ffff'/>\n";
|
||||
xml << " <map address='b0-bf:c000-ffff'/>\n";
|
||||
xml << " </sr>\n";
|
||||
xml << " </upd77c25>\n";
|
||||
xml << " <necdsp revision='upd7725' frequency='8000000' program='dsp4.bin' sha256='63ede17322541c191ed1fdf683872554a0a57306496afc43c59de7c01a6e764a'>\n";
|
||||
xml << " <dr mask='004000' test='000000'/>\n";
|
||||
xml << " <sr mask='004000' test='004000'/>\n";
|
||||
xml << " <map address='30-3f:8000-ffff'/>\n";
|
||||
xml << " <map address='b0-bf:8000-ffff'/>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_obc1) {
|
||||
xml << " <obc1>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " <map address='00-3f:6000-7fff'/>\n";
|
||||
xml << " <map address='80-bf:6000-7fff'/>\n";
|
||||
xml << " </obc1>\n";
|
||||
}
|
||||
|
||||
if(has_st010) {
|
||||
xml << " <setadsp program='ST-0010'>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='68-6f:0000-0fff'/>\n";
|
||||
xml << " <map address='e8-ef:0000-0fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " </setadsp>\n";
|
||||
xml << " <necdsp revision='upd96050' frequency='10000000' program='st0010.bin' sha256='55c697e864562445621cdf8a7bf6e84ae91361e393d382a3704e9aa55559041e'>\n";
|
||||
xml << " <dr mask='080001' test='000000'/>\n";
|
||||
xml << " <sr mask='080001' test='000001'/>\n";
|
||||
xml << " <dp mask='080000' test='080000'/>\n";
|
||||
xml << " <map address='60-6f:0000-0fff'/>\n";
|
||||
xml << " <map address='e0-ef:0000-0fff'/>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_st011) {
|
||||
//ST-0011 addresses not verified; chip is unsupported
|
||||
xml << " <setadsp program='ST-0011'>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='68-6f:0000-0fff'/>\n";
|
||||
xml << " <map address='e8-ef:0000-0fff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " </setadsp>\n";
|
||||
xml << " <necdsp revision='upd96050' frequency='15000000' program='st0011.bin' sha256='b71d71fa5f18ff39b2b3688e914a04d1286b613002ddde827529fdc54650a130'>\n";
|
||||
xml << " <dr mask='080001' test='000000'/>\n";
|
||||
xml << " <sr mask='080001' test='000001'/>\n";
|
||||
xml << " <dp mask='080000' test='080000'/>\n";
|
||||
xml << " <map address='60-6f:0000-0fff'/>\n";
|
||||
xml << " <map address='e0-ef:0000-0fff'/>\n";
|
||||
xml << " </necdsp>\n";
|
||||
}
|
||||
|
||||
if(has_st018) {
|
||||
xml << " <setarisc program='ST-0018'>\n";
|
||||
xml << " <mmio>\n";
|
||||
xml << " <map address='00-3f:3800-38ff'/>\n";
|
||||
xml << " <map address='80-bf:3800-38ff'/>\n";
|
||||
xml << " </mmio>\n";
|
||||
xml << " <map address='00-3f:3800-38ff'/>\n";
|
||||
xml << " <map address='80-bf:3800-38ff'/>\n";
|
||||
xml << " </setarisc>\n";
|
||||
}
|
||||
|
||||
|
162
nall/varint.hpp
162
nall/varint.hpp
@ -7,82 +7,110 @@
|
||||
namespace nall {
|
||||
template<unsigned bits> class uint_t {
|
||||
private:
|
||||
enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value
|
||||
typedef typename static_if<
|
||||
sizeof(int) >= bytes,
|
||||
unsigned int,
|
||||
typename static_if<
|
||||
sizeof(long) >= bytes,
|
||||
unsigned long,
|
||||
typename static_if<
|
||||
sizeof(long long) >= bytes,
|
||||
unsigned long long,
|
||||
void
|
||||
>::type
|
||||
>::type
|
||||
>::type T;
|
||||
T data;
|
||||
unsigned data;
|
||||
|
||||
public:
|
||||
inline operator T() const { return data; }
|
||||
inline T operator ++(int) { T r = data; data = uclip<bits>(data + 1); return r; }
|
||||
inline T operator --(int) { T r = data; data = uclip<bits>(data - 1); return r; }
|
||||
inline T operator ++() { return data = uclip<bits>(data + 1); }
|
||||
inline T operator --() { return data = uclip<bits>(data - 1); }
|
||||
inline T operator =(const T i) { return data = uclip<bits>(i); }
|
||||
inline T operator |=(const T i) { return data = uclip<bits>(data | i); }
|
||||
inline T operator ^=(const T i) { return data = uclip<bits>(data ^ i); }
|
||||
inline T operator &=(const T i) { return data = uclip<bits>(data & i); }
|
||||
inline T operator<<=(const T i) { return data = uclip<bits>(data << i); }
|
||||
inline T operator>>=(const T i) { return data = uclip<bits>(data >> i); }
|
||||
inline T operator +=(const T i) { return data = uclip<bits>(data + i); }
|
||||
inline T operator -=(const T i) { return data = uclip<bits>(data - i); }
|
||||
inline T operator *=(const T i) { return data = uclip<bits>(data * i); }
|
||||
inline T operator /=(const T i) { return data = uclip<bits>(data / i); }
|
||||
inline T operator %=(const T i) { return data = uclip<bits>(data % i); }
|
||||
inline operator unsigned() const { return data; }
|
||||
inline unsigned operator ++(int) { unsigned r = data; data = uclip<bits>(data + 1); return r; }
|
||||
inline unsigned operator --(int) { unsigned r = data; data = uclip<bits>(data - 1); return r; }
|
||||
inline unsigned operator ++() { return data = uclip<bits>(data + 1); }
|
||||
inline unsigned operator --() { return data = uclip<bits>(data - 1); }
|
||||
inline unsigned operator =(const unsigned i) { return data = uclip<bits>(i); }
|
||||
inline unsigned operator |=(const unsigned i) { return data = uclip<bits>(data | i); }
|
||||
inline unsigned operator ^=(const unsigned i) { return data = uclip<bits>(data ^ i); }
|
||||
inline unsigned operator &=(const unsigned i) { return data = uclip<bits>(data & i); }
|
||||
inline unsigned operator<<=(const unsigned i) { return data = uclip<bits>(data << i); }
|
||||
inline unsigned operator>>=(const unsigned i) { return data = uclip<bits>(data >> i); }
|
||||
inline unsigned operator +=(const unsigned i) { return data = uclip<bits>(data + i); }
|
||||
inline unsigned operator -=(const unsigned i) { return data = uclip<bits>(data - i); }
|
||||
inline unsigned operator *=(const unsigned i) { return data = uclip<bits>(data * i); }
|
||||
inline unsigned operator /=(const unsigned i) { return data = uclip<bits>(data / i); }
|
||||
inline unsigned operator %=(const unsigned i) { return data = uclip<bits>(data % i); }
|
||||
|
||||
inline uint_t() : data(0) {}
|
||||
inline uint_t(const T i) : data(uclip<bits>(i)) {}
|
||||
inline uint_t(const unsigned i) : data(uclip<bits>(i)) {}
|
||||
};
|
||||
|
||||
template<unsigned bits> class int_t {
|
||||
private:
|
||||
enum { bytes = (bits + 7) >> 3 }; //minimum number of bytes needed to store value
|
||||
typedef typename static_if<
|
||||
sizeof(int) >= bytes,
|
||||
signed int,
|
||||
typename static_if<
|
||||
sizeof(long) >= bytes,
|
||||
signed long,
|
||||
typename static_if<
|
||||
sizeof(long long) >= bytes,
|
||||
signed long long,
|
||||
void
|
||||
>::type
|
||||
>::type
|
||||
>::type T;
|
||||
T data;
|
||||
private:
|
||||
signed data;
|
||||
|
||||
public:
|
||||
inline operator T() const { return data; }
|
||||
inline T operator ++(int) { T r = data; data = sclip<bits>(data + 1); return r; }
|
||||
inline T operator --(int) { T r = data; data = sclip<bits>(data - 1); return r; }
|
||||
inline T operator ++() { return data = sclip<bits>(data + 1); }
|
||||
inline T operator --() { return data = sclip<bits>(data - 1); }
|
||||
inline T operator =(const T i) { return data = sclip<bits>(i); }
|
||||
inline T operator |=(const T i) { return data = sclip<bits>(data | i); }
|
||||
inline T operator ^=(const T i) { return data = sclip<bits>(data ^ i); }
|
||||
inline T operator &=(const T i) { return data = sclip<bits>(data & i); }
|
||||
inline T operator<<=(const T i) { return data = sclip<bits>(data << i); }
|
||||
inline T operator>>=(const T i) { return data = sclip<bits>(data >> i); }
|
||||
inline T operator +=(const T i) { return data = sclip<bits>(data + i); }
|
||||
inline T operator -=(const T i) { return data = sclip<bits>(data - i); }
|
||||
inline T operator *=(const T i) { return data = sclip<bits>(data * i); }
|
||||
inline T operator /=(const T i) { return data = sclip<bits>(data / i); }
|
||||
inline T operator %=(const T i) { return data = sclip<bits>(data % i); }
|
||||
public:
|
||||
inline operator signed() const { return data; }
|
||||
inline signed operator ++(int) { signed r = data; data = sclip<bits>(data + 1); return r; }
|
||||
inline signed operator --(int) { signed r = data; data = sclip<bits>(data - 1); return r; }
|
||||
inline signed operator ++() { return data = sclip<bits>(data + 1); }
|
||||
inline signed operator --() { return data = sclip<bits>(data - 1); }
|
||||
inline signed operator =(const signed i) { return data = sclip<bits>(i); }
|
||||
inline signed operator |=(const signed i) { return data = sclip<bits>(data | i); }
|
||||
inline signed operator ^=(const signed i) { return data = sclip<bits>(data ^ i); }
|
||||
inline signed operator &=(const signed i) { return data = sclip<bits>(data & i); }
|
||||
inline signed operator<<=(const signed i) { return data = sclip<bits>(data << i); }
|
||||
inline signed operator>>=(const signed i) { return data = sclip<bits>(data >> i); }
|
||||
inline signed operator +=(const signed i) { return data = sclip<bits>(data + i); }
|
||||
inline signed operator -=(const signed i) { return data = sclip<bits>(data - i); }
|
||||
inline signed operator *=(const signed i) { return data = sclip<bits>(data * i); }
|
||||
inline signed operator /=(const signed i) { return data = sclip<bits>(data / i); }
|
||||
inline signed operator %=(const signed i) { return data = sclip<bits>(data % i); }
|
||||
|
||||
inline int_t() : data(0) {}
|
||||
inline int_t(const T i) : data(sclip<bits>(i)) {}
|
||||
inline int_t() : data(0) {}
|
||||
inline int_t(const signed i) : data(sclip<bits>(i)) {}
|
||||
};
|
||||
|
||||
class varuint_t {
|
||||
private:
|
||||
unsigned data;
|
||||
unsigned mask;
|
||||
|
||||
public:
|
||||
inline operator unsigned() const { return data; }
|
||||
inline unsigned operator ++(int) { unsigned r = data; data = (data + 1) & mask; return r; }
|
||||
inline unsigned operator --(int) { unsigned r = data; data = (data - 1) & mask; return r; }
|
||||
inline unsigned operator ++() { return data = (data + 1) & mask; }
|
||||
inline unsigned operator --() { return data = (data - 1) & mask; }
|
||||
inline unsigned operator =(const unsigned i) { return data = (i) & mask; }
|
||||
inline unsigned operator |=(const unsigned i) { return data = (data | i) & mask; }
|
||||
inline unsigned operator ^=(const unsigned i) { return data = (data ^ i) & mask; }
|
||||
inline unsigned operator &=(const unsigned i) { return data = (data & i) & mask; }
|
||||
inline unsigned operator<<=(const unsigned i) { return data = (data << i) & mask; }
|
||||
inline unsigned operator>>=(const unsigned i) { return data = (data >> i) & mask; }
|
||||
inline unsigned operator +=(const unsigned i) { return data = (data + i) & mask; }
|
||||
inline unsigned operator -=(const unsigned i) { return data = (data - i) & mask; }
|
||||
inline unsigned operator *=(const unsigned i) { return data = (data * i) & mask; }
|
||||
inline unsigned operator /=(const unsigned i) { return data = (data / i) & mask; }
|
||||
inline unsigned operator %=(const unsigned i) { return data = (data % i) & mask; }
|
||||
|
||||
inline void bits(unsigned bits) { mask = (1U << (bits - 1)) + ((1U << (bits - 1)) - 1); data &= mask; }
|
||||
inline varuint_t() : data(0), mask(~0U) {}
|
||||
inline varuint_t(const unsigned i) : data(i), mask(~0U) {}
|
||||
};
|
||||
|
||||
class varuintmax_t {
|
||||
private:
|
||||
uintmax_t data;
|
||||
uintmax_t mask;
|
||||
|
||||
public:
|
||||
inline operator uintmax_t() const { return data; }
|
||||
inline uintmax_t operator ++(int) { uintmax_t r = data; data = (data + 1) & mask; return r; }
|
||||
inline uintmax_t operator --(int) { uintmax_t r = data; data = (data - 1) & mask; return r; }
|
||||
inline uintmax_t operator ++() { return data = (data + 1) & mask; }
|
||||
inline uintmax_t operator --() { return data = (data - 1) & mask; }
|
||||
inline uintmax_t operator =(const uintmax_t i) { return data = (i) & mask; }
|
||||
inline uintmax_t operator |=(const uintmax_t i) { return data = (data | i) & mask; }
|
||||
inline uintmax_t operator ^=(const uintmax_t i) { return data = (data ^ i) & mask; }
|
||||
inline uintmax_t operator &=(const uintmax_t i) { return data = (data & i) & mask; }
|
||||
inline uintmax_t operator<<=(const uintmax_t i) { return data = (data << i) & mask; }
|
||||
inline uintmax_t operator>>=(const uintmax_t i) { return data = (data >> i) & mask; }
|
||||
inline uintmax_t operator +=(const uintmax_t i) { return data = (data + i) & mask; }
|
||||
inline uintmax_t operator -=(const uintmax_t i) { return data = (data - i) & mask; }
|
||||
inline uintmax_t operator *=(const uintmax_t i) { return data = (data * i) & mask; }
|
||||
inline uintmax_t operator /=(const uintmax_t i) { return data = (data / i) & mask; }
|
||||
inline uintmax_t operator %=(const uintmax_t i) { return data = (data % i) & mask; }
|
||||
|
||||
inline void bits(unsigned bits) { mask = (1ULL << (bits - 1)) + ((1ULL << (bits - 1)) - 1); data &= mask; }
|
||||
inline varuintmax_t() : data(0), mask(~0ULL) {}
|
||||
inline varuintmax_t(const uintmax_t i) : data(i),
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user