-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSBPriorityQueue.h
More file actions
82 lines (62 loc) · 2.92 KB
/
SBPriorityQueue.h
File metadata and controls
82 lines (62 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
Copyright (c) 2012 Steven Brokaw
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#import <Foundation/Foundation.h>
/** SBPriorityQueue is an Objective-C priority queue built using straight
C arrays and custom functions for heapify-ing the objects in the queue.
The store for the queue is a standard C array which is resized when enough
objects are added or removed.
Iterating through an SBPriorityQueue with fast enumeration (`for (id obj in q)` syntax)
returns the objects in heap order, not in sorted order.
*/
@interface SBPriorityQueue : NSObject <NSFastEnumeration>
/** @name Properties */
/** The number of objects in the queue */
@property (readonly) NSUInteger count;
/** @name Initializing a Queue */
/**
Initialize a new priority queue with a comparator. Depending on the comparator,
this will be a min priority queue or a max priority queue. All objects added to
the queue must support any operations you perform in the comparator. No run-time
checks are done.
For a minimum priority queue, your NSComparator should return NSOrderedAscending if
obj1 < obj2.
@param comparator An instance of NSComparator.
*/
- (id)initWithComparator:(NSComparator)comparator;
/** @name Accessing Queue Contents */
/*! Add an object to the queue. All objects must support whatever comparision operation you
give the initializer initWithComparator:.
@param object The object to add to the queue. Must be supported by the comparator.
*/
- (void)addObject:(id<NSObject>)object;
/** Returns the first object, or nil if the queue is empty.
The object is removed from the queue.
*/
- (id<NSObject>)popFirstObject;
/** Returns the object at the head of the queue, or nil if the queue is empty.
The object is left in the queue;
*/
- (id)firstObject;
/** Removes the first object in the queue. The queue must not be empty. If the queue is empty,
and exception is thrown.
*/
- (void)removeFirstObject;
/** Empty the queue */
- (void)removeAllObjects;
@end