9 #include <boost/lexical_cast.hpp> 10 #include <boost/thread/mutex.hpp> 43 if( tmp && !tmp->
ready() ) {
54 if( tmp && !tmp->
ready() ) {
83 if( c == delim ) { s = ss.
str();
return i; }
84 if( c !=
'\r' ) ss.
write(&c,1);
93 size_t cout_t::writesome(
const std::shared_ptr<const char>&
buf,
size_t len,
size_t offset ) {
return writesome(buf.get() + offset, len); }
98 size_t cerr_t::writesome(
const std::shared_ptr<const char>&
buf,
size_t len,
size_t offset ) {
return writesome(buf.get() + offset, len); }
106 avail = (std::min)(int64_t(len),avail);
109 if( !((avail>0) && (len>0)) ) {
116 while( (avail>0) && (len>0) ) {
126 size_t cin_t::readsome(
const std::shared_ptr<char>&
buf,
size_t len,
size_t offset ) {
return readsome(buf.get() + offset, len); }
156 size_t r = readsome( buf, len );
161 if( tmp && !tmp->ready() ) {
164 }
while( len > 0 && !b.
eof );
172 std::shared_ptr<cin_t>
cin_ptr = std::make_shared<cin_t>();
173 std::shared_ptr<cout_t>
cout_ptr = std::make_shared<cout_t>();
174 std::shared_ptr<cerr_t>
cerr_ptr = std::make_shared<cerr_t>();
187 o.
write( v, strlen(v) );
193 o.
write( v.c_str(), v.size() );
199 return o << boost::lexical_cast<std::string>(v).c_str();
204 return o << boost::lexical_cast<std::string>(v).c_str();
209 return o << boost::lexical_cast<std::string>(v).c_str();
214 return o << boost::lexical_cast<std::string>(v).c_str();
219 return o << boost::lexical_cast<std::string>(v).c_str();
224 return o << boost::lexical_cast<std::string>(v).c_str();
229 return o << boost::lexical_cast<std::string>(v).c_str();
234 return o << boost::lexical_cast<std::string>(v).c_str();
239 return o << boost::lexical_cast<std::string>(v).c_str();
244 return o << boost::lexical_cast<std::string>(v).c_str();
250 return o << boost::lexical_cast<std::string>(v).c_str();
257 assert(
false &&
"not implemented");
277 while(
size_t(pos-buf) < len )
278 pos += readsome( pos, len - (pos - buf) );
284 size_t bytes_read = 0;
285 while( bytes_read < len )
286 bytes_read += readsome(buf, len - bytes_read, bytes_read + offset);
292 const char* pos =
buf;
293 while(
size_t(pos-buf) < len )
294 pos += writesome( pos, len - (pos - buf) );
300 size_t bytes_written = 0;
301 while( bytes_written < len )
302 bytes_written += writesome(buf, len - bytes_written, bytes_written + offset);
fc::promise< void >::ptr write_ready
virtual size_t writesome(const char *buf, size_t len)
static ptr create(const char *desc FC_TASK_NAME_DEFAULT_ARG)
istream & read(char *buf, size_t len)
std::shared_ptr< cerr_t > cerr_ptr
void set_exception(const fc::exception_ptr &e)
virtual size_t readsome(char *buf, size_t len)
fc::istream & getline(fc::istream &, std::string &, char delim='\n')
fc::promise< void >::ptr read_ready
volatile uint64_t read_pos
virtual istream & read(char *buf, size_t len)
auto async(Functor &&f, const char *desc FC_TASK_NAME_DEFAULT_ARG, priority prio=priority()) -> fc::future< decltype(f())>
auto operator<<(U &u, const fwd< T, S, A > &f) -> typename detail::insert_op< U, T >::type
std::shared_ptr< exception > exception_ptr
const T & wait(const microseconds &timeout=microseconds::maximum())
boost::mutex read_ready_mutex
void set_value(const T &v)
#define FC_THROW_EXCEPTION(EXCEPTION, FORMAT,...)
std::shared_ptr< cout_t > cout_ptr
virtual size_t writesome(const char *buf, size_t len)
auto operator>>(U &u, fwd< T, S, A > &f) -> typename detail::extract_op< U, T >::type
fc::thread & cin_thread()
volatile uint64_t write_pos
ostream & write(const char *buf, size_t len)
cin_buffer & get_cin_buffer()
std::shared_ptr< cin_t > cin_ptr