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

ufs_file.h

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

Generated by  doxygen 1.7.1