00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_NOTIFIER_CALLBACK_HH
00021 #define PALUDIS_GUARD_PALUDIS_NOTIFIER_CALLBACK_HH 1
00022
00023 #include <paludis/notifier_callback-fwd.hh>
00024 #include <paludis/util/private_implementation_pattern.hh>
00025 #include <paludis/util/simple_visitor.hh>
00026 #include <paludis/util/type_list.hh>
00027 #include <paludis/name.hh>
00028 #include <paludis/environment-fwd.hh>
00029
00030 namespace paludis
00031 {
00032 class PALUDIS_VISIBLE NotifierCallbackEvent :
00033 public virtual DeclareAbstractAcceptMethods<NotifierCallbackEvent, MakeTypeList<
00034 NotifierCallbackGeneratingMetadataEvent,
00035 NotifierCallbackResolverStepEvent>::Type>
00036 {
00037 };
00038
00039 class PALUDIS_VISIBLE NotifierCallbackGeneratingMetadataEvent :
00040 public NotifierCallbackEvent,
00041 public ImplementAcceptMethods<NotifierCallbackEvent, NotifierCallbackGeneratingMetadataEvent>
00042 {
00043 private:
00044 const RepositoryName _repo;
00045
00046 public:
00047 NotifierCallbackGeneratingMetadataEvent(const RepositoryName & r);
00048
00049 const RepositoryName repository() const PALUDIS_ATTRIBUTE((warn_unused_result));
00050 };
00051
00052 class PALUDIS_VISIBLE NotifierCallbackResolverStepEvent :
00053 public NotifierCallbackEvent,
00054 public ImplementAcceptMethods<NotifierCallbackEvent, NotifierCallbackResolverStepEvent>
00055 {
00056 };
00057
00058 class PALUDIS_VISIBLE ScopedNotifierCallback :
00059 private PrivateImplementationPattern<ScopedNotifierCallback>
00060 {
00061 public:
00062 ScopedNotifierCallback(Environment * const, const NotifierCallbackFunction &);
00063 ~ScopedNotifierCallback();
00064
00065 void remove_now();
00066 };
00067
00068 #ifdef PALUDIS_HAVE_EXTERN_TEMPLATE
00069 extern template class PrivateImplementationPattern<ScopedNotifierCallback>;
00070 #endif
00071
00072 }
00073
00074 #endif