00001
00002
00003
00004
00005
00006 #ifndef SAGA_SAGA_DETAIL_PERMISSIONS_IMPL_HPP
00007 #define SAGA_SAGA_DETAIL_PERMISSIONS_IMPL_HPP
00008
00009 #include <saga/impl/exception.hpp>
00010 #include <saga/saga/detail/permissions.hpp>
00011 #include <saga/saga/detail/dispatch_priv.hpp>
00012
00014 namespace saga { namespace detail
00015 {
00016 template <typename Derived>
00017 inline impl::permissions_interface*
00018 permissions<Derived>::get_perm (void)
00019 {
00020 if (!derived().is_impl_valid()) {
00021 SAGA_THROW("The object has not been properly initialized.",
00022 saga::IncorrectState);
00023 }
00024 return derived().get_impl()->get_permissions();
00025 }
00026
00027 template <typename Derived>
00028 inline impl::permissions_interface*
00029 permissions<Derived>::get_perm (void) const
00030 {
00031 if (!derived().is_impl_valid()) {
00032 SAGA_THROW("The object has not been properly initialized.",
00033 saga::IncorrectState);
00034 }
00035 return derived().get_impl()->get_permissions();
00036 }
00037
00040
00041 struct permissions_allow_priv
00042 {
00043 template <typename Derived>
00044 static saga::task
00045 call (Derived& this_, std::string id, int p, bool sync)
00046 {
00047 return this_.get_perm()->permissions_allow(id, p, sync);
00048 }
00049 };
00050
00051 template <typename Derived, typename Tag>
00052 inline saga::task
00053 permissions_priv<Derived, Tag>::permissions_allow (Derived const& this_,
00054 std::string id, int p)
00055 {
00056 return dispatch_priv<Tag>::
00057 template call<permissions_allow_priv>(this_, id, p);
00058 }
00059
00061 struct permissions_deny_priv
00062 {
00063 template <typename Derived>
00064 static saga::task
00065 call (Derived& this_, std::string id, int p, bool sync)
00066 {
00067 return this_.get_perm()->permissions_deny(id, p, sync);
00068 }
00069 };
00070
00071 template <typename Derived, typename Tag>
00072 inline saga::task
00073 permissions_priv<Derived, Tag>::permissions_deny (Derived const& this_,
00074 std::string id, int p)
00075 {
00076 return dispatch_priv<Tag>::
00077 template call<permissions_deny_priv>(this_, id, p);
00078 }
00079
00081 struct permissions_check_priv
00082 {
00083 template <typename Derived>
00084 static saga::task
00085 call (Derived& this_, std::string id, int p, bool sync)
00086 {
00087 return this_.get_perm()->permissions_check(id, p, sync);
00088 }
00089 };
00090
00091 template <typename Derived, typename Tag>
00092 inline saga::task
00093 permissions_priv<Derived, Tag>::permissions_check (Derived const& this_,
00094 std::string id, int p)
00095 {
00096 return dispatch_priv<Tag>::
00097 template call<permissions_check_priv>(this_, id, p);
00098 }
00099
00101 struct get_owner_priv
00102 {
00103 template <typename Derived>
00104 static saga::task
00105 call (Derived& this_, bool sync)
00106 {
00107 return this_.get_perm()->get_owner(sync);
00108 }
00109 };
00110
00111 template <typename Derived, typename Tag>
00112 inline saga::task
00113 permissions_priv<Derived, Tag>::get_owner (Derived const& this_)
00114 {
00115 return dispatch_priv<Tag>::template call<get_owner_priv>(this_);
00116 }
00117
00119 struct get_group_priv
00120 {
00121 template <typename Derived>
00122 static saga::task
00123 call (Derived& this_, bool sync)
00124 {
00125 return this_.get_perm()->get_group(sync);
00126 }
00127 };
00128
00129 template <typename Derived, typename Tag>
00130 inline saga::task
00131 permissions_priv<Derived, Tag>::get_group (Derived const& this_)
00132 {
00133 return dispatch_priv<Tag>::template call<get_group_priv>(this_);
00134 }
00136
00138 }}
00139
00140 #endif
00141
00142