| 72 | |
| 73 | |
| 74 | class LongFilenameCache { |
| 75 | |
| 76 | private: |
| 77 | |
| 78 | |
| 79 | unordered_map<wstring, LongFilenameCacheNode*> m_map; |
| 80 | |
| 81 | list<LongFilenameCacheNode*> m_lru_list; |
| 82 | |
| 83 | list<LongFilenameCacheNode*> m_spare_node_list; |
| 84 | |
| 85 | CRITICAL_SECTION m_crit; |
| 86 | |
| 87 | long long m_lookups; |
| 88 | long long m_hits; |
| 89 | |
| 90 | void lock(); |
| 91 | void unlock(); |
| 92 | |
| 93 | bool check_node_clean(LongFilenameCacheNode *node, const wstring& path); |
| 94 | |
| 95 | public: |
| 96 | |
| 97 | // disallow copying |
| 98 | LongFilenameCache(LongFilenameCache const&) = delete; |
| 99 | void operator=(LongFilenameCache const&) = delete; |
| 100 | |
| 101 | LongFilenameCache(); |
| 102 | |
| 103 | virtual ~LongFilenameCache(); |
| 104 | |
| 105 | bool lookup(LPCWSTR base64_hash, wstring *path, string *actual_encrypted); |
| 106 | |
| 107 | bool store_if_not_there(LPCWSTR base64_hash, LPCWSTR path, const char *actual_encrypted); |
| 108 | |
| 109 | void remove(LPCWSTR base64_hash); |
| 110 | |
| 111 | long long hits() { long long rval; lock(); rval = m_hits; unlock(); return rval; } |
| 112 | long long lookups() { long long rval; lock(); rval = m_lookups; unlock(); return rval; } |
| 113 | }; |
| 114 | |
| 115 |
nothing calls this directly
no outgoing calls
no test coverage detected