This is NSConcreteNumber.m.sh in view mode; [Download] [Up]
#!/bin/sh
template ()
{
NAME=$1
C=$2
METHOD=$3
FORMAT=$4
GENERALITY=$5
cat <<EOF
/*
* DO NOT EDIT! GENERATED AUTOMATICALLY FROM NSConcreteNumber.m.sh.
* ${NAME} concrete number
*/
@implementation NS${NAME}Number
+ (id)allocWithZone:(NSZone*)zone
{
return NSAllocateObject (self, 0, zone);
}
- initValue:(const void*)value withObjCType:(const char*)type;
{
self = [super init];
data = *(${C}*)value;
return self;
}
- (BOOL)boolValue
{
return data;
}
- (char)charValue
{
return data;
}
- (unsigned char)unsignedCharValue
{
return data;
}
- (short)shortValue
{
return data;
}
- (unsigned short)unsignedShortValue
{
return data;
}
- (int)intValue
{
return data;
}
- (unsigned int)unsignedIntValue
{
return data;
}
- (long)longValue
{
return data;
}
- (unsigned long)unsignedLongValue
{
return data;
}
- (long long)longLongValue
{
return data;
}
- (unsigned long long)unsignedLongLongValue
{
return data;
}
- (float)floatValue
{
return data;
}
- (double)doubleValue
{
return data;
}
- (NSString*)descriptionWithLocale:(NSDictionary*)locale
{
return [NSString stringWithFormat:@${FORMAT}, data];
}
- (int)generality
{
return ${GENERALITY};
}
- (NSComparisonResult)compare:(NSNumber*)otherNumber
{
if([self generality] >= [otherNumber generality]) {
${C} other_data = [otherNumber ${METHOD}Value];
if (data == other_data)
return NSOrderedSame;
else
return (data < other_data) ?
NSOrderedAscending
: NSOrderedDescending;
}
else
return [otherNumber compare:self];
}
// Override these from NSValue
- (void)getValue:(void*)value
{
if (!value)
THROW([[InvalidArgumentException new]
setReason:@"NULL buffer in -getValue"]);
else
*(${C}*)value = data;
}
- (const char*)objCType
{
return @encode(${C});
}
// NSCopying
- (id)copyWithZone:(NSZone*)zone
{
if ([self zone] == zone)
return [self retain];
else
return [[[NS${NAME}Number class] alloc]
initValue:&data withObjCType:@encode(${C})];
}
// NSCoding
- (Class)classForCoder
{
return isa;
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeValueOfObjCType:@encode(${C}) at:&data];
}
- (id)initWithCoder:(NSCoder*)coder
{
[coder decodeValueOfObjCType:@encode(${C}) at:&data];
return self;
}
@end /* NS${NAME}Number */
EOF
}
#
# Generate common part
#
cat <<EOF
/*
* Author: mircea
*/
#include <Foundation/NSString.h>
#include <Foundation/NSException.h>
#include <Foundation/exceptions/GeneralExceptions.h>
#include <Foundation/NSCoder.h>
#include "NSConcreteNumber.h"
EOF
template Bool "BOOL" bool '"%d"' 1
template Char "char" char '"%d"' 2
template UChar "unsigned char" unsignedChar '"%d"' 3
template Short "short" short '"%hd"' 4
template UShort "unsigned short" unsignedShort '"%hu"' 5
template Int "int" int '"%d"' 6
template UInt "unsigned int" unsignedInt '"%u"' 7
template Long "long" long '"%ld"' 8
template ULong "unsigned long" unsignedLong '"%lu"' 9
template LongLong "long long" longLong '"%lld"' 10
template ULongLong "unsigned long long" unsignedLongLong '"%llu"' 11
template Float "float" float '"%0.7g"' 12
template Double "double" double '"%0.16g"' 13
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.