]> git.saurik.com Git - apple/security.git/blob - keychain/ot/OctagonFlags.m
Security-59306.11.20.tar.gz
[apple/security.git] / keychain / ot / OctagonFlags.m
1
2 #if OCTAGON
3
4 #import "keychain/ot/OctagonFlags.h"
5
6 @interface OctagonFlags ()
7 @property dispatch_queue_t queue;
8 @property NSMutableSet<OctagonFlag*>* flags;
9 @end
10
11 @implementation OctagonFlags
12
13 - (instancetype)initWithQueue:(dispatch_queue_t)queue
14 {
15 if((self = [super init])) {
16 _queue = queue;
17 _flags = [NSMutableSet set];
18 }
19 return self;
20 }
21
22 - (NSString*)description
23 {
24 return [NSString stringWithFormat:@"<OctagonFlags: %@>", [self contentsAsString]];
25 }
26
27 - (NSString*)contentsAsString
28 {
29 if(self.flags.count == 0) {
30 return @"none";
31 }
32 return [[self.flags allObjects] componentsJoinedByString:@","];
33 }
34
35 - (NSArray<NSString*>*)dumpFlags
36 {
37 return [self.flags allObjects];
38 }
39
40 - (BOOL)_onqueueContains:(nonnull OctagonFlag *)flag {
41 dispatch_assert_queue(self.queue);
42 return [self.flags containsObject:flag];
43 }
44
45 - (void)_onqueueSetFlag:(nonnull OctagonFlag *)flag {
46 dispatch_assert_queue(self.queue);
47 [self.flags addObject:flag];
48 }
49
50 - (void)setFlag:(nonnull OctagonFlag *)flag {
51 dispatch_sync(self.queue, ^{
52 [self _onqueueSetFlag:flag];
53 });
54 }
55
56 - (void)_onqueueRemoveFlag:(nonnull OctagonFlag *)flag {
57 dispatch_assert_queue(self.queue);
58 [self.flags removeObject:flag];
59 }
60
61 @end
62
63 #endif