[Lldb-commits] [lldb] [lldb] [mostly NFC] Large WP foundation: WatchpointResources (PR #68845)
Alex Langford via lldb-commits
lldb-commits at lists.llvm.org
Mon Oct 23 17:58:53 PDT 2023
================
@@ -0,0 +1,140 @@
+//===-- WatchpointResource.h ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_BREAKPOINT_WATCHPOINTRESOURCE_H
+#define LLDB_BREAKPOINT_WATCHPOINTRESOURCE_H
+
+#include "lldb/Breakpoint/WatchpointCollection.h"
+#include "lldb/lldb-public.h"
+
+#include <set>
+
+namespace lldb_private {
+
+class WatchpointResource
+ : public std::enable_shared_from_this<WatchpointResource> {
+
+public:
+ // Constructors and Destructors
+ WatchpointResource(lldb::addr_t addr, size_t size, bool read, bool write);
+
+ ~WatchpointResource();
+
+ void GetMemoryRange(lldb::addr_t &addr, size_t &size) const;
+
+ lldb::addr_t GetAddress() const;
+
+ size_t GetByteSize() const;
+
+ void GetType(bool &read, bool &write) const;
+
+ void SetType(bool read, bool write);
+
+ /// The "Owners" are the watchpoints that share this resource.
+ /// The method adds the \a owner to this resource's owner list.
+ ///
+ /// \param[in] owner
+ /// \a owner is the Wachpoint to add.
+ void AddOwner(const lldb::WatchpointSP &owner);
+
+ /// The method removes the owner at \a owner from this watchpoint
+ /// resource.
+ void RemoveOwner(lldb::WatchpointSP &owner);
+
+ /// This method returns the number of Watchpoints currently using
+ /// watchpoint resource.
+ ///
+ /// \return
+ /// The number of owners.
+ size_t GetNumberOfOwners();
+
+ /// This method returns the Watchpoint at index \a index using this
+ /// Resource. The owners are listed ordinally from 0 to
+ /// GetNumberOfOwners() - 1 so you can use this method to iterate over the
+ /// owners.
+ ///
+ /// \param[in] idx
+ /// The index in the list of owners for which you wish the owner location.
+ ///
+ /// \return
+ /// The Watchpoint at that index.
+ lldb::WatchpointSP GetOwnerAtIndex(size_t idx);
----------------
bulbazord wrote:
Instead of exposing this primitive, maybe it would make more sense to return an iterator or an iterator range?
Something like:
```
IteratorRange<lldb::WatchpointSP> Owners();
```
IMO this would make it easier to write bug-free code since we're not going to have to manually set up index iteration logic.
https://github.com/llvm/llvm-project/pull/68845
More information about the lldb-commits
mailing list