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

#ifndef SRC_LIB_DEBUGGER_UTILS_BYTE_BLOCK_H_
#define SRC_LIB_DEBUGGER_UTILS_BYTE_BLOCK_H_

#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

#endif  // SRC_LIB_DEBUGGER_UTILS_BYTE_BLOCK_H_
