DDRange.m.svn-base
上传用户:kc0325
上传日期:2020-06-20
资源大小:204k
文件大小:2k
源码类别:

iPhone

开发平台:

Objective-C

  1. #import "DDRange.h"
  2. #import "DDNumber.h"
  3. DDRange DDUnionRange(DDRange range1, DDRange range2)
  4. {
  5. DDRange result;
  6. result.location = MIN(range1.location, range2.location);
  7. result.length   = MAX(DDMaxRange(range1), DDMaxRange(range2)) - result.location;
  8. return result;
  9. }
  10. DDRange DDIntersectionRange(DDRange range1, DDRange range2)
  11. {
  12. DDRange result;
  13. if((DDMaxRange(range1) < range2.location) || (DDMaxRange(range2) < range1.location))
  14. {
  15. return DDMakeRange(0, 0);
  16. }
  17. result.location = MAX(range1.location, range2.location);
  18. result.length   = MIN(DDMaxRange(range1), DDMaxRange(range2)) - result.location;
  19. return result;
  20. }
  21. NSString *DDStringFromRange(DDRange range)
  22. {
  23. return [NSString stringWithFormat:@"{%qu, %qu}", range.location, range.length];
  24. }
  25. DDRange DDRangeFromString(NSString *aString)
  26. {
  27. DDRange result = DDMakeRange(0, 0);
  28. // NSRange will ignore '-' characters, but not '+' characters
  29. NSCharacterSet *cset = [NSCharacterSet characterSetWithCharactersInString:@"+0123456789"];
  30. NSScanner *scanner = [NSScanner scannerWithString:aString];
  31. [scanner setCharactersToBeSkipped:[cset invertedSet]];
  32. NSString *str1 = nil;
  33. NSString *str2 = nil;
  34. BOOL found1 = [scanner scanCharactersFromSet:cset intoString:&str1];
  35. BOOL found2 = [scanner scanCharactersFromSet:cset intoString:&str2];
  36. if(found1) [NSNumber parseString:str1 intoUInt64:&result.location];
  37. if(found2) [NSNumber parseString:str2 intoUInt64:&result.length];
  38. return result;
  39. }
  40. @implementation NSValue (NSValueDDRangeExtensions)
  41. + (NSValue *)valueWithDDRange:(DDRange)range
  42. {
  43. return [NSValue valueWithBytes:&range objCType:@encode(DDRange)];
  44. }
  45. - (DDRange)ddrangeValue
  46. {
  47. DDRange result;
  48. [self getValue:&result];
  49. return result;
  50. }
  51. @end