1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Copyright 2013-2014, Rene Gollent, rene@gollent.com. 4 * Distributed under the terms of the MIT License. 5 */ 6 7 8#include "UserBreakpoint.h" 9 10#include "Function.h" 11#include "FunctionID.h" 12#include "LocatableFile.h" 13 14 15// #pragma mark - UserBreakpointLocation 16 17 18UserBreakpointLocation::UserBreakpointLocation(FunctionID* functionID, 19 LocatableFile* sourceFile, const SourceLocation& sourceLocation, 20 target_addr_t relativeAddress) 21 : 22 fFunctionID(functionID), 23 fSourceFile(sourceFile), 24 fSourceLocation(sourceLocation), 25 fRelativeAddress(relativeAddress) 26{ 27 fFunctionID->AcquireReference(); 28 if (fSourceFile != NULL) 29 fSourceFile->AcquireReference(); 30} 31 32 33UserBreakpointLocation::UserBreakpointLocation( 34 const UserBreakpointLocation& other) 35 : 36 fFunctionID(other.fFunctionID), 37 fSourceFile(other.fSourceFile), 38 fSourceLocation(other.fSourceLocation), 39 fRelativeAddress(other.fRelativeAddress) 40{ 41 fFunctionID->AcquireReference(); 42 if (fSourceFile != NULL) 43 fSourceFile->AcquireReference(); 44} 45 46 47UserBreakpointLocation::~UserBreakpointLocation() 48{ 49 fFunctionID->ReleaseReference(); 50 if (fSourceFile != NULL) 51 fSourceFile->ReleaseReference(); 52} 53 54 55UserBreakpointLocation& 56UserBreakpointLocation::operator=( 57 const UserBreakpointLocation& other) 58{ 59 other.fFunctionID->AcquireReference(); 60 if (other.fSourceFile != NULL) 61 other.fSourceFile->AcquireReference(); 62 63 fFunctionID->ReleaseReference(); 64 if (fSourceFile != NULL) 65 fSourceFile->ReleaseReference(); 66 67 fFunctionID = other.fFunctionID; 68 fSourceFile = other.fSourceFile; 69 fSourceLocation = other.fSourceLocation; 70 fRelativeAddress = other.fRelativeAddress; 71 72 return *this; 73} 74 75 76// #pragma mark - UserBreakpointInstance 77 78 79UserBreakpointInstance::UserBreakpointInstance(UserBreakpoint* userBreakpoint, 80 target_addr_t address) 81 : 82 fAddress(address), 83 fUserBreakpoint(userBreakpoint), 84 fBreakpoint(NULL) 85{ 86} 87 88 89void 90UserBreakpointInstance::SetBreakpoint(Breakpoint* breakpoint) 91{ 92 fBreakpoint = breakpoint; 93} 94 95 96// #pragma mark - UserBreakpoint 97 98 99UserBreakpoint::UserBreakpoint(const UserBreakpointLocation& location) 100 : 101 fLocation(location), 102 fValid(false), 103 fEnabled(false), 104 fHidden(false), 105 fConditionExpression() 106{ 107} 108 109 110UserBreakpoint::~UserBreakpoint() 111{ 112 for (int32 i = 0; UserBreakpointInstance* instance = fInstances.ItemAt(i); 113 i++) { 114 delete instance; 115 } 116} 117 118 119int32 120UserBreakpoint::CountInstances() const 121{ 122 return fInstances.CountItems(); 123} 124 125 126UserBreakpointInstance* 127UserBreakpoint::InstanceAt(int32 index) const 128{ 129 return fInstances.ItemAt(index); 130} 131 132 133bool 134UserBreakpoint::AddInstance(UserBreakpointInstance* instance) 135{ 136 return fInstances.AddItem(instance); 137} 138 139 140void 141UserBreakpoint::RemoveInstance(UserBreakpointInstance* instance) 142{ 143 fInstances.RemoveItem(instance); 144} 145 146 147UserBreakpointInstance* 148UserBreakpoint::RemoveInstanceAt(int32 index) 149{ 150 return fInstances.RemoveItemAt(index); 151} 152 153 154void 155UserBreakpoint::SetValid(bool valid) 156{ 157 fValid = valid; 158} 159 160 161void 162UserBreakpoint::SetEnabled(bool enabled) 163{ 164 fEnabled = enabled; 165} 166 167 168void 169UserBreakpoint::SetHidden(bool hidden) 170{ 171 fHidden = hidden; 172} 173 174 175void 176UserBreakpoint::SetCondition(const BString& conditionExpression) 177{ 178 fConditionExpression = conditionExpression; 179} 180