00001 #ifndef SAGA_DIRECTORY_HPP
00002 #define SAGA_DIRECTORY_HPP
00003
00004 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00005 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/directory.hpp")
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00015 #pragma wave option(output: null)
00016 #endif
00017
00018 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00019 #pragma once
00020 #endif
00021
00022
00023 #include <string>
00024
00025
00026 #include <saga/saga/call.hpp>
00027 #include <saga/saga/base.hpp>
00028 #include <saga/saga/types.hpp>
00029 #include <saga/saga/object.hpp>
00030 #include <saga/saga/session.hpp>
00031
00032 #include <saga/saga/packages/namespace/namespace_dir.hpp>
00033 #include <saga/saga/packages/file/file.hpp>
00034
00035
00036 #if defined(BOOST_MSVC)
00037 #pragma warning(push)
00038 #pragma warning(disable: 4251 4231 4275 4660)
00039 #endif
00040
00041 #ifdef SAGA_DEBUG
00042 #include <saga/saga/packages/file/preprocessed/directory.hpp>
00043 #else
00044
00045 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00046 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/directory.hpp")
00047 #endif
00049 namespace saga { namespace filesystem {
00050
00055 class SAGA_FILE_PACKAGE_EXPORT directory
00056 : public saga::name_space::directory
00057 {
00058 private:
00060
00061 SAGA_CALL_CREATE_PRIV_3(session const&, saga::url, int)
00062
00063
00064 SAGA_CALL_PRIV_1 (get_size, saga::url)
00065 SAGA_CALL_PRIV_1 (is_file, saga::url)
00066
00067 SAGA_CALL_PRIV_2 (open, saga::url, int)
00068 SAGA_CALL_PRIV_2 (open_dir, saga::url, int)
00070
00071 protected:
00073
00074 TR1::shared_ptr <saga::impl::directory> get_impl() const;
00075 friend class saga::impl::directory;
00076 explicit directory (saga::impl::directory * init);
00078
00079 public:
00084 directory (session const & s, saga::url url,
00085 int mode = ReadWrite);
00086
00091 explicit directory (saga::url url, int mode = ReadWrite);
00092
00097 explicit directory (saga::object const& o);
00098
00103 directory (void);
00104
00109 ~directory (void);
00110
00114 static directory create(session const& s, saga::url url, int mode = Read)
00115 {
00116 return directory(s, url, mode);
00117 }
00118 SAGA_CALL_CREATE_3_DEF_1(session const&, saga::url, int, Read)
00119
00120
00122 static directory create(saga::url url, int mode = Read)
00123 {
00124 return directory(url, mode);
00125 }
00126 template <typename Tag>
00127 static saga::task create(saga::url url, int mode = Read)
00128 {
00129 return create<Tag>(detail::get_the_session(), url, mode);
00130 }
00131
00136 directory &operator= (saga::object const& o);
00137
00145 saga::off_t get_size(saga::url url)
00146 {
00147 saga::task t = get_sizepriv(url, saga::task_base::Sync());
00148 return t.get_result<saga::off_t>();
00149 }
00151 SAGA_CALL_PUB_1_DEF_0 (get_size, saga::url)
00153
00159 bool is_file(saga::url url)
00160 {
00161 saga::task t = is_filepriv(url, saga::task_base::Sync());
00162 return t.get_result<bool>();
00163 }
00165 SAGA_CALL_PUB_1_DEF_0(is_file, saga::url)
00167
00176 saga::filesystem::file open(saga::url url,
00177 int flags = saga::filesystem::Read)
00178 {
00179 saga::task t = openpriv(url, flags, saga::task_base::Sync());
00180 return t.get_result<saga::filesystem::file>();
00181 }
00183 SAGA_CALL_PUB_2_DEF_1(open, saga::url, int, saga::filesystem::Read)
00185
00194 saga::filesystem::directory open_dir(saga::url url,
00195 int flags = saga::filesystem::ReadWrite)
00196 {
00197 saga::task t = open_dirpriv(url, flags, saga::task_base::Sync());
00198 return t.get_result<saga::filesystem::directory>();
00199 }
00201 SAGA_CALL_PUB_2_DEF_1(open_dir, saga::url, int,
00202 saga::filesystem::ReadWrite)
00204
00205 };
00206
00207 }}
00208
00209 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00210 #pragma wave option(output: null)
00211 #endif
00212
00213 #endif // !defined(SAGA_DEBUG)
00214
00215
00216 #if defined(BOOST_MSVC)
00217 #pragma warning(pop)
00218 #endif
00219
00220 #endif // SAGA_DIRECTORY_HPP