#pragma once #include namespace c10d { class TORCH_API PrefixStore : public Store { public: explicit PrefixStore(std::string prefix, c10::intrusive_ptr store); using Store::set; void set(const std::string& key, const std::vector& value) override; using Store::compareSet; std::vector compareSet( const std::string& key, const std::vector& expectedValue, const std::vector& desiredValue) override; std::vector get(const std::string& key) override; int64_t add(const std::string& key, int64_t value) override; bool deleteKey(const std::string& key) override; int64_t getNumKeys() override; bool check(const std::vector& keys) override; void wait(const std::vector& keys) override; void wait( const std::vector& keys, const std::chrono::milliseconds& timeout) override; const std::chrono::milliseconds& getTimeout() const noexcept override; void setTimeout(const std::chrono::milliseconds& timeout) override; void append(const std::string& key, const std::vector& value) override; std::vector> multiGet( const std::vector& keys) override; void multiSet( const std::vector& keys, const std::vector>& values) override; // Returns true if this store support append, multiGet and multiSet bool hasExtendedApi() const override; c10::intrusive_ptr getUnderlyingStore(); // Recursively to fetch the store before layers of wrapping with PrefixStore. c10::intrusive_ptr getUnderlyingNonPrefixStore(); protected: std::string prefix_; c10::intrusive_ptr store_; std::string joinKey(const std::string& key); std::vector joinKeys(const std::vector& keys); }; } // namespace c10d