blob: 64fd3a130d94ec9562365471cf6dad6c8ade45e6 [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 SRC_STORAGE_LIB_DISK_INSPECTOR_INCLUDE_DISK_INSPECTOR_VMO_BUFFER_FACTORY_H_
#define SRC_STORAGE_LIB_DISK_INSPECTOR_INCLUDE_DISK_INSPECTOR_VMO_BUFFER_FACTORY_H_
#include <lib/fpromise/result.h>
#include <zircon/types.h>
#include <memory>
#include <storage/buffer/block_buffer.h>
#include <storage/buffer/vmoid_registry.h>
#include "buffer_factory.h"
namespace disk_inspector {
// BufferFactory that is backed by VmoBuffers. This object's lifetime should not exceed the lifetime
// of its associated registry.
class VmoBufferFactory : public BufferFactory {
public:
explicit VmoBufferFactory(storage::VmoidRegistry* registry, uint32_t block_size)
: registry_(registry), block_size_(block_size) {}
VmoBufferFactory(const VmoBufferFactory&) = delete;
VmoBufferFactory(VmoBufferFactory&&) = delete;
VmoBufferFactory& operator=(const VmoBufferFactory&) = delete;
VmoBufferFactory& operator=(VmoBufferFactory&&) = delete;
~VmoBufferFactory() override = default;
// BufferFactory interface:
fpromise::result<std::unique_ptr<storage::BlockBuffer>, zx_status_t> CreateBuffer(
size_t capacity) const final;
private:
// Registry used to register created VmoBuffers with an underlying block device.
storage::VmoidRegistry* registry_;
// Block size used for created VmoBuffers.
uint32_t block_size_;
};
} // namespace disk_inspector
#endif // SRC_STORAGE_LIB_DISK_INSPECTOR_INCLUDE_DISK_INSPECTOR_VMO_BUFFER_FACTORY_H_