Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bin.h"
- #include <cstring>
- #include <cassert>
- #include <limits.h>
- std::istream &operator>>(std::istream &in, read_le_int32 &r) {
- r.data = 0;
- for (size_t i = 0; i < sizeof(r.data); i++) {
- int32_t c = 0;
- in.read((char *)&c, sizeof(char));
- r.data = r.data | c << (i * CHAR_BIT);
- }
- return in;
- }
- std::ostream &operator<<(std::ostream &out, const write_le_int32 &w) {
- for (size_t i = 0; i < sizeof(w.data); i++) {
- char c = (w.data >> (i * CHAR_BIT)) & 0xFF;
- out.write(&c, sizeof(char));
- }
- return out;
- }
- std::istream &operator>>(std::istream &in, read_bool &r) {
- r.data = in.get();
- return in;
- }
- std::ostream &operator<<(std::ostream &out, const write_bool &w) {
- out.put(w.data ? 1 : 0);
- return out;
- }
- std::istream &operator>>(std::istream &in, read_cstring &r) {
- for (size_t i = 0; ; i++) {
- assert(i < r.size);
- char c = in.get();
- if (!in) {
- r.data[i] = 0;
- return in;
- }
- r.data[i] = c;
- if (!c) return in;
- if (i + 1 >= r.size) {
- r.data[i] = 0;
- in.setstate(std::ios_base::failbit);
- }
- }
- return in;
- }
- std::ostream &operator<<(std::ostream &out, const write_cstring &w) {
- out.write(w.data, std::strlen(w.data) + 1);
- return out;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement