This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub kmyk/competitive-programming-library
#include "hack/fastio_printer.hpp"
#pragma once #include <algorithm> #include <cstdlib> #include <cstring> #include <string> #include <type_traits> #include <unistd.h> class printer { static constexpr int N = 131072; static constexpr int K = 64; char buf[N]; int i = 0; inline void flush() { write(STDOUT_FILENO, buf, i); i = 0; } public: printer() = default; printer(const printer &) = delete; printer & operator = (const printer &) = delete; ~printer() { flush(); } template <class Char, std::enable_if_t<std::is_same<Char, char>::value, int> = 0> inline void put(char c) { if (i == N) flush(); buf[i ++] = c; } template <class String, std::enable_if_t<std::is_same<String, std::string>::value, int> = 0> void put(const std::string & s) { for (int l = 0; l < (int)s.length(); ) { if (i == N) flush(); int r = std::min<int>(s.length(), l + (N - i)); memcpy(buf + i, s.data() + l, r - l); i += r - l; l = r; } } template <class Integer, std::enable_if_t<std::is_integral<Integer>::value, int> = 0> void put(Integer x) { if (N - i < K) flush(); if (std::is_signed<Integer>::value and x < 0) { x *= -1; buf[i ++] = '-'; } if (x == 0) { buf[i ++] = '0'; return; } char s[K]; int j = 0; while (x) { s[j ++] = x % 10 + '0'; x /= 10; } while (j) { buf[i ++] = s[-- j]; } } };
#line 2 "hack/fastio_printer.hpp" #include <algorithm> #include <cstdlib> #include <cstring> #include <string> #include <type_traits> #include <unistd.h> class printer { static constexpr int N = 131072; static constexpr int K = 64; char buf[N]; int i = 0; inline void flush() { write(STDOUT_FILENO, buf, i); i = 0; } public: printer() = default; printer(const printer &) = delete; printer & operator = (const printer &) = delete; ~printer() { flush(); } template <class Char, std::enable_if_t<std::is_same<Char, char>::value, int> = 0> inline void put(char c) { if (i == N) flush(); buf[i ++] = c; } template <class String, std::enable_if_t<std::is_same<String, std::string>::value, int> = 0> void put(const std::string & s) { for (int l = 0; l < (int)s.length(); ) { if (i == N) flush(); int r = std::min<int>(s.length(), l + (N - i)); memcpy(buf + i, s.data() + l, r - l); i += r - l; l = r; } } template <class Integer, std::enable_if_t<std::is_integral<Integer>::value, int> = 0> void put(Integer x) { if (N - i < K) flush(); if (std::is_signed<Integer>::value and x < 0) { x *= -1; buf[i ++] = '-'; } if (x == 0) { buf[i ++] = '0'; return; } char s[K]; int j = 0; while (x) { s[j ++] = x % 10 + '0'; x /= 10; } while (j) { buf[i ++] = s[-- j]; } } };