mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 08:21:25 +00:00
Implement NSDate as a small object (tagged pointer) - clang/libobjc2 only (#451)
* Implement GSSmallObject Class * Remove private concrete class access * Change secondary bias * NSDate: Get interval from rhs object in comparison * Add prefix to CONCRETE_CLASS_NAME macro
This commit is contained in:
parent
0ad7e3f8ef
commit
01b719f2af
6 changed files with 710 additions and 315 deletions
|
@ -58,9 +58,6 @@
|
|||
@class GSAbsTimeZone;
|
||||
@interface GSAbsTimeZone : NSObject // Help the compiler
|
||||
@end
|
||||
@class NSGDate;
|
||||
@interface NSGDate : NSObject // Help the compiler
|
||||
@end
|
||||
|
||||
|
||||
#define DISTANT_FUTURE 63113990400.0
|
||||
|
@ -396,7 +393,6 @@ GSPrivateTimeNow(void)
|
|||
absAbrIMP = (NSString* (*)(id,SEL,id))
|
||||
[absClass instanceMethodForSelector: abrSEL];
|
||||
|
||||
GSObjCAddClassBehavior(self, [NSGDate class]);
|
||||
[pool release];
|
||||
}
|
||||
}
|
||||
|
@ -463,6 +459,11 @@ GSPrivateTimeNow(void)
|
|||
return AUTORELEASE(d);
|
||||
}
|
||||
|
||||
- (NSTimeInterval) timeIntervalSinceReferenceDate
|
||||
{
|
||||
return _seconds_since_ref;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and returns a new NSCalendarDate object by taking the
|
||||
* value of the receiver and adding the interval in seconds specified.
|
||||
|
|
948
Source/NSDate.m
948
Source/NSDate.m
File diff suppressed because it is too large
Load diff
41
Source/NSDatePrivate.h
Normal file
41
Source/NSDatePrivate.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/** NSDate Private Interface
|
||||
Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
|
||||
Written by: Hugo Melder <hugo@algoriddim.com>
|
||||
|
||||
This file is part of the GNUstep Base Library.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110 USA.
|
||||
*/
|
||||
|
||||
#import <Foundation/NSDate.h>
|
||||
|
||||
#if defined(OBJC_SMALL_OBJECT_SHIFT) && (OBJC_SMALL_OBJECT_SHIFT == 3)
|
||||
#define USE_SMALL_DATE 1
|
||||
#define DATE_CONCRETE_CLASS_NAME GSSmallDate
|
||||
#else
|
||||
#define USE_SMALL_DATE 0
|
||||
#define DATE_CONCRETE_CLASS_NAME NSGDate
|
||||
#endif
|
||||
|
||||
@interface DATE_CONCRETE_CLASS_NAME : NSDate
|
||||
#if USE_SMALL_DATE == 0
|
||||
{
|
||||
@public
|
||||
NSTimeInterval _seconds_since_ref;
|
||||
}
|
||||
#endif
|
||||
@end
|
|
@ -35,9 +35,8 @@
|
|||
#import "Foundation/NSRunLoop.h"
|
||||
#import "Foundation/NSInvocation.h"
|
||||
|
||||
@class NSGDate;
|
||||
@interface NSGDate : NSObject // Help the compiler
|
||||
@end
|
||||
#import "NSDatePrivate.h"
|
||||
|
||||
static Class NSDate_class;
|
||||
|
||||
/**
|
||||
|
@ -58,7 +57,7 @@ static Class NSDate_class;
|
|||
{
|
||||
if (self == [NSTimer class])
|
||||
{
|
||||
NSDate_class = [NSGDate class];
|
||||
NSDate_class = [DATE_CONCRETE_CLASS_NAME class];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue