// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_PERSISTENT_CACHE_ENTRY_H_ #define COMPONENTS_PERSISTENT_CACHE_ENTRY_H_ #include #include "base/component_export.h" #include "base/containers/span.h" namespace persistent_cache { // Provides access to a snapshot of the content of an entry. The snapshot // remains valid and unmodified even if the entry is modified or removed in the // cache. class COMPONENT_EXPORT(PERSISTENT_CACHE) Entry { public: virtual ~Entry() = 0; // Not copyable or moveable. Entry(const Entry&) = delete; Entry(Entry&&) = delete; Entry& operator=(const Entry&) = delete; Entry& operator=(Entry&&) = delete; // Use to acquire a span that is kept valid until this Entry is released. If // looking to immediately copy contents prefer `CopyContentTo` which is // guaranteed to be equally or more performant. virtual base::span GetContentSpan() const = 0; // Use to copy the content of the entry to `content`. virtual size_t CopyContentTo(base::span content) const; // Use to get the size of the entry's value in bytes. virtual size_t GetContentSize() const; protected: // Ownership and liveness is managed by the backend and thus Entry should not // be created outside of their scope. Entry() = default; }; } // namespace persistent_cache #endif // COMPONENTS_PERSISTENT_CACHE_ENTRY_H_