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