Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include "bin.h"
  2. #include <cstring>
  3. #include <cassert>
  4. #include <limits.h>
  5.  
  6. std::istream &operator>>(std::istream &in, read_le_int32 &r) {
  7.     r.data = 0;
  8.     for (size_t i = 0; i < sizeof(r.data); i++) {
  9.         int32_t c = 0;
  10.         in.read((char *)&c, sizeof(char));
  11.         r.data = r.data | c << (i * CHAR_BIT);
  12.     }
  13.     return in;
  14. }
  15.  
  16. std::ostream &operator<<(std::ostream &out, const write_le_int32 &w) {
  17.     for (size_t i = 0; i < sizeof(w.data); i++) {
  18.         char c = (w.data >> (i * CHAR_BIT)) & 0xFF;
  19.         out.write(&c, sizeof(char));
  20.     }
  21.     return out;
  22. }
  23.  
  24. std::istream &operator>>(std::istream &in, read_bool &r) {
  25.     r.data = in.get();
  26.     return in;
  27. }
  28.  
  29. std::ostream &operator<<(std::ostream &out, const write_bool &w) {
  30.     out.put(w.data ? 1 : 0);
  31.     return out;
  32. }
  33.  
  34. std::istream &operator>>(std::istream &in, read_cstring &r) {
  35.     for (size_t i = 0; ; i++) {
  36.         assert(i < r.size);
  37.         char c = in.get();
  38.         if (!in) {
  39.             r.data[i] = 0;
  40.             return in;
  41.         }
  42.         r.data[i] = c;
  43.         if (!c) return in;
  44.         if (i + 1 >= r.size) {
  45.             r.data[i] = 0;
  46.             in.setstate(std::ios_base::failbit);
  47.         }
  48.     }
  49.     return in;
  50. }
  51.  
  52. std::ostream &operator<<(std::ostream &out, const write_cstring &w) {
  53.     out.write(w.data, std::strlen(w.data) + 1);
  54.     return out;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement