I/O Concepts
There are several C++ concepts inside the Harlinn::Common::Core::IO
namespace, describing
features of I/O related classes and templates, enabling
StreamReader
template<typename T>
concept StreamReader = requires( T t, void* buffer, size_t count )
{
{ t.Read( buffer, count ) }->std::convertible_to<long long>;
};
StreamWriter
template<typename T>
concept StreamWriter = requires( T t, const void* constBuffer, size_t count )
{
{ t.Write( constBuffer, count ) }->std::convertible_to<long long>;
};
StreamPosition
template<typename T>
concept StreamPosition = requires( T t, long long position )
{
{ t.Position( ) }->std::convertible_to<long long>;
{ t.SetPosition( position ) };
};
StreamSize
template<typename T>
concept StreamSize = requires( T t, long long size )
{
{ t.Size( ) }->std::convertible_to<long long>;
{ t.SetSize( size ) };
};
StreamIO
template<typename T>
concept StreamIO = ( StreamReader<T> && StreamWriter<T> );
StreamSeek
template<typename T>
concept StreamSeek = requires( T t, long long offset, SeekOrigin seekOrigin )
{
{ t.Seek( offset, seekOrigin ) }->std::convertible_to<long long>;
};
StreamFeatureTests
template<typename T>
concept StreamFeatureTests = requires( T t )
{
{ t.CanRead( ) } ->std::convertible_to<bool>;
{ t.CanSeek( ) } ->std::convertible_to<bool>;
{ t.CanTimeout( ) } ->std::convertible_to<bool>;
{ t.CanWrite( ) } ->std::convertible_to<bool>;
};
StreamFlush
template<typename T>
concept StreamFlush = requires( T t )
{
{ t.Flush( ) };
};
StreamClone
template<typename T>
concept StreamClone = requires( T t )
{
{ t.Clone( ) } -> std::convertible_to<T>;
};