#include <iostream>
#include <sstream>
size_t size_of_stream(const std::stringstream& ss)
{
std::streambuf* buf = ss.rdbuf();
const auto original = buf->pubseekoff( 0, ss.cur, ss.out );
const auto end = buf->pubseekoff( 0, ss.end, ss.out );
buf->pubseekpos( original, ss.out );
return (size_t)end;
}
int main()
{
std::stringstream ss1;
ss1 << "Hello";
std::cout << size_of_stream(ss1) << " " << ss1.str().size() << std::endl;
std::stringstream ss2("World");
std::cout << size_of_stream(ss2) << " " << ss2.str().size() << std::endl;
std::stringstream ss3("");
std::cout << size_of_stream(ss3) << " " << ss3.str().size() << std::endl;
std::stringstream ss4;
std::cout << size_of_stream(ss4) << " " << ss4.str().size() << std::endl;
std::stringstream ss5;
ss5 << "";
std::cout << size_of_stream(ss5) << " " << ss5.str().size() << std::endl;
std::stringstream ss6( "hello world" );
std::cout << size_of_stream(ss6) << " " << ss6.str().size() << std::endl;
std::string temp;
ss6 >> temp;
std::cout << size_of_stream(ss6) << " " << ss6.str().size() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCnNpemVfdCBzaXplX29mX3N0cmVhbShjb25zdCBzdGQ6OnN0cmluZ3N0cmVhbSYgc3MpCnsKICAgIHN0ZDo6c3RyZWFtYnVmKiBidWYgPSBzcy5yZGJ1ZigpOwoKCWNvbnN0IGF1dG8gb3JpZ2luYWwgPSBidWYtPnB1YnNlZWtvZmYoIDAsIHNzLmN1ciwgc3Mub3V0ICk7Cgljb25zdCBhdXRvIGVuZCA9IGJ1Zi0+cHVic2Vla29mZiggMCwgc3MuZW5kLCBzcy5vdXQgKTsKCWJ1Zi0+cHVic2Vla3Bvcyggb3JpZ2luYWwsIHNzLm91dCApOwoJCglyZXR1cm4gKHNpemVfdCllbmQ7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmdzdHJlYW0gc3MxOwogICAgc3MxIDw8ICJIZWxsbyI7CiAgICBzdGQ6OmNvdXQgPDwgc2l6ZV9vZl9zdHJlYW0oc3MxKSA8PCAiICIgPDwgc3MxLnN0cigpLnNpemUoKSA8PCBzdGQ6OmVuZGw7CgogICAgc3RkOjpzdHJpbmdzdHJlYW0gc3MyKCJXb3JsZCIpOwogICAgc3RkOjpjb3V0IDw8IHNpemVfb2Zfc3RyZWFtKHNzMikgPDwgIiAiIDw8IHNzMi5zdHIoKS5zaXplKCkgPDwgc3RkOjplbmRsOwogICAgCiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczMoIiIpOwogICAgc3RkOjpjb3V0IDw8IHNpemVfb2Zfc3RyZWFtKHNzMykgPDwgIiAiIDw8IHNzMy5zdHIoKS5zaXplKCkgPDwgc3RkOjplbmRsOwogICAgCiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczQ7CiAgICBzdGQ6OmNvdXQgPDwgc2l6ZV9vZl9zdHJlYW0oc3M0KSA8PCAiICIgPDwgc3M0LnN0cigpLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzNTsKICAgIHNzNSA8PCAiIjsKICAgIHN0ZDo6Y291dCA8PCBzaXplX29mX3N0cmVhbShzczUpIDw8ICIgIiA8PCBzczUuc3RyKCkuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M2KCAiaGVsbG8gd29ybGQiICk7CiAgICBzdGQ6OmNvdXQgPDwgc2l6ZV9vZl9zdHJlYW0oc3M2KSA8PCAiICIgPDwgc3M2LnN0cigpLnNpemUoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OnN0cmluZyB0ZW1wOwogICAgc3M2ID4+IHRlbXA7CiAgICBzdGQ6OmNvdXQgPDwgc2l6ZV9vZl9zdHJlYW0oc3M2KSA8PCAiICIgPDwgc3M2LnN0cigpLnNpemUoKSA8PCBzdGQ6OmVuZGw7Cn0=