More tidying up for consistency with gui libs

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@8568 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2001-01-12 14:29:34 +00:00
parent 47218c499c
commit 559db76abd
9 changed files with 137 additions and 105 deletions

View file

@ -152,6 +152,7 @@ GSHTTPURLHandle.m \
GSMime.m \
GSSet.m \
GSString.m \
GSValue.m \
NSAttributedString.m \
NSArchiver.m \
NSArray.m \
@ -165,7 +166,6 @@ NSCharacterSet.m \
NSClassDescription.m \
NSCoder.m \
NSCopyObject.m \
NSConcreteValue.m \
NSCountedSet.m \
NSConnection.m \
NSData.m \
@ -244,8 +244,8 @@ BASE_MFILES += GSFFCallInvocation.m
endif
NSVALUE_MFILES = \
NSValue0.m NSValue1.m NSValue2.m NSValue3.m \
NSValue4.m
GSValue0.m GSValue1.m GSValue2.m GSValue3.m \
GSValue4.m GSValue5.m
NSNUMBER_MFILES = \
NSNumber0.m NSNumber1.m NSNumber2.m NSNumber3.m \
NSNumber4.m NSNumber5.m NSNumber6.m NSNumber7.m \
@ -254,7 +254,7 @@ NSNUMBER_MFILES = \
BASE_OTHER_SRCFILES = \
NSConcreteNumber.m \
NSCTemplateValue.m \
GSTemplateValue.m \
dld-load.h \
hpux-load.h \
null-load.h \
@ -278,7 +278,6 @@ NSCharacterSet.h \
NSClassDescription.h \
NSCoder.h \
NSConcreteNumber.h \
NSConcreteValue.h \
NSConnection.h \
NSData.h \
NSDate.h \

View file

