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