15#ifndef ACTIONENGINE_DISTRIBUTED_CONSISTENT_HASH_H_ 
   16#define ACTIONENGINE_DISTRIBUTED_CONSISTENT_HASH_H_ 
   20#include <absl/container/flat_hash_map.h> 
   21#include <absl/crc/crc32c.h> 
   22#include <absl/log/check.h> 
   24namespace act::distributed {
 
   26absl::crc32c_t DefaultHash(std::string_view data);
 
   28using Hash = absl::AnyInvocable<absl::crc32c_t(std::string_view) 
const>;
 
   32  explicit ConsistentMap(int32_t replicas, Hash hash = &DefaultHash);
 
   34  [[nodiscard]] 
bool Empty() 
const;
 
   36  void Add(std::initializer_list<std::string_view> keys);
 
   38  [[nodiscard]] std::string Get(std::string_view key) 
const;
 
   42  int32_t replicas_ = 1;
 
   43  std::vector<uint32_t> keys_;
 
   44  absl::flat_hash_map<uint32_t, std::string> hash_map_;