00001 #ifndef SAGA_SAGA_PACKAGES_DATA_REPLICA_LOGICAL_DIRECTORY_HPP
00002 #define SAGA_SAGA_PACKAGES_DATA_REPLICA_LOGICAL_DIRECTORY_HPP
00003
00004 #if defined(__WAVE__)
00005 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/logical_directory.hpp")
00006 #endif
00007
00008
00009
00010
00011
00012
00013 #if defined(__WAVE__)
00014 #pragma wave option(output: null)
00015 #endif
00016
00017 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00018 #pragma once
00019 #endif
00020
00021
00022 #include <string>
00023
00024
00025 #include <saga/saga/util.hpp>
00026 #include <saga/saga/base.hpp>
00027 #include <saga/saga/call.hpp>
00028 #include <saga/saga/types.hpp>
00029 #include <saga/saga/object.hpp>
00030 #include <saga/saga/session.hpp>
00031 #include <saga/saga/detail/attribute.hpp>
00032
00033 #include <saga/saga/packages/namespace/namespace_dir.hpp>
00034 #include <saga/saga/packages/replica/logical_file.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/replica/preprocessed/logical_directory.hpp>
00044 #else
00045
00046 #if defined(__WAVE__)
00047 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/logical_directory.hpp")
00048 #endif
00049
00050 namespace saga
00051 {
00052 namespace replica
00053 {
00054
00056
00057 namespace metrics
00058 {
00060
00061 char const* const logical_directory_created_entry = "logical_directory.CreatedEntry";
00062 char const* const logical_directory_modified_entry = "logical_directory.ModifiedEntry";
00063 char const* const logical_directory_deleted_entry = "logical_directory.DeletedEntry";
00064 }
00065
00066
00075 class SAGA_REPLICA_PACKAGE_EXPORT logical_directory
00076 : public saga::name_space::directory,
00077 public saga::detail::attribute<logical_directory>
00078 {
00079 protected:
00081
00082 friend class saga::impl::logical_directory;
00083 friend struct saga::detail::attribute<logical_directory>;
00084 typedef saga::detail::attribute<logical_directory> attribute_base;
00085 typedef saga::name_space::directory::monitorable_base monitorable_base;
00087
00088 private:
00090
00091 SAGA_CALL_CREATE_PRIV_3(session const&, saga::url, int)
00092
00093
00094 SAGA_CALL_PRIV_1(is_file, saga::url)
00095
00096
00097 SAGA_CALL_PRIV_2(open, saga::url, int)
00098 SAGA_CALL_PRIV_2(open_dir, saga::url, int)
00099 SAGA_CALL_PRIV_3(find, std::string, std::vector<std::string>, int)
00101
00102 protected:
00104
00105 TR1::shared_ptr <saga::impl::logical_directory> get_impl_sp() const;
00106 saga::impl::logical_directory* get_impl() const;
00107 explicit logical_directory(saga::impl::logical_directory *impl);
00109
00110 public:
00115 logical_directory (session const& s, saga::url url,
00116 int mode = saga::replica::ReadWrite);
00117
00122 explicit logical_directory (saga::url url,
00123 int mode = saga::replica::ReadWrite);
00124
00129 explicit logical_directory (saga::object const& o);
00130
00135 logical_directory (void);
00136
00141 ~logical_directory (void);
00142
00146 static logical_directory create(session const& s, saga::url url,
00147 int mode = Read)
00148 {
00149 return logical_directory(s, url, mode);
00150 }
00151 SAGA_CALL_CREATE_3_DEF_1(session const&, saga::url, int, Read)
00152
00153
00155 static logical_directory create(saga::url url, int mode = Read)
00156 {
00157 return logical_directory(url, mode);
00158 }
00159 template <typename Tag>
00160 static saga::task create(saga::url url, int mode = Read)
00161 {
00162 return create<Tag>(detail::get_the_session(), url, mode);
00163 }
00164
00169 logical_directory& operator=(saga::object const& o);
00170
00176 bool is_file(saga::url url)
00177 {
00178 saga::task t = is_filepriv(url, saga::task_base::Sync());
00179 return t.get_result<bool>();
00180 }
00181 SAGA_CALL_PUB_1_DEF_0(is_file, saga::url)
00182
00183
00191 saga::replica::logical_file open(saga::url url,
00192 int flags = saga::replica::Read)
00193 {
00194 saga::task t = openpriv(url, flags, saga::task_base::Sync());
00195 return t.get_result<saga::replica::logical_file>();
00196 }
00197 SAGA_CALL_PUB_2_DEF_1(open, saga::url, int, saga::replica::Read)
00198
00199
00207 saga::replica::logical_directory open_dir(saga::url url,
00208 int flags
00209 = saga::replica::Read)
00210 {
00211 saga::task t = open_dirpriv(url, flags, saga::task_base::Sync());
00212 return t.get_result<saga::replica::logical_directory>();
00213 }
00214 SAGA_CALL_PUB_2_DEF_1(open_dir, saga::url, int, saga::replica::Read)
00215
00216
00226 std::vector<saga::url> find(std::string name_pattern,
00227 std::vector<std::string> key_pattern,
00228 int flags = saga::replica::Recursive)
00229 {
00230 saga::task t = findpriv(name_pattern, key_pattern, flags,
00231 saga::task_base::Sync());
00232 return t.get_result<std::vector<saga::url> >();
00233 }
00234 SAGA_CALL_PUB_3_DEF_1(find, std::string, std::vector<std::string>,
00235 int, saga::replica::None)
00236 };
00237
00238 }}
00239
00240 #if defined(__WAVE__)
00241 #pragma wave option(output: null)
00242 #endif
00243
00244 #endif // !defined(SAGA_DEBUG)
00245
00246
00247 #if defined(BOOST_MSVC)
00248 #pragma warning(pop)
00249 #endif
00250
00251 #endif // SAGA_SAGA_PACKAGES_DATA_REPLICA_LOGICAL_DIRECTORY_HPP