Move NSUnarchiver implementation here from NSUnarchiver.m. Use

subclassResponsibility where correct.
([NSArchiver +initialize]): Make NSGArchiver the concrete class.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@852 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Andrew McCallum 1996-01-26 19:53:15 +00:00
parent 23dc00a211
commit 0cb41ba628

View file

@ -43,8 +43,8 @@ static Class NSArchiver_concrete_class;
+ (void) initialize
{
/* xxx clean this up eventually */
NSArchiver_concrete_class = [Coder class];
if (self = [NSArchiver class])
NSArchiver_concrete_class = [NSGArchiver class];
}
@ -83,7 +83,7 @@ static Class NSArchiver_concrete_class;
- (unsigned int) versionForClassName: (NSString*)className;
{
[self notImplemented:_cmd];
[self subclassResponsibility:_cmd];
return 0;
}
@ -120,16 +120,119 @@ static Class NSArchiver_concrete_class;
[self subclassResponsibility:_cmd];
}
+ (NSString*) classNameDecodedForArchiveClassName: (NSString*) inArchiveName
@end
@implementation NSUnarchiver
static Class NSUnarchiver_concrete_class;
+ (void) _setConcreteClass: (Class)c
{
return [[self _concreteClass]
classNameDecodedForArchiveClassName: inArchiveName];
NSUnarchiver_concrete_class = c;
}
+ (void) decodeClassName: (NSString*) inArchiveName
asClassName:(NSString *)trueName
+ (Class) _concreteClass
{
[self notImplemented:_cmd];
return NSUnarchiver_concrete_class;
}
+ (void) initialize
{
NSUnarchiver_concrete_class = [NSGUnarchiver class];
}
// Initializing an unarchiver
- (id) initForReadingWithData: (NSData*)data
{
[self subclassResponsibility:_cmd];
return nil;
}
// Decoding objects
+ (id) unarchiveObjectWithData: (NSData*)data
{
return [[self _concreteClass] unarchiveObjectWithData: data];
}
+ (id) unarchiveObjectWithFile: (NSString*)path
{
return [[self _concreteClass] unarchiveObjectWithFile: path];
}
/* Managing */
- (BOOL) isAtEnd
{
[self subclassResponsibility:_cmd];
return NO;
}
- (NSZone*) objectZone
{
[self subclassResponsibility:_cmd];
return NULL;
}
- (void) setObjectZone: (NSZone*)zone
{
[self subclassResponsibility:_cmd];
}
- (unsigned int) systemVersion
{
[self subclassResponsibility:_cmd];
return 0;
}
/* Substituting Classes */
+ (NSString*) classNameDecodedForArchiveClassName: (NSString*)nameInArchive
{
return [[self _concreteClass]
classNameDecodedForArchiveClassName: nameInArchive];
}
+ (void) decodeClassName: (NSString*)nameInArchive
asClassName: (NSString*)trueName
{
return [[self _concreteClass]
decodeClassName: nameInArchive asClassName: trueName];
}
- (NSString*) classNameDecodedForArchiveClassName: (NSString*)nameInArchive
{
[self subclassResponsibility:_cmd];
return nil;
}
- (void) decodeClassName: (NSString*)nameInArchive
asClassName: (NSString*)trueName
{
[self subclassResponsibility:_cmd];
}
@end
/* Exceptions */
NSString *NSInconsistentArchiveException = @"NSInconsistentArchiveException";
/* NSObject extensions for archiving */
@implementation NSObject (NSArchiver)
- (Class) classForArchiver
{
return [self classForCoder];
}
- replacementObjectForArchiver: (NSArchiver*) archiver
{
return [self replacementObjectForCoder: archiver];
}
@end