@ -1,5 +1,5 @@
# line 1 "NSCTemplateValue.m" /* So gdb knows which file we are in */
/* NSCTemplateValue - Object encapsulation for C types.
# line 1 "GSTemplateValue.m" /* So gdb knows which file we are in */
/* GSTemplateValue - Object encapsulation for C types.
Copyright (C) 1993,1994 Free Software Foundation, Inc.
Written by: Adam Fedor <fedor@boulder.colorado.edu>
@ -23,38 +23,73 @@
*/
#include <config.h>
#include <Foundation/NSConcreteValue.h>
#include <Foundation/NSValue.h>
#include <Foundation/NSString.h>
#include <Foundation/NSException.h>
#include <Foundation/NSCoder.h>
#include <Foundation/NSObjCRuntime.h>
#include <base/preface.h>
/* This file should be run through a preprocessor with the macro TYPE_ORDER
defined to a number from 0 to 4 cooresponding to each value type */
#if TYPE_ORDER == 0
# define NSCTemplateValue NSNonretainedObjectValue
@interface GSNonretainedObjectValue : NSValue
{
id data;
}
@end
# define GSTemplateValue GSNonretainedObjectValue
# define TYPE_METHOD nonretainedObjectValue
# define TYPE_NAME id
#elif TYPE_ORDER == 1
# define NSCTemplateValue NSPointValue
@interface GSPointValue : NSValue
{
NSPoint data;
}
@end
# define GSTemplateValue GSPointValue
# define TYPE_METHOD pointValue
# define TYPE_NAME NSPoint
#elif TYPE_ORDER == 2
# define NSCTemplateValue NSPointerValue
@interface GSPointerValue : NSValue
{
void *data;
}
@end
# define GSTemplateValue GSPointerValue
# define TYPE_METHOD pointerValue
# define TYPE_NAME void *
#elif TYPE_ORDER == 3
# define NSCTemplateValue NSRectValue
# define GSTemplateValue GSRangeValue
@interface GSRangeValue : NSValue
{
NSRange data;
}
@end
# define TYPE_METHOD rangeValue
# define TYPE_NAME NSRange
#elif TYPE_ORDER == 4
@interface GSRectValue : NSValue
{
NSRect data;
}
@end
# define GSTemplateValue GSRectValue
# define TYPE_METHOD rectValue
# define TYPE_NAME NSRect
#elif TYPE_ORDER == 4
# define NSCTemplateValue NSSizeValue
#elif TYPE_ORDER == 5
@interface GSSizeValue : NSValue
{
NSSize data;
}
@end
# define GSTemplateValue GSSizeValue
# define TYPE_METHOD sizeValue
# define TYPE_NAME NSSize
#endif
@implementation NSCTemplateValue
@implementation GSTemplateValue
// Allocating and Initializing
@ -110,13 +145,19 @@
else
return NO;
#elif TYPE_ORDER == 3
if (data.location == val.location
&& data.length == val.length)
return YES;
else
return NO;
#elif TYPE_ORDER == 4
if (data.origin.x == val.origin.x && data.origin.y == val.origin.y
&& data.size.width == val.size.width
&& data.size.height == val.size.height)
return YES;
else
return NO;
#elif TYPE_ORDER == 4
#elif TYPE_ORDER == 5
if (data.width == val.width && data.height == val.height)
return YES;
else
@ -145,6 +186,8 @@
#elif TYPE_ORDER == 2
return (unsigned)(gsaddr)data;
#elif TYPE_ORDER == 3
return (data.length ^ data.location);
#elif TYPE_ORDER == 4
union {
double d;
unsigned char c[sizeof(double)];
@ -156,7 +199,7 @@
for (i = 0; i < sizeof(double); i++)
hash += val.c[i];
return hash;
#elif TYPE_ORDER == 4
#elif TYPE_ORDER == 5
union {
double d;
unsigned char c[sizeof(double)];
@ -191,8 +234,10 @@
#elif TYPE_ORDER == 2
return [NSString stringWithFormat: @"{pointer = %p;}", data];
#elif TYPE_ORDER == 3
return NSStringFromRect(data);
return NSStringFromRange(data);
#elif TYPE_ORDER == 4
return NSStringFromRect(data);
#elif TYPE_ORDER == 5
return NSStringFromSize(data);
#endif
}

View file

@ -1,4 +1,4 @@
/* NSConcreteValue - Object encapsulation for C types.
/* GSValue - Object encapsulation for C types.
Copyright (C) 1993,1994,1995,1999 Free Software Foundation, Inc.
Written by: Adam Fedor <fedor@boulder.colorado.edu>
@ -22,7 +22,7 @@
*/
#include <config.h>
#include <Foundation/NSConcreteValue.h>
#include <Foundation/NSValue.h>
#include <Foundation/NSString.h>
#include <Foundation/NSData.h>
#include <Foundation/NSException.h>
@ -31,11 +31,18 @@
#include <Foundation/NSObjCRuntime.h>
#include <base/preface.h>
@interface GSValue : NSValue
{
void *data;
char *objctype;
}
@end
/* This is the real, general purpose value object. I've implemented all the
methods here (like pointValue) even though most likely, other concrete
subclasses were created to handle these types */
@implementation NSConcreteValue
@implementation GSValue
// Allocating and Initializing
@ -108,13 +115,13 @@
return NO;
if (GSObjCClass(aValue) != GSObjCClass(self))
return NO;
if (strcmp(objctype, ((NSConcreteValue*)aValue)->objctype) != 0)
if (strcmp(objctype, ((GSValue*)aValue)->objctype) != 0)
return NO;
else
{
unsigned size = objc_sizeof_type(objctype);
if (memcmp(((NSConcreteValue*)aValue)->data, data, size) != 0)
if (memcmp(((GSValue*)aValue)->data, data, size) != 0)
return NO;
return YES;
}

View file

@ -108,7 +108,7 @@ after-uninstall::
# Things to do after distcleaning
after-distclean::
rm -f mframe/mframe.h Foundation \
NSNumber[0-9]*.m NSValue[0-9]*.m o_*_bas.m
NSNumber[0-9]*.m GSValue[0-9]*.m o_*_bas.m
rm -rf $(GNUSTEP_TARGET_DIR)/config.h
rm -rf $(GNUSTEP_TARGET_DIR)/mframe.h
rm -rf $(GNUSTEP_TARGET_DIR)/GSConfig.h
@ -121,10 +121,10 @@ after-distclean::
# after-check::
# Creation of NSValue and NSNumber concrete classes from templates
$(NSVALUE_MFILES) : NSCTemplateValue.m
$(NSVALUE_MFILES) : GSTemplateValue.m
rm -f $@
echo '#define TYPE_ORDER' `echo $@ | sed -e "s,[^0-9],,g"` >$@
cat $(srcdir)/NSCTemplateValue.m >> $@
cat $(srcdir)/GSTemplateValue.m >> $@
$(NSNUMBER_MFILES) : NSConcreteNumber.m
rm -f $@
echo '#define TYPE_ORDER' `echo $@ | sed -e "s,[^0-9],,g"` >$@

View file

@ -23,16 +23,25 @@
#include <config.h>
#include <base/preface.h>
#include <Foundation/NSConcreteValue.h>
#include <Foundation/NSValue.h>
#include <Foundation/NSCoder.h>
#include <Foundation/NSDictionary.h>
#include <Foundation/NSZone.h>
@class GSValue;
@class GSNonretainedObjectValue;
@class GSPointValue;
@class GSPointerValue;
@class GSRangeValue;
@class GSRectValue;
@class GSSizeValue;
static Class abstractClass;
static Class concreteClass;
static Class nonretainedObjectValueClass;
static Class pointValueClass;
static Class pointerValueClass;
static Class rangeValueClass;
static Class rectValueClass;
static Class sizeValueClass;
@ -44,12 +53,13 @@ static Class sizeValueClass;
if (self == [NSValue class])
{
abstractClass = self;
concreteClass = [NSConcreteValue class];
nonretainedObjectValueClass = [NSNonretainedObjectValue class];
pointValueClass = [NSPointValue class];
pointerValueClass = [NSPointerValue class];
rectValueClass = [NSRectValue class];
sizeValueClass = [NSSizeValue class];
concreteClass = [GSValue class];
nonretainedObjectValueClass = [GSNonretainedObjectValue class];
pointValueClass = [GSPointValue class];
pointerValueClass = [GSPointerValue class];
rangeValueClass = [GSRangeValue class];
rectValueClass = [GSRectValue class];
sizeValueClass = [GSSizeValue class];
}
}
@ -96,6 +106,8 @@ static Class sizeValueClass;
theClass = pointValueClass;
else if (strcmp(@encode(void *), type) == 0)
theClass = pointerValueClass;
else if (strcmp(@encode(NSRange), type) == 0)
theClass = rangeValueClass;
else if (strcmp(@encode(NSRect), type) == 0)
theClass = rectValueClass;
else if (strcmp(@encode(NSSize), type) == 0)
@ -132,7 +144,7 @@ static Class sizeValueClass;
{
NSValue *theObj;
theObj = [NSNonretainedObjectValue allocWithZone: NSDefaultMallocZone()];
theObj = [nonretainedObjectValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &anObject objCType: @encode(id)];
return AUTORELEASE(theObj);
}
@ -141,7 +153,7 @@ static Class sizeValueClass;
{
NSValue *theObj;
theObj = [NSPointValue allocWithZone: NSDefaultMallocZone()];
theObj = [pointValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &point objCType: @encode(NSPoint)];
return AUTORELEASE(theObj);
}
@ -150,16 +162,25 @@ static Class sizeValueClass;
{
NSValue *theObj;
theObj = [NSPointerValue allocWithZone: NSDefaultMallocZone()];
theObj = [pointerValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &pointer objCType: @encode(void*)];
return AUTORELEASE(theObj);
}
+ (NSValue*) valueWithRange: (NSRange)range
{
NSValue *theObj;
theObj = [rangeValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &range objCType: @encode(NSRange)];
return AUTORELEASE(theObj);
}
+ (NSValue*) valueWithRect: (NSRect)rect
{
NSValue *theObj;
theObj = [NSRectValue allocWithZone: NSDefaultMallocZone()];
theObj = [rectValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &rect objCType: @encode(NSRect)];
return AUTORELEASE(theObj);
}
@ -168,7 +189,7 @@ static Class sizeValueClass;
{
NSValue *theObj;
theObj = [NSSizeValue allocWithZone: NSDefaultMallocZone()];
theObj = [sizeValueClass allocWithZone: NSDefaultMallocZone()];
theObj = [theObj initWithBytes: &size objCType: @encode(NSSize)];
return AUTORELEASE(theObj);
}
@ -252,6 +273,12 @@ static Class sizeValueClass;
return 0;
}
- (NSRange) rangeValue
{
[self subclassResponsibility: _cmd];
return NSMakeRange(0,0);
}
- (NSRect) rectValue
{
[self subclassResponsibility: _cmd];