TBToken.m 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // TBToken.m
  3. // TBTweakViewController
  4. //
  5. // Created by Tanner on 3/22/17.
  6. // Copyright © 2017 Tanner Bennett. All rights reserved.
  7. //
  8. #import "TBToken.h"
  9. @interface TBToken () {
  10. NSString *tb_description;
  11. }
  12. @end
  13. @implementation TBToken
  14. + (instancetype)string:(NSString *)string options:(TBWildcardOptions)options {
  15. TBToken *token = [self new];
  16. token->_string = string;
  17. token->_options = options;
  18. return token;
  19. }
  20. - (BOOL)isAbsolute {
  21. return _options == TBWildcardOptionsNone;
  22. }
  23. - (BOOL)isAny {
  24. return _options == TBWildcardOptionsAny;
  25. }
  26. - (NSString *)description {
  27. if (tb_description) {
  28. return tb_description;
  29. }
  30. switch (_options) {
  31. case TBWildcardOptionsNone:
  32. tb_description = _string;
  33. break;
  34. case TBWildcardOptionsAny:
  35. tb_description = @"*";
  36. break;
  37. default: {
  38. NSMutableString *desc = [NSMutableString string];
  39. if (_options & TBWildcardOptionsPrefix) {
  40. [desc appendString:@"*"];
  41. }
  42. [desc appendString:_string];
  43. if (_options & TBWildcardOptionsSuffix) {
  44. [desc appendString:@"*"];
  45. }
  46. tb_description = desc;
  47. }
  48. }
  49. return tb_description;
  50. }
  51. - (NSUInteger)hash {
  52. return self.description.hash;
  53. }
  54. - (BOOL)isEqual:(id)object {
  55. if ([object isKindOfClass:[TBToken class]]) {
  56. TBToken *token = object;
  57. return [_string isEqualToString:token->_string] && _options == token->_options;
  58. }
  59. return NO;
  60. }
  61. @end