#include <cstdio>
#include<iostream>
#include <sstream>
#include <chrono>
std:: chrono :: time_point < std:: chrono :: steady_clock > hClock( )
{
return std:: chrono :: steady_clock :: now ( ) ;
}
std:: uint32_t TimeDuration( std:: chrono :: time_point < std:: chrono :: steady_clock > Time)
{
return std:: chrono :: duration_cast < std:: chrono :: nanoseconds > ( hClock( ) - Time) .count ( ) ;
}
void test( )
{
char c = '0' ;
char buffer[ 33 ] ;
char * loc= buffer;
char * end = buffer+ 32 ;
auto time = hClock( ) ;
while ( buffer! = end && ( c = getchar_unlocked( ) ) && ( c ! = - 1 && c ! = '\n ' && c ! = '\r ' ) )
* loc++ = c;
* loc = '\0 ' ;
std:: cout << "getchar_unlocked took: " << TimeDuration( time ) << " nano-seconds. " ;
std:: cout << "read: " << buffer<< "\n " ;
loc = buffer;
* loc = '\0 ' ;
time = hClock( ) ;
while ( buffer! = end && ( c = getchar ( ) ) && ( c ! = - 1 && c ! = '\n ' && c ! = '\r ' ) )
* loc++ = c;
* loc = '\0 ' ;
std:: cout << "getchar took: " << TimeDuration( time ) << " nano-seconds. " ;
std:: cout << "read: " << buffer<< "\n " ;
loc = buffer;
* loc = '\0 ' ;
time = hClock( ) ;
std:: cin .getline ( buffer, 32 ) ;
std:: cout << "getline took: " << TimeDuration( time ) << " nano-seconds. " ;
std:: cout << "read: " << buffer<< "\n " ;
loc = buffer;
* loc = '\0 ' ;
time = hClock( ) ;
int count = scanf ( "%[^\n ]32s " , buffer) ;
std:: cout << "scanf took: " << TimeDuration( time ) << " nano-seconds. " ;
std:: cout << "read: " << buffer<< "\n " ;
loc = buffer;
* loc = '\0 ' ;
loc = fgets ( buffer, 32 , stdin ) ; //scanf seems to be leaving the newline in the buffer
time = hClock( ) ;
loc = fgets ( buffer, 32 , stdin ) ;
std:: cout << "gets took: " << TimeDuration( time ) << " nano-seconds. " ;
std:: cout << "read: " << buffer<< "\n \n " ;
loc = buffer;
* loc = '\0 ' ;
}
int main( )
{
test( ) ;
test( ) ;
test( ) ;
return 0 ;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgoKc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jaz4gaENsb2NrKCkKewogICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwp9CgpzdGQ6OnVpbnQzMl90IFRpbWVEdXJhdGlvbihzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrPiBUaW1lKQp7CiAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzPihoQ2xvY2soKSAtIFRpbWUpLmNvdW50KCk7Cn0KCnZvaWQgdGVzdCgpIAp7CgljaGFyIGMgPSAnMCc7CgljaGFyIGJ1ZmZlclszM107CgljaGFyKiBsb2M9YnVmZmVyOwoJY2hhciogZW5kID0gYnVmZmVyKzMyOwoJCglhdXRvIHRpbWUgPSBoQ2xvY2soKTsKCXdoaWxlKGJ1ZmZlciE9ZW5kICYmIChjID0gZ2V0Y2hhcl91bmxvY2tlZCgpKSAmJiAoYyAhPSAtMSAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHInKSkKCQkqbG9jKysgPSBjOwoJKmxvYyA9ICdcMCc7CglzdGQ6OmNvdXQ8PCJnZXRjaGFyX3VubG9ja2VkIHRvb2s6ICI8PFRpbWVEdXJhdGlvbih0aW1lKTw8IiBuYW5vLXNlY29uZHMuICI7CglzdGQ6OmNvdXQ8PCJyZWFkOiAiPDxidWZmZXI8PCJcbiI7Cglsb2MgPSBidWZmZXI7CgkqbG9jID0gJ1wwJzsKCQoJdGltZSA9IGhDbG9jaygpOwoJd2hpbGUoYnVmZmVyIT1lbmQgJiYgKGMgPSBnZXRjaGFyKCkpICAmJiAoYyAhPSAtMSAmJiBjICE9ICdcbicgJiYgYyAhPSAnXHInKSkKCQkqbG9jKysgPSBjOwoJKmxvYyA9ICdcMCc7CglzdGQ6OmNvdXQ8PCJnZXRjaGFyIHRvb2s6ICI8PFRpbWVEdXJhdGlvbih0aW1lKTw8IiBuYW5vLXNlY29uZHMuICI7CglzdGQ6OmNvdXQ8PCJyZWFkOiAiPDxidWZmZXI8PCJcbiI7Cglsb2MgPSBidWZmZXI7CgkqbG9jID0gJ1wwJzsKCQoJdGltZSA9IGhDbG9jaygpOwoJc3RkOjpjaW4uZ2V0bGluZShidWZmZXIsIDMyKTsKCXN0ZDo6Y291dDw8ImdldGxpbmUgdG9vazogIjw8VGltZUR1cmF0aW9uKHRpbWUpPDwiIG5hbm8tc2Vjb25kcy4gIjsKCXN0ZDo6Y291dDw8InJlYWQ6ICI8PGJ1ZmZlcjw8IlxuIjsKCWxvYyA9IGJ1ZmZlcjsKCSpsb2MgPSAnXDAnOwoJCgl0aW1lID0gaENsb2NrKCk7CglpbnQgY291bnQgPSBzY2FuZigiJVteXG5dMzJzICIsIGJ1ZmZlcik7CglzdGQ6OmNvdXQ8PCJzY2FuZiB0b29rOiAiPDxUaW1lRHVyYXRpb24odGltZSk8PCIgbmFuby1zZWNvbmRzLiAiOwoJc3RkOjpjb3V0PDwicmVhZDogIjw8YnVmZmVyPDwiXG4iOwoJbG9jID0gYnVmZmVyOwoJKmxvYyA9ICdcMCc7CgkKCWxvYyA9IGZnZXRzKGJ1ZmZlciwgMzIsIHN0ZGluKTsgLy9zY2FuZiBzZWVtcyB0byBiZSBsZWF2aW5nIHRoZSBuZXdsaW5lIGluIHRoZSBidWZmZXIKCXRpbWUgPSBoQ2xvY2soKTsKCWxvYyA9IGZnZXRzKGJ1ZmZlciwgMzIsIHN0ZGluKTsKCXN0ZDo6Y291dDw8ImdldHMgdG9vazogIjw8VGltZUR1cmF0aW9uKHRpbWUpPDwiIG5hbm8tc2Vjb25kcy4gIjsKICAgIHN0ZDo6Y291dDw8InJlYWQ6ICI8PGJ1ZmZlcjw8IlxuXG4iOwoJbG9jID0gYnVmZmVyOwoJKmxvYyA9ICdcMCc7Cn0KCmludCBtYWluKCkKewoJdGVzdCgpOwoJdGVzdCgpOwoJdGVzdCgpOwoJcmV0dXJuIDA7Cn0=
stdin
SGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmU=
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There