LCOV - code coverage report
Current view: top level - Core - NSNumberOOExtensions.m (source / functions) Hit Total Coverage
Test: coverxygen.info Lines: 0 1 0.0 %
Date: 2025-05-28 07:50:54 Functions: 0 0 -

          Line data    Source code
       1           0 : /*
       2             : 
       3             : NSNumberOOExtensions.m
       4             : 
       5             : 
       6             : Copyright (C) 2009-2013 Jens Ayton
       7             : 
       8             : Permission is hereby granted, free of charge, to any person obtaining a copy
       9             : of this software and associated documentation files (the "Software"), to deal
      10             : in the Software without restriction, including without limitation the rights
      11             : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      12             : copies of the Software, and to permit persons to whom the Software is
      13             : furnished to do so, subject to the following conditions:
      14             : 
      15             : The above copyright notice and this permission notice shall be included in all
      16             : copies or substantial portions of the Software.
      17             : 
      18             : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      19             : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      20             : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      21             : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      22             : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      23             : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      24             : SOFTWARE.
      25             : 
      26             : */
      27             : 
      28             : #import "NSNumberOOExtensions.h"
      29             : #import "OOFunctionAttributes.h"
      30             : 
      31             : 
      32             : @implementation NSNumber (OOExtensions)
      33             : 
      34             : - (BOOL) oo_isFloatingPointNumber
      35             : {
      36             : #if __COREFOUNDATION_CFNUMBER__
      37             :         return CFNumberIsFloatType((CFNumberRef)self);
      38             : #else
      39             :         /*      This happily assumes the compiler will inline strcmp() where one
      40             :                 argument is a single-character constant string. Verified under
      41             :                 apple-gcc 4.0 (even with -O0).
      42             :         */
      43             :         const char *type = [self objCType];
      44             :         return (strcmp(type, @encode(double)) == 0 || strcmp(type, @encode(float)) == 0);
      45             : #endif
      46             : }
      47             : 
      48             : 
      49             : - (BOOL) oo_isBoolean
      50             : {
      51             :         /*      There's no explicit way to test this. However, on Mac OS X boolean
      52             :                 NSNumbers are required to be constant objects because they're toll-
      53             :                 free bridged with kCFBooleanTrue and kCFBooleanFalse, so comparison to
      54             :                 those values has to work.
      55             :                 
      56             :                 In GNUstep, constant objects are also used, because they're not about
      57             :                 to miss such an obvious optimization.
      58             :         */
      59             :         
      60             : #if __COREFOUNDATION_CFNUMBER__
      61             :         return self == (NSNumber *)kCFBooleanTrue || self == (NSNumber *)kCFBooleanFalse;
      62             : #else
      63             :         static NSNumber *sTrue = nil, *sFalse;
      64             :         if (EXPECT_NOT(sTrue == nil))
      65             :         {
      66             :                 sTrue = [[NSNumber numberWithBool:YES] retain];
      67             :                 sFalse = [[NSNumber numberWithBool:NO] retain];
      68             :         }
      69             :         return self == sTrue || self == sFalse;
      70             : #endif
      71             : }
      72             : 
      73             : @end

Generated by: LCOV version 1.14