lsnes rr2-β24
[lsnes.git] / src / library / int24.cpp
blob3547030f11aede33383f71563a8b8935d3d55d80
1 #include "int24.hpp"
2 #include <cstring>
4 ss_uint24_t::ss_uint24_t() throw()
8 ss_uint24_t::ss_uint24_t(uint32_t val) throw()
10 short magic = 256;
11 memcpy(v, reinterpret_cast<char*>(&val) + *reinterpret_cast<char*>(&magic), 3);
14 ss_uint24_t::operator uint32_t() const throw()
16 uint32_t val = 0;
17 short magic = 256;
18 memcpy(reinterpret_cast<char*>(&val) + *reinterpret_cast<char*>(&magic), v, 3);
19 return val;
22 ss_int24_t::ss_int24_t() throw()
26 ss_int24_t::ss_int24_t(int32_t val) throw()
28 short magic = 256;
29 memcpy(v, reinterpret_cast<char*>(&val) + *reinterpret_cast<char*>(&magic), 3);
32 ss_int24_t::ss_int24_t(const ss_uint24_t& val) throw()
34 memcpy(this, &val, 3);
36 ss_int24_t::operator int32_t() const throw()
38 int32_t val = 0;
39 short magic = 256;
40 memcpy(reinterpret_cast<char*>(&val) + *reinterpret_cast<char*>(&magic), v, 3);
41 if(val & 0x800000)
42 val |= 0xFF000000U;
43 return val;
46 namespace
48 char assert1[(sizeof(ss_int24_t) == 3) ? 1 : -1];
49 char assert2[(sizeof(ss_uint24_t) == 3) ? 1 : -1];
52 void dummy_3263623632786738267323()
54 char* x = assert1;
55 x[0] = 0;
56 x = assert2;
57 x[0] = 1;