TBToken.m 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // FLEXToken.m
  3. // FLEX
  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)any {
  15. static TBToken *any = nil;
  16. static dispatch_once_t onceToken;
  17. dispatch_once(&onceToken, ^{
  18. any = [self string:@"" options:TBWildcardOptionsAny];
  19. });
  20. return any;
  21. }
  22. + (instancetype)string:(NSString *)string options:(TBWildcardOptions)options {
  23. TBToken *token = [self new];
  24. token->_string = string;
  25. token->_options = options;
  26. return token;
  27. }
  28. - (BOOL)isAbsolute {
  29. return _options == TBWildcardOptionsNone;
  30. }
  31. - (BOOL)isAny {
  32. return _options == TBWildcardOptionsAny;
  33. }
  34. - (NSString *)description {
  35. if (tb_description) {
  36. return tb_description;
  37. }
  38. switch (_options) {
  39. case TBWildcardOptionsNone:
  40. tb_description = _string;
  41. break;
  42. case TBWildcardOptionsAny:
  43. tb_description = @"*";
  44. break;
  45. default: {
  46. NSMutableString *desc = [NSMutableString string];
  47. if (_options & TBWildcardOptionsPrefix) {
  48. [desc appendString:@"*"];
  49. }
  50. [desc appendString:_string];
  51. if (_options & TBWildcardOptionsSuffix) {
  52. [desc appendString:@"*"];
  53. }
  54. tb_description = desc;
  55. }
  56. }
  57. return tb_description;
  58. }
  59. - (NSUInteger)hash {
  60. return self.description.hash;
  61. }
  62. - (BOOL)isEqual:(id)object {
  63. if ([object isKindOfClass:[TBToken class]]) {
  64. TBToken *token = object;
  65. return [_string isEqualToString:token->_string] && _options == token->_options;
  66. }
  67. return NO;
  68. }
  69. @end