/ NSCharacterSet.m
NSCharacterSet.m
  1  //
  2  //  NSCharacterSet.m
  3  //  CoreFoundation
  4  //
  5  //  Copyright (c) 2014 Apportable. All rights reserved.
  6  //
  7  
  8  #import <Foundation/NSCharacterSet.h>
  9  #import "NSCFType.h"
 10  #import "CFInternal.h"
 11  #import "NSObjectInternal.h"
 12  
 13  extern Boolean __CFCharacterSetIsMutable(CFCharacterSetRef cset);
 14  extern void CFCharacterSetFast(CFMutableCharacterSetRef theSet);
 15  extern void CFCharacterSetCompact(CFMutableCharacterSetRef theSet);
 16  
 17  CF_PRIVATE
 18  @interface __NSCFCharacterSet : __NSCFType
 19  @end
 20  
 21  @implementation NSCharacterSet
 22  
 23  + (id)controlCharacterSet
 24  {
 25      return (id)CFCharacterSetGetPredefined(kCFCharacterSetControl);
 26  }
 27  
 28  + (id)whitespaceCharacterSet
 29  {
 30      return (id)CFCharacterSetGetPredefined(kCFCharacterSetWhitespace);
 31  }
 32  
 33  + (id)whitespaceAndNewlineCharacterSet
 34  {
 35      return (id)CFCharacterSetGetPredefined(kCFCharacterSetWhitespaceAndNewline);
 36  }
 37  
 38  + (id)decimalDigitCharacterSet
 39  {
 40      return (id)CFCharacterSetGetPredefined(kCFCharacterSetDecimalDigit);
 41  }
 42  
 43  + (id)letterCharacterSet
 44  {
 45      return (id)CFCharacterSetGetPredefined(kCFCharacterSetLetter);
 46  }
 47  
 48  + (id)lowercaseLetterCharacterSet
 49  {
 50      return (id)CFCharacterSetGetPredefined(kCFCharacterSetLowercaseLetter);
 51  }
 52  
 53  + (id)uppercaseLetterCharacterSet
 54  {
 55      return (id)CFCharacterSetGetPredefined(kCFCharacterSetUppercaseLetter);
 56  }
 57  
 58  + (id)nonBaseCharacterSet
 59  {
 60      return (id)CFCharacterSetGetPredefined(kCFCharacterSetNonBase);
 61  }
 62  
 63  + (id)alphanumericCharacterSet
 64  {
 65      return (id)CFCharacterSetGetPredefined(kCFCharacterSetAlphaNumeric);
 66  }
 67  
 68  + (id)decomposableCharacterSet
 69  {
 70      return (id)CFCharacterSetGetPredefined(kCFCharacterSetDecomposable);
 71  }
 72  
 73  + (id)illegalCharacterSet
 74  {
 75      return (id)CFCharacterSetGetPredefined(kCFCharacterSetIllegal);
 76  }
 77  
 78  + (id)punctuationCharacterSet
 79  {
 80      return (id)CFCharacterSetGetPredefined(kCFCharacterSetPunctuation);
 81  }
 82  
 83  + (id)capitalizedLetterCharacterSet
 84  {
 85      return (id)CFCharacterSetGetPredefined(kCFCharacterSetCapitalizedLetter);
 86  }
 87  
 88  + (id)symbolCharacterSet
 89  {
 90      return (id)CFCharacterSetGetPredefined(kCFCharacterSetSymbol);
 91  }
 92  
 93  + (id)newlineCharacterSet
 94  {
 95      return (id)CFCharacterSetGetPredefined(kCFCharacterSetNewline);
 96  }
 97  
 98  + (id)characterSetWithRange:(NSRange)range
 99  {
100      return [(NSCharacterSet *)CFCharacterSetCreateWithCharactersInRange(kCFAllocatorDefault, CFRangeMake(range.location, range.length)) autorelease];
101  }
102  
103  + (id)characterSetWithCharactersInString:(NSString *)string
104  {
105      return [(NSCharacterSet *)CFCharacterSetCreateWithCharactersInString(kCFAllocatorDefault, (CFStringRef)string) autorelease];
106  }
107  
108  + (id)characterSetWithBitmapRepresentation:(NSData *)data
109  {
110      return [(NSCharacterSet *)CFCharacterSetCreateWithBitmapRepresentation(kCFAllocatorDefault, (CFDataRef)data) autorelease];
111  }
112  
113  + (id)characterSetWithContentsOfFile:(NSString *)path
114  {
115      return [self characterSetWithBitmapRepresentation:[NSData dataWithContentsOfMappedFile:path]];
116  }
117  
118  - (id)init
119  {
120      [self release];
121      return (id)CFCharacterSetCreateWithCharactersInRange(kCFAllocatorDefault, CFRangeMake(0, 0));
122  }
123  
124  - (BOOL)characterIsMember:(unichar)character
125  {
126      NSRequestConcreteImplementation();
127      return NO;
128  }
129  
130  - (NSData *)bitmapRepresentation
131  {
132      NSRequestConcreteImplementation();
133      return nil;
134  }
135  
136  - (NSCharacterSet *)invertedSet
137  {
138      NSRequestConcreteImplementation();
139      return nil;
140  }
141  
142  - (BOOL)longCharacterIsMember:(UTF32Char)character
143  {
144      NSRequestConcreteImplementation();
145      return NO;
146  }
147  
148  - (BOOL)isSupersetOfSet:(NSCharacterSet *)other
149  {
150      NSRequestConcreteImplementation();
151      return NO;
152  }
153  
154  - (BOOL)hasMemberInPlane:(uint8_t)plane
155  {
156      NSRequestConcreteImplementation();
157      return NO;
158  }
159  
160  - (id)initWithCoder:(NSCoder *)aDecoder
161  {
162      NSRequestConcreteImplementation();
163      [self release];
164      return nil;
165  }
166  
167  - (void)encodeWithCoder:(NSCoder *)aCoder
168  {
169      NSRequestConcreteImplementation();
170  }
171  
172  - (id)copyWithZone:(NSZone *)zone
173  {
174      NSRequestConcreteImplementation();
175      return nil;
176  }
177  
178  - (id)mutableCopyWithZone:(NSZone *)zone
179  {
180      NSRequestConcreteImplementation();
181      return nil;
182  }
183  
184  - (CFTypeID)_cfTypeID
185  {
186      return CFCharacterSetGetTypeID();
187  }
188  
189  - (void)makeImmutable
190  {
191  
192  }
193  
194  - (BOOL)isMutable
195  {
196      return NO;
197  }
198  
199  - (CFCharacterSetRef)_expandedCFCharacterSet
200  {
201      return NULL;
202  }
203  
204  @end
205  
206  @implementation NSMutableCharacterSet
207  
208  + (id)characterSetWithContentsOfFile:(NSString *)path
209  {
210      return [[[NSCharacterSet characterSetWithContentsOfFile:path] mutableCopyWithZone:nil] autorelease];
211  }
212  
213  + (id)characterSetWithBitmapRepresentation:(NSData *)data
214  {
215      return [[[NSCharacterSet characterSetWithBitmapRepresentation:data] mutableCopyWithZone:nil] autorelease];
216  }
217  
218  + (id)newlineCharacterSet
219  {
220      return [[[NSCharacterSet newlineCharacterSet] mutableCopyWithZone:nil] autorelease];
221  }
222  
223  + (id)symbolCharacterSet
224  {
225      return [[[NSCharacterSet symbolCharacterSet] mutableCopyWithZone:nil] autorelease];
226  }
227  
228  + (id)capitalizedLetterCharacterSet
229  {
230      return [[[NSCharacterSet capitalizedLetterCharacterSet] mutableCopyWithZone:nil] autorelease];
231  }
232  
233  + (id)punctuationCharacterSet
234  {
235      return [[[NSCharacterSet punctuationCharacterSet] mutableCopyWithZone:nil] autorelease];
236  }
237  
238  + (id)illegalCharacterSet
239  {
240      return [[[NSCharacterSet illegalCharacterSet] mutableCopyWithZone:nil] autorelease];
241  }
242  
243  + (id)decomposableCharacterSet
244  {
245      return [[[NSCharacterSet decomposableCharacterSet] mutableCopyWithZone:nil] autorelease];
246  }
247  
248  + (id)alphanumericCharacterSet
249  {
250      return [[[NSCharacterSet alphanumericCharacterSet] mutableCopyWithZone:nil] autorelease];
251  }
252  
253  + (id)nonBaseCharacterSet
254  {
255      return [[[NSCharacterSet nonBaseCharacterSet] mutableCopyWithZone:nil] autorelease];
256  }
257  
258  + (id)uppercaseLetterCharacterSet
259  {
260      return [[[NSCharacterSet uppercaseLetterCharacterSet] mutableCopyWithZone:nil] autorelease];
261  }
262  
263  + (id)lowercaseLetterCharacterSet
264  {
265      return [[[NSCharacterSet lowercaseLetterCharacterSet] mutableCopyWithZone:nil] autorelease];
266  }
267  
268  + (id)letterCharacterSet
269  {
270      return [[[NSCharacterSet letterCharacterSet] mutableCopyWithZone:nil] autorelease];
271  }
272  
273  + (id)decimalDigitCharacterSet
274  {
275      return [[[NSCharacterSet decimalDigitCharacterSet] mutableCopyWithZone:nil] autorelease];
276  }
277  
278  + (id)whitespaceAndNewlineCharacterSet
279  {
280      return [[[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopyWithZone:nil] autorelease];
281  }
282  
283  + (id)whitespaceCharacterSet
284  {
285      return [[[NSCharacterSet whitespaceCharacterSet] mutableCopyWithZone:nil] autorelease];
286  }
287  
288  + (id)controlCharacterSet
289  {
290      return [[[NSCharacterSet controlCharacterSet] mutableCopyWithZone:nil] autorelease];
291  }
292  
293  + (id)characterSetWithCharactersInString:(NSString *)string
294  {
295      return [[[NSCharacterSet characterSetWithCharactersInString:string] mutableCopyWithZone:nil] autorelease];
296  }
297  
298  + (id)characterSetWithRange:(NSRange)range
299  {
300      return [[[NSCharacterSet characterSetWithRange:range] mutableCopyWithZone:nil] autorelease];
301  }
302  
303  - (void)addCharactersInRange:(NSRange)range
304  {
305      NSRequestConcreteImplementation();
306  }
307  
308  - (void)removeCharactersInRange:(NSRange)range
309  {
310      NSRequestConcreteImplementation();
311  }
312  
313  - (void)addCharactersInString:(NSString *)string
314  {
315      NSRequestConcreteImplementation();
316  }
317  
318  - (void)removeCharactersInString:(NSString *)string
319  {
320      NSRequestConcreteImplementation();
321  }
322  
323  - (void)formUnionWithCharacterSet:(NSCharacterSet *)other
324  {
325      NSRequestConcreteImplementation();
326  }
327  
328  - (void)formIntersectionWithCharacterSet:(NSCharacterSet *)other
329  {
330      NSRequestConcreteImplementation();
331  }
332  
333  - (void)invert
334  {
335      NSRequestConcreteImplementation();
336  }
337  
338  - (BOOL)isMutable
339  {
340      return YES;
341  }
342  
343  @end
344  
345  @implementation __NSCFCharacterSet
346  
347  + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
348  {
349      return NO;
350  }
351  
352  - (void)encodeWithCoder:(NSCoder *)coder
353  {
354      
355  }
356  
357  - (Class)classForCoder
358  {
359      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
360      {
361          return [NSMutableCharacterSet class];
362      }
363      else
364      {
365          return [NSCharacterSet class];
366      }
367  }
368  
369  - (Class)classForKeyedArchiver
370  {
371      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
372      {
373          return [NSMutableCharacterSet class];
374      }
375      else
376      {
377          return [NSCharacterSet class];
378      }
379  }
380  
381  - (void)makeCharacterSetFast
382  {
383      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
384      {
385          CFCharacterSetFast((CFMutableCharacterSetRef)self);
386      }
387  }
388  
389  - (void)makeCharacterSetCompact
390  {
391      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
392      {
393          CFCharacterSetCompact((CFMutableCharacterSetRef)self);
394      }
395  }
396  
397  - (void)invert
398  {
399      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
400      {
401          CFCharacterSetInvert((CFMutableCharacterSetRef)self);
402      }
403  }
404  
405  - (void)formIntersectionWithCharacterSet:(NSCharacterSet *)other
406  {
407      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
408      {
409          CFCharacterSetIntersect((CFMutableCharacterSetRef)self, (CFCharacterSetRef)other);
410      }
411  }
412  
413  - (void)formUnionWithCharacterSet:(NSCharacterSet *)other
414  {
415      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
416      {
417          CFCharacterSetUnion((CFMutableCharacterSetRef)self, (CFCharacterSetRef)other);
418      }
419  }
420  
421  - (void)removeCharactersInString:(NSString *)string
422  {
423      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
424      {
425          CFCharacterSetRemoveCharactersInString((CFMutableCharacterSetRef)self, (CFStringRef)string);
426      }
427  }
428  
429  - (void)addCharactersInString:(NSString *)string
430  {
431      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
432      {
433          CFCharacterSetAddCharactersInString((CFMutableCharacterSetRef)self, (CFStringRef)string);
434      }
435  }
436  
437  - (void)removeCharactersInRange:(NSRange)range
438  {
439      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
440      {
441          CFCharacterSetRemoveCharactersInRange((CFMutableCharacterSetRef)self, CFRangeMake(range.location, range.length));
442      }
443  }
444  
445  - (void)addCharactersInRange:(NSRange)range
446  {
447      if (__CFCharacterSetIsMutable((CFCharacterSetRef)self))
448      {
449          CFCharacterSetAddCharactersInRange((CFMutableCharacterSetRef)self, CFRangeMake(range.location, range.length));
450      }
451  }
452  
453  - (NSCharacterSet *)invertedSet
454  {
455      return [(NSCharacterSet *)CFCharacterSetCreateInvertedSet(kCFAllocatorDefault, (CFCharacterSetRef)self) autorelease];
456  }
457  
458  - (NSData *)bitmapRepresentation
459  {
460      return [(NSData *)CFCharacterSetCreateBitmapRepresentation(kCFAllocatorDefault, (CFCharacterSetRef)self) autorelease];
461  }
462  
463  - (BOOL)hasMemberInPlane:(uint8_t)plane
464  {
465      return CFCharacterSetHasMemberInPlane((CFCharacterSetRef)self, plane);
466  }
467  
468  - (BOOL)isSupersetOfSet:(id)other
469  {
470      return CFCharacterSetIsSupersetOfSet((CFCharacterSetRef)self, (CFCharacterSetRef)other);
471  }
472  
473  - (BOOL)longCharacterIsMember:(UTF32Char)character
474  {
475      return CFCharacterSetIsLongCharacterMember((CFCharacterSetRef)self, character);
476  }
477  
478  - (BOOL)characterIsMember:(unichar)character
479  {
480      return CFCharacterSetIsCharacterMember((CFCharacterSetRef)self, character);
481  }
482  
483  - (id)mutableCopyWithZone:(NSZone *)zone
484  {
485      return (id)CFCharacterSetCreateMutableCopy(kCFAllocatorDefault, (CFCharacterSetRef)self);
486  }
487  
488  - (id)copyWithZone:(NSZone *)zone
489  {
490      return (id)CFCharacterSetCreateCopy(kCFAllocatorDefault, (CFCharacterSetRef)self);
491  }
492  
493  - (NSUInteger)retainCount
494  {
495      return CFGetRetainCount((CFTypeRef)self);
496  }
497  
498  - (BOOL)_isDeallocating
499  {
500      return _CFIsDeallocating((CFTypeRef)self);
501  }
502  
503  - (BOOL)_tryRetain
504  {
505      return _CFTryRetain((CFTypeRef)self) != NULL;
506  }
507  
508  - (oneway void)release
509  {
510      CFRelease((CFTypeRef)self);
511  }
512  
513  - (id)retain
514  {
515      return (id)CFRetain((CFTypeRef)self);
516  }
517  
518  - (NSUInteger)hash
519  {
520      return CFHash((CFTypeRef)self);
521  }
522  
523  - (BOOL)isEqual:(id)other
524  {
525      if (other == nil)
526      {
527          return NO;
528      }
529      return CFEqual((CFTypeRef)self, (CFTypeRef)other);
530  }
531  
532  @end