/src/gdal/port/cpl_mem_cache.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * LRUCache11 - a templated C++11 based LRU cache class that allows |
3 | | * specification of |
4 | | * key, value and optionally the map container type (defaults to |
5 | | * std::unordered_map) |
6 | | * By using the std::map and a linked list of keys it allows O(1) insert, delete |
7 | | * and |
8 | | * refresh operations. |
9 | | * |
10 | | * This is a header-only library and all you need is the LRUCache11.hpp file |
11 | | * |
12 | | * Github: https://github.com/mohaps/lrucache11 |
13 | | * |
14 | | * This is a follow-up to the LRUCache project - |
15 | | * https://github.com/mohaps/lrucache |
16 | | * |
17 | | * Copyright (c) 2012-22 SAURAV MOHAPATRA <mohaps@gmail.com> |
18 | | * |
19 | | * Permission to use, copy, modify, and distribute this software for any |
20 | | * purpose with or without fee is hereby granted, provided that the above |
21 | | * copyright notice and this permission notice appear in all copies. |
22 | | * |
23 | | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
24 | | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
25 | | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
26 | | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
27 | | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
28 | | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
29 | | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
30 | | */ |
31 | | |
32 | | /*! @cond Doxygen_Suppress */ |
33 | | |
34 | | #pragma once |
35 | | #include <algorithm> |
36 | | #include <cstdint> |
37 | | #include <list> |
38 | | #include <mutex> |
39 | | #include <stdexcept> |
40 | | #include <thread> |
41 | | #include <unordered_map> |
42 | | |
43 | | namespace lru11 |
44 | | { |
45 | | /* |
46 | | * a noop lockable concept that can be used in place of std::mutex |
47 | | */ |
48 | | class NullLock |
49 | | { |
50 | | public: |
51 | | void lock() |
52 | 32.1k | { |
53 | 32.1k | } |
54 | | |
55 | | void unlock() |
56 | 32.1k | { |
57 | 32.1k | } |
58 | | |
59 | | bool try_lock() |
60 | 0 | { |
61 | 0 | return true; |
62 | 0 | } |
63 | | }; |
64 | | |
65 | | #if defined(__clang__) |
66 | | #pragma clang diagnostic push |
67 | | #pragma clang diagnostic ignored "-Wweak-vtables" |
68 | | #endif |
69 | | |
70 | | /** |
71 | | * error raised when a key not in cache is passed to get() |
72 | | */ |
73 | | class KeyNotFound : public std::invalid_argument |
74 | | { |
75 | | public: |
76 | | KeyNotFound() : std::invalid_argument("key_not_found") |
77 | 0 | { |
78 | 0 | } |
79 | | }; |
80 | | |
81 | | #if defined(__clang__) |
82 | | #pragma clang diagnostic pop |
83 | | #endif |
84 | | |
85 | | template <typename K, typename V> struct KeyValuePair |
86 | | { |
87 | | public: |
88 | | K key; |
89 | | V value; |
90 | | |
91 | 0 | KeyValuePair(const K &k, const V &v) : key(k), value(v) |
92 | 0 | { |
93 | 0 | } Unexecuted instantiation: lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >::KeyValuePair(GDALThreadSafeDataset const* const&, std::__1::shared_ptr<GDALDataset> const&) Unexecuted instantiation: lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >::KeyValuePair(unsigned long const&, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > const&) |
94 | | |
95 | 0 | KeyValuePair(const K &k, V &&v) : key(k), value(std::move(v)) |
96 | 0 | { |
97 | 0 | } Unexecuted instantiation: lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >::KeyValuePair(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >&&) Unexecuted instantiation: lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >::KeyValuePair(OSRProjTLSCache::EPSGCacheKey const&, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>&&) Unexecuted instantiation: lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >::KeyValuePair(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>&&) Unexecuted instantiation: lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >::KeyValuePair(unsigned long long const&, cpl::NonCopyableVector<unsigned char>&&) Unexecuted instantiation: lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >::KeyValuePair(int const&, std::__1::pair<unsigned long long, unsigned long long>&&) |
98 | | |
99 | | private: |
100 | | KeyValuePair(const KeyValuePair &) = delete; |
101 | | KeyValuePair &operator=(const KeyValuePair &) = delete; |
102 | | }; |
103 | | |
104 | | /** |
105 | | * The LRU Cache class templated by |
106 | | * Key - key type |
107 | | * Value - value type |
108 | | * MapType - an associative container like std::unordered_map |
109 | | * LockType - a lock type derived from the Lock class (default: |
110 | | *NullLock = no synchronization) |
111 | | * |
112 | | * The default NullLock based template is not thread-safe, however passing |
113 | | *Lock=std::mutex will make it |
114 | | * thread-safe |
115 | | */ |
116 | | template <class Key, class Value, class Lock = NullLock, |
117 | | class Map = std::unordered_map< |
118 | | Key, typename std::list<KeyValuePair<Key, Value>>::iterator>> |
119 | | class Cache |
120 | | { |
121 | | public: |
122 | | typedef KeyValuePair<Key, Value> node_type; |
123 | | typedef std::list<KeyValuePair<Key, Value>> list_type; |
124 | | typedef Map map_type; |
125 | | typedef Lock lock_type; |
126 | | using Guard = std::lock_guard<lock_type>; |
127 | | |
128 | | /** |
129 | | * the max size is the hard limit of keys and (maxSize + elasticity) is the |
130 | | * soft limit |
131 | | * the cache is allowed to grow till maxSize + elasticity and is pruned back |
132 | | * to maxSize keys |
133 | | * set maxSize = 0 for an unbounded cache (but in that case, you're better |
134 | | * off using a std::unordered_map directly anyway! :) |
135 | | */ |
136 | | explicit Cache(size_t maxSize = 64, size_t elasticity = 10) |
137 | 2.16k | : maxSize_(maxSize), elasticity_(elasticity) |
138 | 2.16k | { |
139 | 2.16k | } lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::Cache(unsigned long, unsigned long) Line | Count | Source | 137 | 2.15k | : maxSize_(maxSize), elasticity_(elasticity) | 138 | 2.15k | { | 139 | 2.15k | } |
Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::Cache(unsigned long, unsigned long) Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::Cache(unsigned long, unsigned long) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::Cache(unsigned long, unsigned long) Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::Cache(unsigned long, unsigned long) Unexecuted instantiation: lru11::Cache<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >, lru11::NullLock, std::__1::unordered_map<unsigned long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*> > > > >::Cache(unsigned long, unsigned long) lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::Cache(unsigned long, unsigned long) Line | Count | Source | 137 | 2 | : maxSize_(maxSize), elasticity_(elasticity) | 138 | 2 | { | 139 | 2 | } |
Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::Cache(unsigned long, unsigned long) |
140 | | |
141 | 2.15k | virtual ~Cache() = default; lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::~Cache() Line | Count | Source | 141 | 2.15k | virtual ~Cache() = default; |
Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >, lru11::NullLock, std::__1::unordered_map<unsigned long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::~Cache() Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::~Cache() |
142 | | |
143 | | size_t size() const |
144 | | { |
145 | | Guard g(lock_); |
146 | | return cache_.size(); |
147 | | } |
148 | | |
149 | | bool empty() const |
150 | 0 | { |
151 | 0 | Guard g(lock_); |
152 | 0 | return cache_.empty(); |
153 | 0 | } Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::empty() const Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::empty() const |
154 | | |
155 | | void clear() |
156 | 4.31k | { |
157 | 4.31k | Guard g(lock_); |
158 | 4.31k | cache_.clear(); |
159 | 4.31k | keys_.clear(); |
160 | 4.31k | } lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::clear() Line | Count | Source | 156 | 4.31k | { | 157 | 4.31k | Guard g(lock_); | 158 | 4.31k | cache_.clear(); | 159 | 4.31k | keys_.clear(); | 160 | 4.31k | } |
Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::clear() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::clear() |
161 | | |
162 | | void insert(const Key &k, const Value &v) |
163 | 0 | { |
164 | 0 | Guard g(lock_); |
165 | 0 | const auto iter = cache_.find(k); |
166 | 0 | if (iter != cache_.end()) |
167 | 0 | { |
168 | 0 | iter->second->value = v; |
169 | 0 | keys_.splice(keys_.begin(), keys_, iter->second); |
170 | 0 | return; |
171 | 0 | } |
172 | | |
173 | 0 | keys_.emplace_front(k, v); |
174 | 0 | cache_[k] = keys_.begin(); |
175 | 0 | prune(); |
176 | 0 | } Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::insert(GDALThreadSafeDataset const* const&, std::__1::shared_ptr<GDALDataset> const&) Unexecuted instantiation: lru11::Cache<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >, lru11::NullLock, std::__1::unordered_map<unsigned long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*> > > > >::insert(unsigned long const&, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > const&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::insert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > const&) |
177 | | |
178 | | Value &insert(const Key &k, Value &&v) |
179 | 0 | { |
180 | 0 | Guard g(lock_); |
181 | 0 | const auto iter = cache_.find(k); |
182 | 0 | if (iter != cache_.end()) |
183 | 0 | { |
184 | 0 | iter->second->value = std::move(v); |
185 | 0 | keys_.splice(keys_.begin(), keys_, iter->second); |
186 | 0 | return keys_.front().value; |
187 | 0 | } |
188 | | |
189 | 0 | keys_.emplace_front(k, std::move(v)); |
190 | 0 | cache_[k] = keys_.begin(); |
191 | 0 | prune(); |
192 | 0 | return keys_.front().value; |
193 | 0 | } Unexecuted instantiation: lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::insert(unsigned long long const&, cpl::NonCopyableVector<unsigned char>&&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::insert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >&&) Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::insert(OSRProjTLSCache::EPSGCacheKey const&, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>&&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::insert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>&&) Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::insert(int const&, std::__1::pair<unsigned long long, unsigned long long>&&) |
194 | | |
195 | | bool tryGet(const Key &kIn, Value &vOut) |
196 | 0 | { |
197 | 0 | Guard g(lock_); |
198 | 0 | const auto iter = cache_.find(kIn); |
199 | 0 | if (iter == cache_.end()) |
200 | 0 | { |
201 | 0 | return false; |
202 | 0 | } |
203 | 0 | keys_.splice(keys_.begin(), keys_, iter->second); |
204 | 0 | vOut = iter->second->value; |
205 | 0 | return true; |
206 | 0 | } Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::tryGet(GDALThreadSafeDataset const* const&, std::__1::shared_ptr<GDALDataset>&) Unexecuted instantiation: lru11::Cache<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >, lru11::NullLock, std::__1::unordered_map<unsigned long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*> > > > >::tryGet(unsigned long const&, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::tryGet(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >&) Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::tryGet(int const&, std::__1::pair<unsigned long long, unsigned long long>&) |
207 | | |
208 | | /** |
209 | | * The const reference returned here is only |
210 | | * guaranteed to be valid till the next insert/delete |
211 | | */ |
212 | | const Value &get(const Key &k) |
213 | | { |
214 | | Guard g(lock_); |
215 | | const auto iter = cache_.find(k); |
216 | | if (iter == cache_.end()) |
217 | | { |
218 | | throw KeyNotFound(); |
219 | | } |
220 | | keys_.splice(keys_.begin(), keys_, iter->second); |
221 | | return iter->second->value; |
222 | | } |
223 | | |
224 | | Value *getPtr(const Key &k) |
225 | 2.50k | { |
226 | 2.50k | Guard g(lock_); |
227 | 2.50k | const auto iter = cache_.find(k); |
228 | 2.50k | if (iter == cache_.end()) |
229 | 2.50k | { |
230 | 2.50k | return nullptr; |
231 | 2.50k | } |
232 | 0 | keys_.splice(keys_.begin(), keys_, iter->second); |
233 | 0 | return &(iter->second->value); |
234 | 2.50k | } lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::getPtr(unsigned long long const&) Line | Count | Source | 225 | 2.50k | { | 226 | 2.50k | Guard g(lock_); | 227 | 2.50k | const auto iter = cache_.find(k); | 228 | 2.50k | if (iter == cache_.end()) | 229 | 2.50k | { | 230 | 2.50k | return nullptr; | 231 | 2.50k | } | 232 | 0 | keys_.splice(keys_.begin(), keys_, iter->second); | 233 | 0 | return &(iter->second->value); | 234 | 2.50k | } |
Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::getPtr(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::getPtr(OSRProjTLSCache::EPSGCacheKey const&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::getPtr(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) |
235 | | |
236 | | /** |
237 | | * returns a copy of the stored object (if found) |
238 | | */ |
239 | | Value getCopy(const Key &k) |
240 | | { |
241 | | return get(k); |
242 | | } |
243 | | |
244 | | bool remove(const Key &k) |
245 | 0 | { |
246 | 0 | Guard g(lock_); |
247 | 0 | auto iter = cache_.find(k); |
248 | 0 | if (iter == cache_.end()) |
249 | 0 | { |
250 | 0 | return false; |
251 | 0 | } |
252 | 0 | keys_.erase(iter->second); |
253 | 0 | cache_.erase(iter); |
254 | 0 | return true; |
255 | 0 | } Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::remove(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::remove(GDALThreadSafeDataset const* const&) Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::remove(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) |
256 | | |
257 | | bool contains(const Key &k) |
258 | 25.3k | { |
259 | 25.3k | Guard g(lock_); |
260 | 25.3k | return cache_.find(k) != cache_.end(); |
261 | 25.3k | } lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::contains(unsigned long long const&) Line | Count | Source | 258 | 25.3k | { | 259 | 25.3k | Guard g(lock_); | 260 | 25.3k | return cache_.find(k) != cache_.end(); | 261 | 25.3k | } |
Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::contains(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::contains(int const&) |
262 | | |
263 | | bool getOldestEntry(Key &kOut, Value &vOut) |
264 | | { |
265 | | Guard g(lock_); |
266 | | if (keys_.empty()) |
267 | | { |
268 | | return false; |
269 | | } |
270 | | kOut = keys_.back().key; |
271 | | vOut = keys_.back().value; |
272 | | return true; |
273 | | } |
274 | | |
275 | | bool removeAndRecycleOldestEntry(Value &vOut) |
276 | | { |
277 | | Guard g(lock_); |
278 | | if (keys_.empty()) |
279 | | { |
280 | | return false; |
281 | | } |
282 | | vOut = std::move(keys_.back().value); |
283 | | cache_.erase(keys_.back().key); |
284 | | keys_.pop_back(); |
285 | | return true; |
286 | | } |
287 | | |
288 | | size_t getMaxSize() const |
289 | | { |
290 | | return maxSize_; |
291 | | } |
292 | | |
293 | | size_t getElasticity() const |
294 | | { |
295 | | return elasticity_; |
296 | | } |
297 | | |
298 | | size_t getMaxAllowedSize() const |
299 | | { |
300 | | return maxSize_ + elasticity_; |
301 | | } |
302 | | |
303 | | template <typename F> void cwalk(F &f) const |
304 | 0 | { |
305 | 0 | Guard g(lock_); |
306 | 0 | std::for_each(keys_.begin(), keys_.end(), f); |
307 | 0 | } Unexecuted instantiation: gdalthreadsafedataset.cpp:void lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::cwalk<GDALThreadLocalDatasetCache::~GDALThreadLocalDatasetCache()::$_0 const>(GDALThreadLocalDatasetCache::~GDALThreadLocalDatasetCache()::$_0 const&) const Unexecuted instantiation: vrtmultidim.cpp:void lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::cwalk<VRTMDArraySourceFromArray::~VRTMDArraySourceFromArray()::$_0>(VRTMDArraySourceFromArray::~VRTMDArraySourceFromArray()::$_0&) const |
308 | | |
309 | | Cache(Cache &&other) |
310 | | : cache_(std::move(other.cache_)), keys_(std::move(other.keys_)), |
311 | | maxSize_(other.maxSize_), elasticity_(other.elasticity_) |
312 | | { |
313 | | } |
314 | | |
315 | | protected: |
316 | | size_t prune() |
317 | 0 | { |
318 | 0 | size_t maxAllowed = maxSize_ + elasticity_; |
319 | 0 | if (maxSize_ == 0 || cache_.size() <= maxAllowed) |
320 | 0 | { /* ERO: changed < to <= */ |
321 | 0 | return 0; |
322 | 0 | } |
323 | 0 | size_t count = 0; |
324 | 0 | while (cache_.size() > maxSize_) |
325 | 0 | { |
326 | 0 | cache_.erase(keys_.back().key); |
327 | 0 | keys_.pop_back(); |
328 | 0 | ++count; |
329 | 0 | } |
330 | 0 | return count; |
331 | 0 | } Unexecuted instantiation: lru11::Cache<unsigned long long, cpl::NonCopyableVector<unsigned char>, lru11::NullLock, std::__1::unordered_map<unsigned long long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*>, std::__1::hash<unsigned long long>, std::__1::equal_to<unsigned long long>, std::__1::allocator<std::__1::pair<unsigned long long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long long, cpl::NonCopyableVector<unsigned char> >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<OGRProjCT, std::__1::default_delete<OGRProjCT> > >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<OSRProjTLSCache::EPSGCacheKey, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, OSRProjTLSCache::EPSGCacheKeyHasher, std::__1::equal_to<OSRProjTLSCache::EPSGCacheKey>, std::__1::allocator<std::__1::pair<OSRProjTLSCache::EPSGCacheKey const, std::__1::__list_iterator<lru11::KeyValuePair<OSRProjTLSCache::EPSGCacheKey, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter>, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::unique_ptr<PJconsts, OSRProjTLSCache::OSRPJDeleter> >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset>, lru11::NullLock, std::__1::unordered_map<GDALThreadSafeDataset const*, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*>, std::__1::hash<GDALThreadSafeDataset const*>, std::__1::equal_to<GDALThreadSafeDataset const*>, std::__1::allocator<std::__1::pair<GDALThreadSafeDataset const* const, std::__1::__list_iterator<lru11::KeyValuePair<GDALThreadSafeDataset const*, std::__1::shared_ptr<GDALDataset> >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > >, lru11::NullLock, std::__1::unordered_map<unsigned long, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*>, std::__1::hash<unsigned long>, std::__1::equal_to<unsigned long>, std::__1::allocator<std::__1::pair<unsigned long const, std::__1::__list_iterator<lru11::KeyValuePair<unsigned long, std::__1::shared_ptr<std::__1::vector<double, std::__1::allocator<double> > > >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > >, lru11::NullLock, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::__list_iterator<lru11::KeyValuePair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::shared_ptr<VRTArrayDatasetWrapper>, std::__1::unordered_set<void const*, std::__1::hash<void const*>, std::__1::equal_to<void const*>, std::__1::allocator<void const*> > > >, void*> > > > >::prune() Unexecuted instantiation: lru11::Cache<int, std::__1::pair<unsigned long long, unsigned long long>, lru11::NullLock, std::__1::unordered_map<int, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*>, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<int const, std::__1::__list_iterator<lru11::KeyValuePair<int, std::__1::pair<unsigned long long, unsigned long long> >, void*> > > > >::prune() |
332 | | |
333 | | private: |
334 | | // Disallow copying. |
335 | | Cache(const Cache &) = delete; |
336 | | Cache &operator=(const Cache &) = delete; |
337 | | |
338 | | mutable Lock lock_{}; |
339 | | Map cache_{}; |
340 | | list_type keys_{}; |
341 | | size_t maxSize_; |
342 | | size_t elasticity_; |
343 | | }; |
344 | | |
345 | | } // namespace lru11 |
346 | | |
347 | | /*! @endcond */ |