// Copyright 2016 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.

#pragma once

#include <cstddef>
#include <cstdint>

#include "src/lib/fxl/macros.h"

namespace debugger_utils {

// An API for accessing memory, files, or anything else that is
// fixed size, randomly accessible, block of contiguous bytes.

class ByteBlock {
 public:
  virtual ~ByteBlock() = default;

  // Reads the block of memory of length |length| bytes starting at address
  // |address| into |out_buffer|. |out_buffer| must be at least as large as
  // |length|.
  // Returns true on success or false on failure.
  virtual bool Read(uintptr_t address, void* out_buffer,
                    size_t length) const = 0;

  // Writes the block of memory of length |length| bytes from |buffer| to the
  // memory address |address| of this process.
  // Returns true on success or false on failure.
  virtual bool Write(uintptr_t address, const void* buffer,
                     size_t length) const = 0;

 protected:
  ByteBlock() = default;

 private:
  FXL_DISALLOW_COPY_AND_ASSIGN(ByteBlock);
};

}  // namespace debugger_utils
