Advertisement
Alex_tz307

PARSARE

Aug 16th, 2021
801
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. struct InParser {
  2.   FILE * fin;
  3.   char * buff;
  4.   int sp;
  5.  
  6.   char read_ch() {
  7.     ++sp;
  8.     if (sp == 4096) {
  9.       sp = 0;
  10.       fread(buff, 1, 4096, fin);
  11.     }
  12.     return buff[sp];
  13.   }
  14.  
  15.   InParser(const char * nume) {
  16.     fin = fopen(nume, "r");
  17.     buff = new char[4096]();
  18.     sp = 4095;
  19.   }
  20.  
  21.   InParser & operator >> (int & n) {
  22.     char c;
  23.     while (!isdigit(c = read_ch()) && c != '-');
  24.     int sgn = 1;
  25.     if (c == '-') {
  26.       n = 0;
  27.       sgn = -1;
  28.     } else {
  29.       n = c - '0';
  30.     }
  31.     while (isdigit(c = read_ch())) {
  32.       n = 10 * n + c - '0';
  33.     }
  34.     n *= sgn;
  35.     return *this;
  36.   }
  37.  
  38.   InParser & operator >> (long long & n) {
  39.     char c;
  40.     n = 0;
  41.     while (!isdigit(c = read_ch()) && c != '-');
  42.     long long sgn = 1;
  43.     if (c == '-') {
  44.       n = 0;
  45.       sgn = -1;
  46.     } else {
  47.       n = c - '0';
  48.     }
  49.     while (isdigit(c = read_ch())) {
  50.       n = 10 * n + c - '0';
  51.     }
  52.     n *= sgn;
  53.     return *this;
  54.   }
  55. };
  56.  
  57. struct OutParser {
  58.   FILE * fout;
  59.   char * buff;
  60.   int sp;
  61.  
  62.   void write_ch(char ch) {
  63.     if (sp == 50000) {
  64.       fwrite(buff, 1, 50000, fout);
  65.       sp = 0;
  66.       buff[sp++] = ch;
  67.     } else {
  68.       buff[sp++] = ch;
  69.     }
  70.   }
  71.  
  72.   OutParser(const char * name) {
  73.     fout = fopen(name, "w");
  74.     buff = new char[50000]();
  75.     sp = 0;
  76.   }
  77.  
  78.   ~OutParser() {
  79.     fwrite(buff, 1, sp, fout);
  80.     fclose(fout);
  81.   }
  82.  
  83.   OutParser & operator << (int vu32) {
  84.     if (vu32 <= 9) {
  85.       write_ch(vu32 + '0');
  86.     } else {
  87.       ( * this) << (vu32 / 10);
  88.       write_ch(vu32 % 10 + '0');
  89.     }
  90.     return *this;
  91.   }
  92.  
  93.   OutParser & operator << (long long vu64) {
  94.     if (vu64 <= 9) {
  95.       write_ch(vu64 + '0');
  96.     } else {
  97.       ( * this) << (vu64 / 10);
  98.       write_ch(vu64 % 10 + '0');
  99.     }
  100.     return *this;
  101.   }
  102.  
  103.   OutParser & operator << (char ch) {
  104.     write_ch(ch);
  105.     return *this;
  106.   }
  107.  
  108.   OutParser & operator << (const char * ch) {
  109.     while ( * ch) {
  110.       write_ch( * ch);
  111.       ++ch;
  112.     }
  113.     return *this;
  114.   }
  115. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement