// // GONMarkup+Private.m // GONMarkupParserSample // // Created by Nicolas Goutaland on 25/06/14. // Copyright (c) 2014 Nicolas Goutaland. All rights reserved. // #import "GONMarkup+Private.h" @implementation GONMarkup (Private) #pragma mark - LIFO shared context management - (void)pushConfiguration:(id)configuration toContext:(NSMutableDictionary *)context forKey:(NSString *)key { // Retrieve FIFO NSMutableArray *configurationsLIFO = [context objectForKey:key]; if (!configurationsLIFO) { // Create FIFO configurationsLIFO = [[NSMutableArray alloc] init]; [context setObject:configurationsLIFO forKey:key]; } // Hold current configuration [configurationsLIFO addObject:configuration]; } - (id)currentContextConfiguration:(NSString *)key fromContext:(NSMutableDictionary *)context { return [[context objectForKey:key] lastObject]; } - (id)popContextConfiguration:(NSString *)key fromContext:(NSMutableDictionary *)context { // Retrieve LIFO NSMutableArray *configurationsLIFO = [context objectForKey:key]; // Retrieve current configuration id currentConfiguration = [configurationsLIFO lastObject]; // Remove last configuration [configurationsLIFO removeLastObject]; // Check if list is empty if (!configurationsLIFO.count) { // Remove empty list [context removeObjectForKey:key]; } return currentConfiguration; } @dynamic parser; @end