| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SMBPROVIDER_METADATA_CACHE_H_ |
| #define SMBPROVIDER_METADATA_CACHE_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include <base/macros.h> |
| |
| #include "smbprovider/proto.h" |
| |
| namespace smbprovider { |
| |
| // Maintains a cache of file and directory metadata. This is the data |
| // that is returned by stat(); name, entry type, size, date modified. |
| // |
| // The libsmbclient API can return all metadata while enumerating a |
| // directory, but the Chrome FileSystemProvider API makes per entry |
| // requests for metadata. This cache will store the results found |
| // when reading a directory, then use the cache to attempt to satisfy |
| // requests for metadata. |
| // |
| // TODO(zentaro): Follow up CL's will implement; |
| // * Invalidating requested entries based on time. |
| // * Purging entries based on time. |
| class MetadataCache { |
| public: |
| MetadataCache(); |
| ~MetadataCache(); |
| |
| MetadataCache& operator=(MetadataCache&& other) = default; |
| |
| // Adds an entry to the cache. |
| void AddEntry(const DirectoryEntry& entry); |
| |
| // Finds an entry at |full_path|. If found, returns true and out_entry |
| // is set. |full_path| is a full smb url. |
| bool FindEntry(const std::string& full_path, DirectoryEntry* out_entry); |
| |
| // Deletes all entries from the cache. |
| void ClearAll(); |
| |
| // Returns true if the cache is empty. |
| bool IsEmpty() const; |
| |
| private: |
| struct CacheEntry { |
| CacheEntry() = default; |
| explicit CacheEntry(const DirectoryEntry& entry) : entry(entry) {} |
| CacheEntry& operator=(CacheEntry&& other) = default; |
| |
| DirectoryEntry entry; |
| // TODO(zentaro): Add a time for invalidation. |
| |
| DISALLOW_COPY_AND_ASSIGN(CacheEntry); |
| }; |
| |
| std::map<std::string, CacheEntry> cache_; |
| DISALLOW_COPY_AND_ASSIGN(MetadataCache); |
| }; |
| |
| } // namespace smbprovider |
| |
| #endif // SMBPROVIDER_METADATA_CACHE_H_ |