shared_ptr<Patch> CachingPyramidFeatureExtractor::extractOutputCopying(CacheLayer& layer, int x, int y) const { CacheKey key(x, y); unordered_map<CacheKey, shared_ptr<Patch>, CacheKey::hash>& layerCache = layer.getCache(); auto iterator = layerCache.find(key); if (iterator == layerCache.end()) { shared_ptr<Patch> patch = extractor->extract(layer.getIndex(), x, y); layerCache.emplace(key, patch); return patch; } return make_shared<Patch>(*(iterator->second)); }
shared_ptr<Patch> CachingPyramidFeatureExtractor::extractInputCopying(CacheLayer& layer, int x, int y) const { CacheKey key(x, y); unordered_map<CacheKey, shared_ptr<Patch>, CacheKey::hash>& layerCache = layer.getCache(); auto iterator = layerCache.find(key); if (iterator == layerCache.end()) { shared_ptr<Patch> patch = extractor->extract(layer.getIndex(), x, y); if (patch) // store a copy of the patch only if it exists layerCache.emplace(key, make_shared<Patch>(*patch)); return patch; } return iterator->second; }