SAGA Adaptor CPI v.1.0
|
00001 #ifndef SAGA_PACKAGES_DATA_NAMESPACEDIR_HPP 00002 #define SAGA_PACKAGES_DATA_NAMESPACEDIR_HPP 00003 00004 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES) 00005 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/namespace_dir.hpp") 00006 #endif 00007 // Copyright (c) 2005-2009 Hartmut Kaiser 00008 // Copyright (c) 2005-2007 Andre Merzky (andre@merzky.net) 00009 // Copyright (c) 2007 Ole Weidner (oweidner@cct.lsu.edu) 00010 // 00011 // Distributed under the Boost Software License, Version 1.0. (See accompanying 00012 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 00013 00014 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES) 00015 #pragma wave option(output: null) 00016 #endif 00017 // include stl 00018 #include <string> 00019 00020 // include dependent spec sections 00021 #include <saga/saga/call.hpp> 00022 #include <saga/saga/base.hpp> 00023 #include <saga/saga/session.hpp> 00024 #include <saga/saga/task.hpp> 00025 #include <saga/saga/permissions.hpp> 00026 #include <saga/saga/url.hpp> 00027 00028 // include package config 00029 #include <saga/saga/packages/namespace/config.hpp> 00030 #include <saga/saga/packages/namespace/namespace_entry.hpp> 00031 00032 // suppress warnings about dependent classes not being exported from the dll 00033 #if defined(BOOST_MSVC) 00034 #pragma warning(push) 00035 #pragma warning(disable: 4251 4231 4275 4660) 00036 #endif 00037 00038 #ifdef SAGA_DEBUG 00039 #include <saga/saga/packages/description/preprocessed/namespace_dir.hpp> 00040 #else 00041 00042 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES) 00043 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/namespace_dir.hpp") 00044 #endif 00045 00046 namespace saga 00047 { 00048 namespace name_space { 00049 00061 class SAGA_NAMESPACE_PACKAGE_EXPORT directory 00062 : public entry 00063 { 00064 00065 protected: 00067 00068 TR1::shared_ptr <saga::impl::namespace_dir> get_impl_sp() const; 00069 saga::impl::namespace_dir* get_impl() const; 00070 00071 friend class saga::impl::namespace_dir; 00072 00073 typedef saga::name_space::entry::monitorable_base monitorable_base; 00075 00076 private: 00077 // factories 00078 SAGA_CALL_CREATE_PRIV_3(session const&, saga::url, int) 00079 00080 // navigation/query methods 00081 SAGA_CALL_PRIV_1(change_dir, saga::url) 00082 SAGA_CALL_CONST_PRIV_2(list, std::string, int) 00083 SAGA_CALL_CONST_PRIV_2(find, std::string, int) 00084 00085 SAGA_CALL_CONST_PRIV_1(read_link, saga::url) 00086 SAGA_CALL_CONST_PRIV_1(exists, saga::url) 00087 SAGA_CALL_CONST_PRIV_1(is_dir, saga::url) 00088 SAGA_CALL_CONST_PRIV_1(is_entry, saga::url) 00089 SAGA_CALL_CONST_PRIV_1(is_link, saga::url) 00090 00091 // Deal with entries by entry number 00092 SAGA_CALL_CONST_PRIV_0(get_num_entries) 00093 SAGA_CALL_CONST_PRIV_1(get_entry, std::size_t) 00094 00095 // entry management methods 00096 SAGA_CALL_PRIV_3(copy, saga::url, saga::url, int) 00097 SAGA_CALL_PRIV_3(link, saga::url, saga::url, int) 00098 SAGA_CALL_PRIV_3(move, saga::url, saga::url, int) 00099 SAGA_CALL_PRIV_2(remove, saga::url, int) 00100 SAGA_CALL_PRIV_2(make_dir, saga::url, int) 00101 00102 // open methods 00103 SAGA_CALL_PRIV_2(open, saga::url, int) 00104 SAGA_CALL_PRIV_2(open_dir, saga::url, int) 00105 00106 // management methods - wild card versions 00107 SAGA_CALL_PRIV_3(copy, std::string, saga::url, int) 00108 SAGA_CALL_PRIV_3(link, std::string, saga::url, int) 00109 SAGA_CALL_PRIV_3(move, std::string, saga::url, int) 00110 SAGA_CALL_PRIV_2(remove, std::string, int) 00111 00112 // permissions with flags 00113 SAGA_CALL_PRIV_4(permissions_allow, saga::url, std::string, int, int) 00114 SAGA_CALL_PRIV_4(permissions_deny, saga::url, std::string, int, int) 00115 SAGA_CALL_PRIV_4(permissions_allow, std::string, std::string, int, int) 00116 SAGA_CALL_PRIV_4(permissions_deny, std::string, std::string, int, int) 00117 00118 protected: 00120 00121 directory (saga::impl::namespace_dir *); 00123 00124 public: 00129 directory (session const& s, saga::url url, int mode = Read, 00130 saga::object::type t = saga::object::NSDirectory); 00131 00136 explicit directory (saga::url url, int mode = Read, 00137 saga::object::type t = saga::object::NSDirectory); 00138 00143 explicit directory (saga::object const& o); 00144 00149 directory (void); 00150 00155 ~directory (void); 00156 00160 static directory create(session const & s, saga::url url, int mode = Read) 00161 { 00162 return directory(s, url, mode); 00163 } 00164 SAGA_CALL_CREATE_3_DEF_1(session const&, saga::url, int, Read) 00165 00166 00168 static directory create(saga::url url, int mode = Read) 00169 { 00170 return directory(url, mode); 00171 } 00172 template <typename Tag> 00173 static saga::task create(saga::url url, int mode = Read) 00174 { 00175 return create<Tag>(detail::get_the_session(), url, mode); 00176 } 00177 00182 directory &operator= (saga::object const& o); 00183 00190 void change_dir (saga::url target) 00191 { 00192 saga::task t = change_dirpriv(target, saga::task_base::Sync()); 00193 t.get_result (); 00194 } 00196 SAGA_CALL_PUB_1_DEF_0(change_dir, saga::url) 00198 00199 00206 std::vector<saga::url> list (std::string pattern = "*", 00207 int flags = saga::name_space::None) const 00208 { 00209 saga::task t = listpriv(pattern, flags, saga::task_base::Sync()); 00210 return t.get_result<std::vector<saga::url> >(); 00211 } 00213 SAGA_CALL_CONST_PUB_2_DEF_2(list, std::string, 00214 "*", int, saga::name_space::None) 00216 00217 00225 std::vector<saga::url> find (std::string pattern, 00226 int flags = saga::name_space::Recursive) const 00227 { 00228 saga::task t = findpriv(pattern, flags, saga::task_base::Sync()); 00229 return t.get_result<std::vector<saga::url> >(); 00230 } 00232 SAGA_CALL_CONST_PUB_2_DEF_1(find, std::string, 00233 int, saga::name_space::Recursive) 00235 00242 saga::url read_link (saga::url url) const 00243 { 00244 saga::task t = read_linkpriv(url, saga::task_base::Sync()); 00245 return t.get_result<saga::url>(); 00246 } 00248 SAGA_CALL_CONST_PUB_1_DEF_0(read_link, saga::url) 00250 00251 00258 bool exists (saga::url url) const 00259 { 00260 saga::task t = existspriv(url, saga::task_base::Sync()); 00261 return t.get_result<bool>(); 00262 } 00264 SAGA_CALL_CONST_PUB_1_DEF_0(exists, saga::url) 00266 00267 00274 bool is_dir (saga::url url) const 00275 { 00276 saga::task t = is_dirpriv(url, saga::task_base::Sync()); 00277 return t.get_result<bool>(); 00278 } 00280 SAGA_CALL_CONST_PUB_1_DEF_0(is_dir, saga::url) 00282 00283 00290 bool is_entry (saga::url url) const 00291 { 00292 saga::task t = is_entrypriv(url, saga::task_base::Sync()); 00293 return t.get_result<bool>(); 00294 } 00296 SAGA_CALL_CONST_PUB_1_DEF_0(is_entry, saga::url) 00298 00299 00307 bool is_link (saga::url url) const 00308 { 00309 saga::task t = is_linkpriv(url, saga::task_base::Sync()); 00310 return t.get_result<bool>(); 00311 } 00313 SAGA_CALL_CONST_PUB_1_DEF_0 (is_link, saga::url) 00315 00316 // make base class functions available as well 00317 using entry::read_link; 00318 using entry::is_dir; 00319 using entry::is_entry; 00320 using entry::is_link; 00321 00328 std::size_t get_num_entries (void) const 00329 { 00330 saga::task t = get_num_entriespriv(saga::task_base::Sync()); 00331 return t.get_result<std::size_t>(); 00332 } 00334 SAGA_CALL_CONST_PUB_0_DEF_0(get_num_entries) 00336 00337 00345 saga::url get_entry (std::size_t entry) const 00346 { 00347 saga::task t = get_entrypriv(entry, saga::task_base::Sync()); 00348 return t.get_result<saga::url>(); 00349 } 00351 SAGA_CALL_CONST_PUB_1_DEF_0(get_entry, unsigned int) 00353 00361 void copy (saga::url source_url, saga::url dest_url, 00362 int flags = saga::name_space::None) 00363 { 00364 saga::task t = copypriv(source_url, dest_url, flags, saga::task_base::Sync()); 00365 t.get_result (); 00366 } 00368 SAGA_CALL_PUB_3_DEF_1 (copy, saga::url, saga::url, int, 00369 saga::name_space::None) 00371 00372 00380 void copy (std::string source_url, saga::url dest_url, 00381 int flags = saga::name_space::None) 00382 { 00383 saga::task t = copypriv(source_url, dest_url, flags, saga::task_base::Sync()); 00384 t.get_result (); 00385 } 00387 SAGA_CALL_PUB_3_DEF_1 (copy, std::string, saga::url, int, 00388 saga::name_space::None) 00390 00391 00399 void copy (char const * source_url, saga::url dest_url, 00400 int flags = saga::name_space::None) 00401 { 00402 saga::task t = copypriv(std::string(source_url), dest_url, flags, saga::task_base::Sync()); 00403 t.get_result (); 00404 } 00406 template <class Tag> 00407 saga::task copy (char const * source_url, saga::url dest_url, 00408 int flags = saga::name_space::None) 00409 { 00410 return copypriv(std::string(source_url), dest_url, flags, Tag()); 00411 } 00413 00424 void link (saga::url source_url, saga::url dest_url, 00425 int flags = saga::name_space::None) 00426 { 00427 saga::task t = linkpriv(source_url, dest_url, flags, saga::task_base::Sync()); 00428 t.get_result (); 00429 } 00431 SAGA_CALL_PUB_3_DEF_1(link, saga::url, saga::url, int, 00432 saga::name_space::None) 00434 00435 00445 void link (std::string source_url, saga::url dest_url, 00446 int flags = saga::name_space::None) 00447 { 00448 saga::task t = linkpriv(source_url, dest_url, flags, saga::task_base::Sync()); 00449 t.get_result (); 00450 } 00452 SAGA_CALL_PUB_3_DEF_1(link, std::string, saga::url, int, 00453 saga::name_space::None) 00455 00456 00466 void link (char const * source_url, saga::url dest_url, 00467 int flags = saga::name_space::None) 00468 { 00469 saga::task t = linkpriv(std::string(source_url), dest_url, flags, saga::task_base::Sync()); 00470 t.get_result (); 00471 } 00473 template <class Tag> 00474 saga::task link (char const * source_url, saga::url dest_url, 00475 int flags = saga::name_space::None) 00476 { 00477 return linkpriv(std::string(source_url), dest_url, flags, Tag()); 00478 } 00480 00491 void move (saga::url source_url, saga::url dest_url, 00492 int flags = saga::name_space::None) 00493 { 00494 saga::task t = movepriv(source_url, dest_url, flags, saga::task_base::Sync()); 00495 t.get_result (); 00496 } 00498 SAGA_CALL_PUB_3_DEF_1(move, saga::url, saga::url, int, 00499 saga::name_space::None) 00501 00502 00512 void move (std::string source_url, saga::url dest_url, 00513 int flags = saga::name_space::None) 00514 { 00515 saga::task t = movepriv(source_url, dest_url, flags, saga::task_base::Sync()); 00516 t.get_result (); 00517 } 00519 SAGA_CALL_PUB_3_DEF_1(move, std::string, saga::url, int, 00520 saga::name_space::None) 00522 00523 00533 void move (char const * source_url, saga::url dest_url, 00534 int flags = saga::name_space::None) 00535 { 00536 saga::task t = movepriv(std::string(source_url), dest_url, flags, saga::task_base::Sync()); 00537 t.get_result (); 00538 } 00540 template <class Tag> 00541 saga::task move (char const * source_url, saga::url dest_url, 00542 int flags = saga::name_space::None) 00543 { 00544 return movepriv(std::string(source_url), dest_url, flags, Tag()); 00545 } 00547 00553 void remove (saga::url url, int flags = saga::name_space::None) 00554 { 00555 saga::task t = removepriv(url, flags, saga::task_base::Sync()); 00556 t.get_result (); 00557 } 00559 SAGA_CALL_PUB_2_DEF_1(remove, saga::url, int, saga::name_space::None) 00561 00567 void remove (std::string url, int flags = saga::name_space::None) 00568 { 00569 saga::task t = removepriv(url, flags, saga::task_base::Sync()); 00570 t.get_result (); 00571 } 00573 SAGA_CALL_PUB_2_DEF_1(remove, std::string, int, saga::name_space::None) 00575 00581 void remove (char const * url, int flags = saga::name_space::None) 00582 { 00583 saga::task t = removepriv(std::string(url), flags, saga::task_base::Sync()); 00584 t.get_result (); 00585 } 00587 template <class Tag> 00588 saga::task remove (char const * url, int flags = saga::name_space::None) 00589 { 00590 return removepriv(std::string(url), flags, Tag()); 00591 } 00593 00594 // make base class functions available as well 00595 using entry::copy; 00596 using entry::link; 00597 using entry::move; 00598 using entry::remove; 00599 00606 void make_dir (saga::url url, 00607 int flags = saga::name_space::None) 00608 { 00609 saga::task t = make_dirpriv(url, flags, saga::task_base::Sync()); 00610 t.get_result (); 00611 } 00613 SAGA_CALL_PUB_2_DEF_1(make_dir, saga::url, int, saga::name_space::None) 00615 00624 saga::name_space::entry open (saga::url url, 00625 int flags = saga::name_space::Read) 00626 { 00627 saga::task t = openpriv(url, flags, saga::task_base::Sync()); 00628 return t.get_result<saga::name_space::entry>(); 00629 } 00631 SAGA_CALL_PUB_2_DEF_1(open, saga::url, int, saga::name_space::Read) 00633 00634 00642 saga::name_space::directory open_dir (saga::url url, 00643 int flags = saga::name_space::Read) 00644 { 00645 saga::task t = open_dirpriv(url, flags, saga::task_base::Sync()); 00646 return t.get_result<saga::name_space::directory>(); 00647 } 00649 SAGA_CALL_PUB_2_DEF_1(open_dir, saga::url, int, saga::name_space::Read) 00651 00652 // make base class functions available as well 00653 using entry::permissions_allow; 00654 using entry::permissions_deny; 00655 00666 void permissions_allow (saga::url target, std::string id, 00667 int perm, int flags = None) 00668 { 00669 saga::task t = permissions_allowpriv(target, id, perm, flags, saga::task_base::Sync()); 00670 t.get_result (); 00671 } 00673 SAGA_CALL_PUB_4_DEF_1 (permissions_allow, saga::url, std::string, 00674 int, int, None) 00676 00687 void permissions_deny (saga::url target, std::string id, 00688 int perm, int flags = None) 00689 { 00690 saga::task t = permissions_denypriv(target, id, perm, flags, saga::task_base::Sync()); 00691 t.get_result (); 00692 } 00694 SAGA_CALL_PUB_4_DEF_1 (permissions_deny, saga::url, std::string, 00695 int, int, None) 00697 00708 void permissions_allow (std::string target, std::string id, 00709 int perm, int flags = None) 00710 { 00711 saga::task t = permissions_allowpriv(target, id, perm, flags, saga::task_base::Sync()); 00712 t.get_result (); 00713 } 00715 SAGA_CALL_PUB_4_DEF_1 (permissions_allow, std::string, std::string, 00716 int, int, None) 00718 00729 void permissions_deny (std::string target, std::string id, 00730 int perm, int flags = None) 00731 { 00732 saga::task t = permissions_denypriv(target, id, perm, flags, saga::task_base::Sync()); 00733 t.get_result (); 00734 } 00736 SAGA_CALL_PUB_4_DEF_1 (permissions_deny, std::string, std::string, 00737 int, int, None) 00739 00750 void permissions_allow (char const * target, std::string id, 00751 int perm, int flags = None) 00752 { 00753 saga::task t = permissions_allowpriv(std::string(target), id, perm, flags, 00754 saga::task_base::Sync()); 00755 t.get_result (); 00756 } 00758 template <class Tag> 00759 saga::task permissions_allow (char const * target, std::string id, 00760 int perm, int flags = None) 00761 { 00762 return permissions_allowpriv(std::string(target), id, perm, flags, 00763 Tag()); 00764 } 00766 00777 void permissions_deny (char const * target, std::string id, 00778 int perm, int flags = None) 00779 { 00780 saga::task t = permissions_denypriv(std::string(target), id, perm, flags, 00781 saga::task_base::Sync()); 00782 t.get_result (); 00783 } 00785 template <class Tag> 00786 saga::task permissions_deny (char const * target, std::string id, 00787 int perm, int flags = None) 00788 { 00789 return permissions_denypriv(std::string(target), id, perm, flags, 00790 Tag()); 00791 } 00793 }; 00794 00795 }} // saga::namespace_dir 00796 00797 #endif // !defined(SAGA_DEBUG) 00798 00799 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES) 00800 #pragma wave option(output: null) 00801 #endif 00802 // re-enable warnings about dependent classes not being exported from the dll 00803 #if defined(BOOST_MSVC) 00804 #pragma warning(pop) 00805 #endif 00806 00807 #endif // SAGA_PACKAGES_DATA_NAMESPACEDIR_HPP 00808