4 #import "keychain/ot/OctagonFlags.h"
6 @interface OctagonFlags ()
7 @property dispatch_queue_t queue;
8 @property NSMutableSet<OctagonFlag*>* flags;
11 @implementation OctagonFlags
13 - (instancetype)initWithQueue:(dispatch_queue_t)queue
15 if((self = [super init])) {
17 _flags = [NSMutableSet set];
22 - (NSString*)description
24 return [NSString stringWithFormat:@"<OctagonFlags: %@>", [self contentsAsString]];
27 - (NSString*)contentsAsString
29 if(self.flags.count == 0) {
32 return [[self.flags allObjects] componentsJoinedByString:@","];
35 - (NSArray<NSString*>*)dumpFlags
37 return [self.flags allObjects];
40 - (BOOL)_onqueueContains:(nonnull OctagonFlag *)flag {
41 dispatch_assert_queue(self.queue);
42 return [self.flags containsObject:flag];
45 - (void)_onqueueSetFlag:(nonnull OctagonFlag *)flag {
46 dispatch_assert_queue(self.queue);
47 [self.flags addObject:flag];
50 - (void)setFlag:(nonnull OctagonFlag *)flag {
51 dispatch_sync(self.queue, ^{
52 [self _onqueueSetFlag:flag];
56 - (void)_onqueueRemoveFlag:(nonnull OctagonFlag *)flag {
57 dispatch_assert_queue(self.queue);
58 [self.flags removeObject:flag];