Merge branch 'master' into no-gc
[macgdbp.git] / Source / BreakpointManager.m
1 /*
2 * MacGDBp
3 * Copyright (c) 2007 - 2008, Blue Static <http://www.bluestatic.org>
4 *
5 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6 * General Public License as published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along with this program; if not,
14 * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
15 */
16
17 #import "BreakpointManager.h"
18
19 @implementation BreakpointManager
20
21 /**
22 * Initializer
23 */
24 - (id)init
25 {
26 if (self = [super init])
27 {
28 if (!breakpoints)
29 {
30 breakpoints = [[NSMutableDictionary alloc] init];
31 }
32 }
33 return self;
34 }
35
36 /**
37 * Returns the shared manager (singleton)
38 */
39 + (BreakpointManager *)sharedManager
40 {
41 static BreakpointManager *manager;
42 if (!manager)
43 {
44 manager = [[BreakpointManager alloc] init];
45 }
46 return manager;
47 }
48
49 /**
50 * Registers a breakpoint at a given line
51 */
52 - (void)addBreakpoint:(Breakpoint *)bp;
53 {
54 NSMutableSet *lines = [breakpoints valueForKey:[bp file]];
55 if (lines == nil)
56 {
57 lines = [NSMutableSet setWithObject:bp];
58 [breakpoints setValue:lines forKey:[bp file]];
59 }
60 else
61 {
62 [lines addObject:bp];
63 }
64 }
65
66 /**
67 * Removes a breakpoint at a given line/file combination, or nil if nothing was removed
68 */
69 - (Breakpoint *)removeBreakpointAt:(int)line inFile:(NSString *)file
70 {
71 NSMutableSet *lines = [breakpoints valueForKey:file];
72 for (Breakpoint *b in lines)
73 {
74 if ([b line] == line)
75 {
76 [lines removeObject:b];
77 return b;
78 }
79 }
80 return nil;
81 }
82
83 /**
84 * Returns all the breakpoints for a given file
85 */
86 - (NSSet *)breakpointsForFile:(NSString *)file
87 {
88 return [breakpoints valueForKey:file];
89 }
90
91 /**
92 * Checks to see if a given file has a breakpoint on a given line
93 */
94 - (BOOL)hasBreakpointAt:(int)line inFile:(NSString *)file
95 {
96 NSSet *lines = [breakpoints valueForKey:file];
97 if (!lines)
98 {
99 return NO;
100 }
101 for (Breakpoint *b in lines)
102 {
103 if ([b line] == line)
104 {
105 return YES;
106 }
107 }
108 return NO;
109 }
110
111 @end