/usr/include/stxxl/bits/io
Edit: /usr/include/stxxl/bits/io/request_interface.h (2682B)
/***************************************************************************
* include/stxxl/bits/io/request_interface.h
*
* Part of the STXXL. See http://stxxl.sourceforge.net
*
* Copyright (C) 2002 Roman Dementiev
* Copyright (C) 2008, 2009, 2011 Andreas Beckmann
* Copyright (C) 2009 Johannes Singler
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
**************************************************************************/
#ifndef STXXL_IO_REQUEST_INTERFACE_HEADER
#define STXXL_IO_REQUEST_INTERFACE_HEADER
#include
#include
#include
#include
STXXL_BEGIN_NAMESPACE
//! \addtogroup reqlayer
//! \{
class onoff_switch;
//! Functional interface of a request.
//!
//! Since all library I/O operations are asynchronous,
//! one needs to keep track of their status:
//! e.g. whether an I/O operation completed or not.
class request_interface : private noncopyable
{
public:
typedef stxxl::external_size_type offset_type;
typedef stxxl::internal_size_type size_type;
enum request_type { READ, WRITE };
public:
virtual bool add_waiter(onoff_switch* sw) = 0;
virtual void delete_waiter(onoff_switch* sw) = 0;
protected:
virtual void notify_waiters() = 0;
protected:
virtual void completed(bool canceled) = 0;
public:
//! Suspends calling thread until completion of the request.
virtual void wait(bool measure_time = true) = 0;
//! Cancel a request.
//!
//! The request is canceled unless already being processed.
//! However, cancelation cannot be guaranteed.
//! Canceled requests must still be waited for in order to ensure correct operation.
//! If the request was canceled successfully, the completion handler will not be called.
//! \return \c true iff the request was canceled successfully
virtual bool cancel() = 0;
//! Polls the status of the request.
//! \return \c true if request is completed, otherwise \c false
virtual bool poll() = 0;
//! Identifies the type of I/O implementation.
//! \return pointer to null terminated string of characters, containing the name of I/O implementation
virtual const char * io_type() const = 0;
//! Dumps properties of a request.
virtual std::ostream & print(std::ostream& out) const = 0;
virtual ~request_interface()
{ }
};
//! \}
STXXL_END_NAMESPACE
#endif // !STXXL_IO_REQUEST_INTERFACE_HEADER
// vim: et:ts=4:sw=4