- removed polymorphic reflection, made static_reflect default because there are cases such as deserializing an array that you need more information than the runtime reflection can provide such as the ability to resize arrays and know the array content type. - refactored iostream, sstream, fstream to be much simpler, fewer indirections, and fixed getline. - json parsing works using code from mace. - value is reimplemented based upon mace::rpc::value and no longer uses the runtime reflection that was removed. - moved the typename utility to its own header
97 lines
3.1 KiB
C++
97 lines
3.1 KiB
C++
#pragma once
|
|
#include <fc/utility.hpp>
|
|
#include <fc/lexical_cast.hpp>
|
|
|
|
namespace fc {
|
|
class string;
|
|
|
|
class istream {
|
|
public:
|
|
virtual ~istream(){};
|
|
|
|
virtual size_t readsome( char* buf, size_t len ) = 0;
|
|
virtual istream& read( char* buf, size_t len ) = 0;
|
|
|
|
template<typename T>
|
|
friend istream& operator>>( istream& i, T& v ){ return i.read(v); }
|
|
|
|
virtual bool eof()const = 0;
|
|
|
|
protected:
|
|
virtual istream& read( int64_t& ) = 0;
|
|
virtual istream& read( uint64_t& ) = 0;
|
|
virtual istream& read( int32_t& ) = 0;
|
|
virtual istream& read( uint32_t& ) = 0;
|
|
virtual istream& read( int16_t& ) = 0;
|
|
virtual istream& read( uint16_t& ) = 0;
|
|
virtual istream& read( int8_t& ) = 0;
|
|
virtual istream& read( uint8_t& ) = 0;
|
|
virtual istream& read( float& ) = 0;
|
|
virtual istream& read( double& ) = 0;
|
|
virtual istream& read( bool& ) = 0;
|
|
virtual istream& read( char& ) = 0;
|
|
virtual istream& read( fc::string& ) = 0;
|
|
};
|
|
|
|
class ostream {
|
|
public:
|
|
virtual ~ostream(){};
|
|
|
|
virtual ostream& write( const char* buf, size_t len ) = 0;
|
|
virtual void close() = 0;
|
|
virtual void flush() = 0;
|
|
|
|
template<typename T>
|
|
friend ostream& operator<<( ostream& o, const T& v ) { return o.write(fc::lexical_cast<fc::string>(v)); }
|
|
friend ostream& operator<<( ostream& o, char* v ) { return o.write(v); }
|
|
friend ostream& operator<<( ostream& o, const char* v ) { return o.write(v); }
|
|
friend ostream& operator<<( ostream& o, const fc::string& v ){ return o.write(v); }
|
|
|
|
protected:
|
|
virtual ostream& write( const fc::string& ) = 0;
|
|
};
|
|
class iostream : public virtual ostream, public virtual istream {};
|
|
|
|
fc::istream& getline( fc::istream&, fc::string&, char delim = '\n' );
|
|
|
|
struct cout_t : virtual public ostream {
|
|
virtual ostream& write( const char* buf, size_t len );
|
|
virtual void close();
|
|
virtual void flush();
|
|
|
|
virtual ostream& write( const fc::string& );
|
|
};
|
|
|
|
struct cerr_t : virtual public ostream {
|
|
virtual ostream& write( const char* buf, size_t len );
|
|
virtual void close();
|
|
virtual void flush();
|
|
|
|
virtual ostream& write( const fc::string& );
|
|
};
|
|
|
|
struct cin_t : virtual public istream {
|
|
virtual size_t readsome( char* buf, size_t len );
|
|
virtual istream& read( char* buf, size_t len );
|
|
virtual bool eof()const;
|
|
|
|
virtual istream& read( int64_t& );
|
|
virtual istream& read( uint64_t& );
|
|
virtual istream& read( int32_t& );
|
|
virtual istream& read( uint32_t& );
|
|
virtual istream& read( int16_t& );
|
|
virtual istream& read( uint16_t& );
|
|
virtual istream& read( int8_t& );
|
|
virtual istream& read( uint8_t& );
|
|
virtual istream& read( float& );
|
|
virtual istream& read( double& );
|
|
virtual istream& read( bool& );
|
|
virtual istream& read( char& );
|
|
virtual istream& read( fc::string& );
|
|
};
|
|
|
|
|
|
extern cout_t cout;
|
|
extern cerr_t cerr;
|
|
extern cin_t cin;
|
|
}
|