Path: blob/master/libsnes/bsnes/nall/mosaic/bitstream.hpp
2 views
#ifdef NALL_MOSAIC_INTERNAL_HPP12namespace nall {3namespace mosaic {45struct bitstream {6filemap fp;7uint8_t *data;8unsigned size;9bool readonly;10bool endian;1112inline bool read(uint64_t addr) const {13if(data == nullptr || (addr >> 3) >= size) return 0;14unsigned mask = endian == 0 ? (0x01 << (addr & 7)) : (0x80 >> (addr & 7));15return data[addr >> 3] & mask;16}1718inline void write(uint64_t addr, bool value) {19if(data == nullptr || readonly == true || (addr >> 3) >= size) return;20unsigned mask = endian == 0 ? (0x01 << (addr & 7)) : (0x80 >> (addr & 7));21if(value == 0) data[addr >> 3] &= ~mask;22if(value == 1) data[addr >> 3] |= mask;23}2425inline bool open(const string &filename) {26readonly = false;27if(fp.open(filename, filemap::mode::readwrite) == false) {28readonly = true;29if(fp.open(filename, filemap::mode::read) == false) {30return false;31}32}33data = fp.data();34size = fp.size();35return true;36}3738inline void close() {39fp.close();40data = nullptr;41}4243inline bitstream() : data(nullptr), endian(1) {44}4546inline ~bitstream() {47close();48}49};5051}52}5354#endif555657