// Copyright 2018 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_DEVELOPER_DEBUG_ZXDB_CLIENT_BREAKPOINT_LOCATION_IMPL_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_BREAKPOINT_LOCATION_IMPL_H_

#include "src/developer/debug/zxdb/client/breakpoint_location.h"

namespace zxdb {

class BreakpointImpl;

class BreakpointLocationImpl final : public BreakpointLocation {
 public:
  BreakpointLocationImpl(BreakpointImpl* bp, Process* process, uint64_t address);
  ~BreakpointLocationImpl() override;

  // Non-virtual inline getter that doesn't force a symbol lookup.
  uint64_t address() const { return address_; }

  // BreakpointLocation implementation.
  Process* GetProcess() const override;
  Location GetLocation() const override;
  bool IsEnabled() const override;
  void SetEnabled(bool enabled) override;

 private:
  BreakpointImpl* breakpoint_;  // Non-owning.
  Process* process_;            // Non-owning.
  uint64_t address_;
  bool enabled_ = true;

  FXL_DISALLOW_COPY_AND_ASSIGN(BreakpointLocationImpl);
};

}  // namespace zxdb

#endif  // SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_BREAKPOINT_LOCATION_IMPL_H_
