// // MPMathRules.m // MathPad // // Created by Kim Wittenburg on 14.09.14. // Copyright (c) 2014 Kim Wittenburg. All rights reserved. // #import "MPMathRules.h" NSString *MPMathRulesAllowsImplicitMultiplicationKey = @"MPMathRulesAllowsImplicitMultiplicationKey"; NSString *MPMathRulesMaximumOperatorChainLengthKey = @"MPMathRulesMaximumOperatorChainLengthKey"; NSString *MPMathRulesMaximumOperatorChainLengthInMultiplicationKey = @"MPMathRulesMaximumOperatorChainLengthInMultiplicationKey"; NSString *MPMathRulesMaximumOperatorChainLengthInFunctionKey = @"MPMathRulesMaximumOperatorChainLengthInFunctionKey"; @implementation MPMathRules static MPMathRules *sharedRules; + (MPMathRules *)sharedRules { if (!sharedRules) { sharedRules = [[MPMathRules alloc] init]; } return sharedRules; } - (instancetype)init { if (sharedRules) { return sharedRules; } self = [super init]; if (self) { _usingUserDefaultValues = YES; NSNumber *userDefaultsAllowImplicitMultiplication = [[NSUserDefaults standardUserDefaults] objectForKey:MPMathRulesAllowsImplicitMultiplicationKey]; NSNumber *userDefaultsMaximumOperatorChainLength = [[NSUserDefaults standardUserDefaults] objectForKey:MPMathRulesMaximumOperatorChainLengthKey]; NSNumber *userDefaultsMaximumOperatorChainLengthInMultiplication = [[NSUserDefaults standardUserDefaults] objectForKey:MPMathRulesMaximumOperatorChainLengthInMultiplicationKey]; NSNumber *userDefaultsMaximumOperatorChainLengthInFunction = [[NSUserDefaults standardUserDefaults] objectForKey:MPMathRulesMaximumOperatorChainLengthInFunctionKey]; _allowsImplicitMultiplication = userDefaultsAllowImplicitMultiplication != nil ? userDefaultsAllowImplicitMultiplication.boolValue : NO; _maximumOperatorChainLength = userDefaultsMaximumOperatorChainLength != nil ? userDefaultsMaximumOperatorChainLength.unsignedIntegerValue : 2; _maximumOperatorChainLengthInMultiplication = userDefaultsMaximumOperatorChainLengthInMultiplication != nil ? userDefaultsMaximumOperatorChainLengthInMultiplication.unsignedIntegerValue : 1; _maximumOperatorChainLengthInFunction = userDefaultsMaximumOperatorChainLengthInFunction != nil ? userDefaultsMaximumOperatorChainLengthInFunction.unsignedIntegerValue : 1; } return self; } - (void)setUsingUserDefaultValues:(BOOL)usingUserDefaultValues { _usingUserDefaultValues = usingUserDefaultValues; // Save the current values self.allowsImplicitMultiplication = self.allowsImplicitMultiplication; self.maximumOperatorChainLength = self.maximumOperatorChainLength; self.maximumOperatorChainLengthInMultiplication = self.maximumOperatorChainLengthInMultiplication; self.maximumOperatorChainLengthInFunction = self.maximumOperatorChainLengthInFunction; } - (void)setAllowsImplicitMultiplication:(BOOL)allowsImplicitMultiplication { _allowsImplicitMultiplication = allowsImplicitMultiplication; if (self.isUsingUserDefaultValues) { [[NSUserDefaults standardUserDefaults] setBool:allowsImplicitMultiplication forKey:MPMathRulesAllowsImplicitMultiplicationKey]; } } - (void)setMaximumOperatorChainLength:(NSUInteger)maximumOperatorChainLength { _maximumOperatorChainLength = maximumOperatorChainLength; if (self.isUsingUserDefaultValues) { [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:maximumOperatorChainLength] forKey:MPMathRulesMaximumOperatorChainLengthKey]; } } - (void)setMaximumOperatorChainLengthInMultiplication:(NSUInteger)maximumOperatorChainLengthInMultiplication { _maximumOperatorChainLengthInMultiplication = maximumOperatorChainLengthInMultiplication; if (self.isUsingUserDefaultValues) { [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:maximumOperatorChainLengthInMultiplication] forKey:MPMathRulesMaximumOperatorChainLengthInMultiplicationKey]; } } - (void)setMaximumOperatorChainLengthInFunction:(NSUInteger)maximumOperatorChainLengthInFunction { _maximumOperatorChainLengthInFunction = maximumOperatorChainLengthInFunction; if (self.isUsingUserDefaultValues) { [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:maximumOperatorChainLengthInFunction] forKey:MPMathRulesMaximumOperatorChainLengthInFunctionKey]; } } @end