OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
S3HeaderCache.cpp
Go to the documentation of this file.
1 #include "S3HeaderCache.h"
2 #include "S3StreamDefaults.h"
3 
4 std::shared_ptr<ossim::S3HeaderCache> ossim::S3HeaderCache::m_instance;
5 
6 
8 :m_maxCacheEntries(ossim::S3StreamDefaults::m_nReadCacheHeaders)
9 {
10 
11 }
12 
14 {
15  m_cache.clear();
16 }
17 
18 std::shared_ptr<ossim::S3HeaderCache> ossim::S3HeaderCache::instance()
19 {
20  if(!m_instance)
21  {
22  m_instance = std::make_shared<S3HeaderCache>();
23  }
24 
25  return m_instance;
26 }
27 
29 {
30  std::unique_lock<std::mutex> lock(m_mutex);
31  bool result = false;
32  if(m_maxCacheEntries<=0) return result;
33  CacheType::const_iterator iter = m_cache.find(key);
34 
35  if(iter != m_cache.end())
36  {
37  filesize = iter->second->m_filesize;
38  result = true;
39  }
40 
41  return result;
42 }
43 
45 {
46  std::unique_lock<std::mutex> lock(m_mutex);
47  if(m_maxCacheEntries<=0) return;
48  CacheType::const_iterator iter = m_cache.find(key);
49 
50  if(iter != m_cache.end())
51  {
52  iter->second->m_filesize = node->m_filesize;
53  }
54  else
55  {
56  if((ossim_int64)m_cache.size() >= m_maxCacheEntries)
57  {
58  shrinkEntries();
59  }
60  m_cache.insert( std::make_pair(key, node) );
61  m_cacheTime.insert( std::make_pair(node->m_timestamp, key) );
62  }
63 }
64 
66 {
67  ossim_int64 targetSize = static_cast<ossim_int64>(0.2*m_maxCacheEntries);
68 
69  if(m_cacheTime.empty()) return;
70  if(targetSize >= (ossim_int64)m_cache.size())
71  {
72  m_cache.clear();
73  m_cacheTime.clear();
74  return;
75  }
76 
77  CacheTimeIndexType::iterator iter = m_cacheTime.begin();
78 
79  while(targetSize > 0)
80  {
81  m_cache.erase(iter->second);
82  iter = m_cacheTime.erase(iter);
83  --targetSize;
84  }
85 }
86 
std::shared_ptr< S3HeaderCacheNode > Node_t
Definition: S3HeaderCache.h:30
void addHeader(const Key_t &key, Node_t &node)
static std::shared_ptr< S3HeaderCache > m_instance
Definition: S3HeaderCache.h:46
This code was derived from https://gist.github.com/mshockwave.
Definition: Barrier.h:8
bool getCachedFilesize(const Key_t &key, ossim_int64 &filesize) const
static std::shared_ptr< S3HeaderCache > instance()
long long ossim_int64