• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • Examples
  • File List

mem_file.h

00001 /***************************************************************************
00002  *  include/stxxl/bits/io/mem_file.h
00003  *
00004  *  Part of the STXXL. See http://stxxl.sourceforge.net
00005  *
00006  *  Copyright (C) 2008 Andreas Beckmann <[email protected]>
00007  *
00008  *  Distributed under the Boost Software License, Version 1.0.
00009  *  (See accompanying file LICENSE_1_0.txt or copy at
00010  *  http://www.boost.org/LICENSE_1_0.txt)
00011  **************************************************************************/
00012 
00013 #ifndef STXXL_MEM_FILE_HEADER
00014 #define STXXL_MEM_FILE_HEADER
00015 
00016 #include <stxxl/bits/io/iobase.h>
00017 
00018 
00019 __STXXL_BEGIN_NAMESPACE
00020 
00023 
00025 class mem_file : public file
00026 {
00027     char * ptr;
00028     unsigned_type sz;
00029 
00030 public:
00033     mem_file(
00034         int disk = -1);
00035     request_ptr aread(
00036         void * buffer,
00037         stxxl::int64 pos,
00038         size_t bytes,
00039         completion_handler on_cmpl);
00040     request_ptr awrite(
00041         void * buffer,
00042         stxxl::int64 pos,
00043         size_t bytes,
00044         completion_handler on_cmpl);
00045     char * get_ptr() const;
00046     ~mem_file();
00047     stxxl::int64 size();
00048     void set_size(stxxl::int64 newsize);
00049     void lock();
00050     void delete_region(int64 offset, unsigned_type size);
00051 };
00052 
00054 class mem_request : public request
00055 {
00056     friend class mem_file;
00057 
00058 protected:
00059     // states of request
00060     enum { OP = 0, DONE = 1, READY2DIE = 2 };
00061     // OP - operating, DONE - request served,
00062     // READY2DIE - can be destroyed
00063 
00064     state _state;
00065     mutex waiters_mutex;
00066     std::set<onoff_switch *> waiters;
00067 
00068     mem_request(
00069         mem_file * f,
00070         void * buf,
00071         stxxl::int64 off,
00072         size_t b,
00073         request_type t,
00074         completion_handler on_cmpl);
00075     bool add_waiter(onoff_switch * sw);
00076     void delete_waiter(onoff_switch * sw);
00077     int nwaiters();             // returns number of waiters
00078     void check_aligning();
00079     void serve();
00080 
00081 public:
00082     virtual ~mem_request();
00083     void wait();
00084     bool poll();
00085     const char * io_type();
00086 };
00087 
00089 
00090 __STXXL_END_NAMESPACE
00091 
00092 #endif // !STXXL_MEM_FILE_HEADER

Generated by  doxygen 1.7.1