#ifndef NET_BASE_ADDRESS_MAP_CACHE_LINUX_H_
#define NET_BASE_ADDRESS_MAP_CACHE_LINUX_H_
#include <map>
#include <string>
#include <unordered_set>
#include "base/synchronization/lock.h"
#include "base/thread_annotations.h"
#include "net/base/address_map_linux.h"
#include "net/base/net_export.h"
namespace net {
class NET_EXPORT AddressMapCacheLinux : public AddressMapOwnerLinux {
public:
AddressMapCacheLinux();
AddressMapCacheLinux(const AddressMapCacheLinux&) = delete;
AddressMapCacheLinux& operator=(const AddressMapCacheLinux&) = delete;
~AddressMapCacheLinux() override;
AddressMap GetAddressMap() const override;
std::unordered_set<int> GetOnlineLinks() const override;
AddressMapCacheLinux* GetAddressMapCacheLinux() override;
void SetCachedInfo(AddressMap address_map,
std::unordered_set<int> online_links);
void ApplyDiffs(const AddressMapDiff& addr_diff,
const OnlineLinksDiff& links_diff);
private:
mutable base::Lock lock_;
AddressMap cached_address_map_ GUARDED_BY(lock_);
std::unordered_set<int> cached_online_links_ GUARDED_BY(lock_);
};
}
#endif