1 #ifndef SAUCE_PROVIDER_H_
2 #define SAUCE_PROVIDER_H_
6 #include <sauce/memory.h>
7 #include <sauce/internal/disposal_deleter.h>
8 #include <sauce/internal/key.h>
14 template<
typename Dependency>
20 template<
typename Dependency>
41 template<
typename Dependency>
50 sauce::weak_ptr<Abstract> weak;
55 virtual Iface * provide() = 0;
60 virtual void dispose(Iface *) = 0;
68 void setSelf(sauce::weak_ptr<Abstract> weak) {
69 assert(weak.lock().get() ==
this);
79 sauce::shared_ptr<Iface>
get() {
80 sauce::shared_ptr<Abstract>
self = weak.lock();
81 assert(
self.
get() ==
this);
82 Deleter deleter(sauce::static_pointer_cast<Abstract>(
self));
83 return sauce::shared_ptr<Iface>(provide(), deleter);
90 #endif // SAUCE_PROVIDER_H_