#pragma once #include #include struct stream { primitives::templates2::mmap_file &m; uint8_t *p{m.p}; template operator T &() { auto &r = *(T *)p; p += sizeof(T); return r; } template auto span(size_t len) { auto s = std::span((T *)p, len); p += sizeof(T) * len; return s; } template void operator=(const T &v) { memcpy(p, (uint8_t*)&v, sizeof(v)); p += sizeof(v); } template void read(std::vector &v) { memcpy(v.data(), p, sizeof(T) * v.size()); p += sizeof(T) * v.size(); } void skip(size_t len) { p += len; } };