00001 #ifndef SAGA_PACKAGES_DATA_NAMESPACEENTRY_HPP
00002 #define SAGA_PACKAGES_DATA_NAMESPACEENTRY_HPP
00003
00004 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00005 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/namespace_entry.hpp")
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00015 #pragma wave option(preserve: 0, output: null)
00016 #endif
00017
00018
00019 #include <string>
00020
00021
00022 #include <saga/saga/call.hpp>
00023 #include <saga/saga/base.hpp>
00024 #include <saga/saga/object.hpp>
00025 #include <saga/saga/session.hpp>
00026 #include <saga/saga/task.hpp>
00027 #include <saga/saga/permissions.hpp>
00028 #include <saga/saga/url.hpp>
00029
00030
00031 #include <saga/saga/packages/namespace/config.hpp>
00032
00033 #include <saga/saga/detail/monitorable.hpp>
00034 #include <saga/saga/detail/permissions.hpp>
00035
00036
00037 #if defined(BOOST_MSVC)
00038 #pragma warning(push)
00039 #pragma warning(disable: 4251 4231 4275 4660)
00040 #endif
00041
00042 #ifdef SAGA_DEBUG
00043 #include <saga/saga/packages/description/preprocessed/namespace_entry.hpp>
00044 #else
00045
00046 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00047 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/namespace_entry.hpp")
00048 #endif
00050 namespace saga
00051 {
00056 namespace name_space {
00057
00065 enum flags
00066 {
00067 Unknown = -1,
00068 None = 0,
00069 Overwrite = 1,
00070 Recursive = 2,
00071 Dereference = 4,
00072 Create = 8,
00073 Exclusive = 16,
00074 Lock = 32,
00075 CreateParents = 64,
00076
00077
00078 Read = 512,
00079 Write = 1024,
00080 ReadWrite = Read | Write
00081
00082 };
00083
00091 class SAGA_NAMESPACE_PACKAGE_EXPORT entry
00092 : public saga::object,
00093 public saga::detail::monitorable<entry>,
00094 public saga::detail::permissions<entry>
00095 {
00096
00097 protected:
00099
00100 TR1::shared_ptr <saga::impl::namespace_entry> get_impl_sp(void) const;
00101 saga::impl::namespace_entry* get_impl (void) const;
00102
00103 friend struct saga::detail::monitorable<entry>;
00104 friend struct saga::detail::permissions<entry>;
00105 friend class saga::impl::namespace_entry;
00106
00107 typedef saga::detail::monitorable<entry> monitorable_base;
00109
00110 private:
00111
00112 SAGA_CALL_CREATE_PRIV_3(session const&, saga::url, int)
00113
00114
00115 SAGA_CALL_CONST_PRIV_0(get_url)
00116 SAGA_CALL_CONST_PRIV_0(get_cwd)
00117 SAGA_CALL_CONST_PRIV_0(get_name)
00118
00119
00120 SAGA_CALL_CONST_PRIV_0(read_link)
00121 SAGA_CALL_CONST_PRIV_0(is_dir)
00122 SAGA_CALL_CONST_PRIV_0(is_entry)
00123 SAGA_CALL_CONST_PRIV_0(is_link)
00124
00125
00126 SAGA_CALL_PRIV_2(copy, saga::url, int)
00127 SAGA_CALL_PRIV_2(link, saga::url, int)
00128 SAGA_CALL_PRIV_2(move, saga::url, int)
00129 SAGA_CALL_PRIV_1(remove, int)
00130
00131 SAGA_CALL_PRIV_1(close, double)
00132
00133
00134 SAGA_CALL_PRIV_3(permissions_allow, std::string, int, int)
00135 SAGA_CALL_PRIV_3(permissions_deny, std::string, int, int)
00136
00137 protected:
00139
00140 explicit entry (saga::impl::namespace_entry * init);
00142
00143 public:
00148 entry (session const & s, saga::url url, int mode = Read,
00149 saga::object::type t = saga::object::NSEntry);
00150
00155 explicit
00156 entry (saga::url url, int mode = Read,
00157 saga::object::type t = saga::object::NSEntry);
00158
00163 explicit entry (saga::object const& o);
00164
00169 entry (void);
00170
00175 ~entry (void);
00176
00180 static entry create(session const & s, saga::url url, int mode = Read)
00181 {
00182 return entry(s, url, mode);
00183 }
00184 SAGA_CALL_CREATE_3_DEF_1(session const&, saga::url, int, Read)
00185
00186
00188 static entry create(saga::url url, int mode = Read)
00189 {
00190 return entry(url, mode);
00191 }
00192 template <typename Tag>
00193 static saga::task create(saga::url url, int mode = Read)
00194 {
00195 return create<Tag>(detail::get_the_session(), url, mode);
00196 }
00197
00202 entry &operator= (saga::object const& o);
00203
00210 saga::url get_url() const
00211 {
00212 saga::task t = get_urlpriv(saga::task_base::Sync());
00213 return t.get_result<saga::url>();
00214 }
00215 SAGA_CALL_CONST_PUB_0_DEF_0(get_url)
00216
00217
00223 saga::url get_cwd() const
00224 {
00225 saga::task t = get_cwdpriv(saga::task_base::Sync());
00226 return t.get_result<saga::url>();
00227 }
00228 SAGA_CALL_CONST_PUB_0_DEF_0(get_cwd)
00229
00230
00236 saga::url get_name() const
00237 {
00238 saga::task t = get_namepriv(saga::task_base::Sync());
00239 return t.get_result<saga::url>();
00240 }
00241 SAGA_CALL_CONST_PUB_0_DEF_0(get_name)
00242
00243
00249 saga::url read_link() const
00250 {
00251 saga::task t = read_linkpriv(saga::task_base::Sync());
00252 return t.get_result<saga::url>();
00253 }
00254 SAGA_CALL_CONST_PUB_0_DEF_0(read_link)
00255
00256
00262 bool is_dir() const
00263 {
00264 saga::task t = is_dirpriv(saga::task_base::Sync());
00265 return t.get_result<bool>();
00266 }
00267 SAGA_CALL_CONST_PUB_0_DEF_0(is_dir)
00268
00269
00275 bool is_entry() const
00276 {
00277 saga::task t = is_entrypriv(saga::task_base::Sync());
00278 return t.get_result<bool>();
00279 }
00280 SAGA_CALL_CONST_PUB_0_DEF_0(is_entry)
00281
00282
00287 bool is_link () const
00288 {
00289 saga::task t = is_linkpriv(saga::task_base::Sync());
00290 return t.get_result<bool>();
00291 }
00292 SAGA_CALL_CONST_PUB_0_DEF_0(is_link)
00293
00294
00301 void copy(saga::url target, int flags = saga::name_space::None)
00302 {
00303 saga::task t = copypriv(target, flags, saga::task_base::Sync());
00304 t.get_result ();
00305 }
00306 SAGA_CALL_PUB_2_DEF_1 (copy, saga::url, int, saga::name_space::None)
00307
00308
00315 void link (saga::url target, int flags = saga::name_space::None)
00316 {
00317 saga::task t = linkpriv(target, flags, saga::task_base::Sync());
00318 t.get_result ();
00319 }
00320 SAGA_CALL_PUB_2_DEF_1 (link, saga::url, int, saga::name_space::None)
00321
00322
00329 void move (saga::url target, int flags = saga::name_space::None)
00330 {
00331 saga::task t = movepriv(target, flags, saga::task_base::Sync());
00332 t.get_result ();
00333 }
00334 SAGA_CALL_PUB_2_DEF_1 (move, saga::url, int, saga::name_space::None)
00335
00336
00342 void remove (int flags = saga::name_space::None)
00343 {
00344 saga::task t = removepriv(flags, saga::task_base::Sync());
00345 t.get_result ();
00346 }
00347 SAGA_CALL_PUB_1_DEF_1 (remove, int, saga::name_space::None)
00348
00349
00354 void close (double timeout = 0.0)
00355 {
00356 saga::task t = closepriv(timeout, saga::task_base::Sync());
00357 t.get_result ();
00358 }
00359 SAGA_CALL_PUB_1_DEF_1 (close, double, 0.0)
00360
00361
00362 using saga::detail::permissions<entry>::permissions_allow;
00363 using saga::detail::permissions<entry>::permissions_deny;
00364
00374 void permissions_allow (std::string id, int perm, int flags)
00375 {
00376 saga::task t = permissions_allowpriv(id, perm, flags, saga::task_base::Sync());
00377 t.get_result ();
00378 }
00379 SAGA_CALL_PUB_3_DEF_0 (permissions_allow, std::string, int, int)
00380
00381
00390 void permissions_deny (std::string id, int perm, int flags)
00391 {
00392 saga::task t = permissions_denypriv(id, perm, flags, saga::task_base::Sync());
00393 t.get_result ();
00394 }
00395 SAGA_CALL_PUB_3_DEF_0 (permissions_deny, std::string, int, int)
00396
00397 };
00398
00399 }}
00400
00401 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00402 #pragma wave option(output: null)
00403 #endif
00404 #endif // !defined(SAGA_DEBUG)
00405
00406
00407 #if defined(BOOST_MSVC)
00408 #pragma warning(pop)
00409 #endif
00410
00411 #endif // SAGA_PACKAGES_DATA_NAMESPACEENTRY_HPP
00412