1#ifndef SAUCE_INTERNAL_SCOPE_CACHE_H_
2#define SAUCE_INTERNAL_SCOPE_CACHE_H_
4#include <sauce/internal/key.h>
5#include <sauce/internal/type_id.h>
10template<
typename Dependency>
14 void operator()(
void * smartPtrPtr)
const {
15 delete static_cast<SmartPtr *
>(smartPtrPtr);
20 typedef sauce::shared_ptr<void> CachedPtr;
21 typedef std::map<TypeId, CachedPtr> Cache;
33 template<
typename Dependency>
36 typedef typename Key<Normalized>::Ptr SmartPtr;
53 static_cast<void *
>(
new SmartPtr(pointer)),
56 cache.insert(std::make_pair(typeIdOf<Normalized>(), cachedPtr));
65 template<
typename Dependency>
68 typedef typename Key<Normalized>::Ptr SmartPtr;
70 Cache::const_iterator cachedPtr = cache.find(typeIdOf<Normalized>());
71 if (cachedPtr == cache.end()) {
75 out = *
static_cast<SmartPtr *
>(cachedPtr->second.get());
82namespace i = ::sauce::internal;
A complete specification of a dependency request.
Definition: key.h:15
Definition: scope_cache.h:19
void put(typename Key< Dependency >::Ptr pointer)
Insert a dependency into the cache.
Definition: scope_cache.h:34
bool get(typename Key< Dependency >::Ptr &out) const
Probe the cache for a dependency.
Definition: scope_cache.h:66
Definition: scope_cache.h:11