/usr/include/stxxl/bits/io
NameSizeModeActions
boostfd_file.h21210644editdlrm
completion_handler.h28340644editdlrm
create_file.h13310644editdlrm
disk_queued_file.h17460644editdlrm
disk_queues.h39620644editdlrm
file.h76760644editdlrm
fileperblock_file.h25380644editdlrm
io.h12710644editdlrm
iostats.h162380644editdlrm
linuxaio_file.h25740644editdlrm
linuxaio_queue.h31090644editdlrm
linuxaio_request.h20990644editdlrm
mem_file.h17440644editdlrm
mmap_file.h18700644editdlrm
request.h31450644editdlrm
request_interface.h26820644editdlrm
request_operations.h51880644editdlrm
request_queue.h12450644editdlrm
request_queue_impl_1q.h21030644editdlrm
request_queue_impl_qwqr.h22740644editdlrm
request_queue_impl_worker.h20290644editdlrm
request_with_state.h16990644editdlrm
request_with_waiters.h15760644editdlrm
serving_request.h13870644editdlrm
simdisk_file.h42830644editdlrm
syscall_file.h18440644editdlrm
ufs_file_base.h18650644editdlrm
wbtl_file.h34150644editdlrm
wfs_file_base.h16630644editdlrm
wincall_file.h20450644editdlrm
Edit: /usr/include/stxxl/bits/io/disk_queues.h (3962B)
/*************************************************************************** * include/stxxl/bits/io/disk_queues.h * * Part of the STXXL. See http://stxxl.sourceforge.net * * Copyright (C) 2002 Roman Dementiev * Copyright (C) 2008-2010 Andreas Beckmann * Copyright (C) 2009 Johannes Singler * Copyright (C) 2014 Timo Bingmann * * 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_DISK_QUEUES_HEADER #define STXXL_IO_DISK_QUEUES_HEADER #include #include #include #include #include #include #include #include #include STXXL_BEGIN_NAMESPACE //! \addtogroup reqlayer //! \{ //! Encapsulates disk queues. //! \remark is a singleton class disk_queues : public singleton { friend class singleton; typedef stxxl::int64 DISKID; typedef std::map request_queue_map; protected: request_queue_map queues; disk_queues() { stxxl::stats::get_instance(); // initialize stats before ourselves } public: void add_request(request_ptr& req, DISKID disk) { #ifdef STXXL_HACK_SINGLE_IO_THREAD disk = 42; #endif request_queue_map::iterator qi = queues.find(disk); request_queue* q; if (qi == queues.end()) { // create new request queue #if STXXL_HAVE_LINUXAIO_FILE if (dynamic_cast(req.get())) q = queues[disk] = new linuxaio_queue( dynamic_cast(req->get_file())->get_desired_queue_length() ); else #endif q = queues[disk] = new request_queue_impl_qwqr(); } else q = qi->second; q->add_request(req); } //! Cancel a request. //! The specified request is canceled unless already being processed. //! However, cancelation cannot be guaranteed. //! Cancelled requests must still be waited for in order to ensure correct //! operation. //! \param req request to cancel //! \param disk disk number for disk that \c req was scheduled on //! \return \c true iff the request was canceled successfully bool cancel_request(request_ptr& req, DISKID disk) { #ifdef STXXL_HACK_SINGLE_IO_THREAD disk = 42; #endif if (queues.find(disk) != queues.end()) return queues[disk]->cancel_request(req); else return false; } request_queue * get_queue(DISKID disk) { if (queues.find(disk) != queues.end()) return queues[disk]; else return NULL; } ~disk_queues() { // deallocate all queues for (request_queue_map::iterator i = queues.begin(); i != queues.end(); i++) delete (*i).second; } //! Changes requests priorities. //! \param op one of: //! - READ, read requests are served before write requests within a disk queue //! - WRITE, write requests are served before read requests within a disk queue //! - NONE, read and write requests are served by turns, alternately void set_priority_op(request_queue::priority_op op) { for (request_queue_map::iterator i = queues.begin(); i != queues.end(); i++) i->second->set_priority_op(op); } }; //! \} STXXL_END_NAMESPACE #endif // !STXXL_IO_DISK_QUEUES_HEADER // vim: et:ts=4:sw=4