xref: /llvm-project/lldb/source/API/SBWatchpointOptions.cpp (revision 75e862077834c06e574d34e8958dd2ee7cc1d334)
1*75e86207SDavid Spickett //===-- SBWatchpointOptions.cpp -------------------------------------------===//
2*75e86207SDavid Spickett //
3*75e86207SDavid Spickett // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*75e86207SDavid Spickett // See https://llvm.org/LICENSE.txt for license information.
5*75e86207SDavid Spickett // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*75e86207SDavid Spickett //
7*75e86207SDavid Spickett //===----------------------------------------------------------------------===//
8*75e86207SDavid Spickett 
9*75e86207SDavid Spickett #include "lldb/API/SBWatchpointOptions.h"
10*75e86207SDavid Spickett #include "lldb/Breakpoint/Watchpoint.h"
11*75e86207SDavid Spickett #include "lldb/Utility/Instrumentation.h"
12*75e86207SDavid Spickett 
13*75e86207SDavid Spickett #include "Utils.h"
14*75e86207SDavid Spickett 
15*75e86207SDavid Spickett using namespace lldb;
16*75e86207SDavid Spickett using namespace lldb_private;
17*75e86207SDavid Spickett 
18*75e86207SDavid Spickett class WatchpointOptionsImpl {
19*75e86207SDavid Spickett public:
20*75e86207SDavid Spickett   bool m_read = false;
21*75e86207SDavid Spickett   bool m_write = false;
22*75e86207SDavid Spickett   bool m_modify = false;
23*75e86207SDavid Spickett };
24*75e86207SDavid Spickett 
25*75e86207SDavid Spickett 
SBWatchpointOptions()26*75e86207SDavid Spickett SBWatchpointOptions::SBWatchpointOptions()
27*75e86207SDavid Spickett     : m_opaque_up(new WatchpointOptionsImpl()) {
28*75e86207SDavid Spickett   LLDB_INSTRUMENT_VA(this);
29*75e86207SDavid Spickett }
30*75e86207SDavid Spickett 
SBWatchpointOptions(const SBWatchpointOptions & rhs)31*75e86207SDavid Spickett SBWatchpointOptions::SBWatchpointOptions(const SBWatchpointOptions &rhs) {
32*75e86207SDavid Spickett   LLDB_INSTRUMENT_VA(this, rhs);
33*75e86207SDavid Spickett 
34*75e86207SDavid Spickett   m_opaque_up = clone(rhs.m_opaque_up);
35*75e86207SDavid Spickett }
36*75e86207SDavid Spickett 
37*75e86207SDavid Spickett const SBWatchpointOptions &
operator =(const SBWatchpointOptions & rhs)38*75e86207SDavid Spickett SBWatchpointOptions::operator=(const SBWatchpointOptions &rhs) {
39*75e86207SDavid Spickett   LLDB_INSTRUMENT_VA(this, rhs);
40*75e86207SDavid Spickett 
41*75e86207SDavid Spickett   if (this != &rhs)
42*75e86207SDavid Spickett     m_opaque_up = clone(rhs.m_opaque_up);
43*75e86207SDavid Spickett   return *this;
44*75e86207SDavid Spickett }
45*75e86207SDavid Spickett 
46*75e86207SDavid Spickett SBWatchpointOptions::~SBWatchpointOptions() = default;
47*75e86207SDavid Spickett 
SetWatchpointTypeRead(bool read)48*75e86207SDavid Spickett void SBWatchpointOptions::SetWatchpointTypeRead(bool read) {
49*75e86207SDavid Spickett   m_opaque_up->m_read = read;
50*75e86207SDavid Spickett }
GetWatchpointTypeRead() const51*75e86207SDavid Spickett bool SBWatchpointOptions::GetWatchpointTypeRead() const {
52*75e86207SDavid Spickett   return m_opaque_up->m_read;
53*75e86207SDavid Spickett }
54*75e86207SDavid Spickett 
SetWatchpointTypeWrite(WatchpointWriteType write_type)55*75e86207SDavid Spickett void SBWatchpointOptions::SetWatchpointTypeWrite(
56*75e86207SDavid Spickett     WatchpointWriteType write_type) {
57*75e86207SDavid Spickett   if (write_type == eWatchpointWriteTypeOnModify) {
58*75e86207SDavid Spickett     m_opaque_up->m_write = false;
59*75e86207SDavid Spickett     m_opaque_up->m_modify = true;
60*75e86207SDavid Spickett   } else if (write_type == eWatchpointWriteTypeAlways) {
61*75e86207SDavid Spickett     m_opaque_up->m_write = true;
62*75e86207SDavid Spickett     m_opaque_up->m_modify = false;
63*75e86207SDavid Spickett   } else
64*75e86207SDavid Spickett     m_opaque_up->m_write = m_opaque_up->m_modify = false;
65*75e86207SDavid Spickett }
66*75e86207SDavid Spickett 
GetWatchpointTypeWrite() const67*75e86207SDavid Spickett WatchpointWriteType SBWatchpointOptions::GetWatchpointTypeWrite() const {
68*75e86207SDavid Spickett   if (m_opaque_up->m_modify)
69*75e86207SDavid Spickett     return eWatchpointWriteTypeOnModify;
70*75e86207SDavid Spickett   if (m_opaque_up->m_write)
71*75e86207SDavid Spickett     return eWatchpointWriteTypeAlways;
72*75e86207SDavid Spickett   return eWatchpointWriteTypeDisabled;
73*75e86207SDavid Spickett }
74