From 8675874d91a3763b84288de47e4b7c799f71f3b4 Mon Sep 17 00:00:00 2001 From: mccallum Date: Thu, 25 Jan 1996 16:58:36 +0000 Subject: [PATCH] ([Coder -initForWritingToStream:withFormatVersion:cStreamClass: cStreamFormatVersion:]): New method. ([Coder -initForWritingToFile:withFormatVersion:cStreamClass: cStreamFormatVersion:]): New method. ([Coder -initForWritingToFile:filenamewithCStreamClass:cStreamClass]): New method. ([Coder +encodeRootObject:withName:nametoStream:]): New method. ([Coder +encodeRootObject:withName:nametoFile:filename]): New method. ([Coder +decodeObjectWithName:namefromStream:]): New method. ([Coder +decodeObjectWithName:namefromFile:filename]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@819 72102866-910b-0410-8b05-ffd578937521 --- Source/Coder.m | 137 +++++++++++++++++++++++++++++++------------------ 1 file changed, 88 insertions(+), 49 deletions(-) diff --git a/Source/Coder.m b/Source/Coder.m index 0fdfc971c..f8d2bc0b4 100644 --- a/Source/Coder.m +++ b/Source/Coder.m @@ -157,8 +157,8 @@ my_object_is_class(id object) /* Initialization. */ -/* This is the designated sub-initializer. - Don't call it yourself. +/* This is the designated initializer. + But, don't call it yourself. Do override it and call [super...] in subclasses. */ - _initWithCStream: (id ) cs formatVersion: (int) version @@ -181,6 +181,22 @@ my_object_is_class(id object) return self; } +/* This is the designated sub-initializer for all "writing" coders. */ +- initForWritingToStream: (id ) s + withFormatVersion: (int) version + cStreamClass: (Class) cStreamClass + cStreamFormatVersion: (int) cStreamFormatVersion +{ + [self _initWithCStream: [[cStreamClass alloc] + initForWritingToStream: s + withFormatVersion: cStreamFormatVersion] + formatVersion: version + isDecoding: NO]; + [self writeSignature]; + return self; +} + +/* This is the designated sub-initializer for all "reading" coders. */ + coderReadingFromStream: (id ) stream { id cs = [CStream cStreamReadingFromStream: stream]; @@ -199,54 +215,43 @@ my_object_is_class(id object) return [new_coder autorelease]; } -+ coderReadingFromFile: (id ) filename -{ - return [self coderReadingFromStream: - [[[StdioStream alloc] initWithFilename:filename fmode:"r"] - autorelease]]; -} - -- initForReadingFromStream: (id ) stream - formatVersion: (int)version -{ - [self notImplemented:_cmd]; - [self _initWithCStream: [[[[[self class] defaultCStreamClass] alloc] - initForWritingToStream: stream] - autorelease] - formatVersion: version - isDecoding: YES]; - /* Model this after [CStream -initForReading...] */ - return self; -} - -- initForReadingFromStream: (id ) s -{ - return [self initForReadingFromStream: s - formatVersion: DEFAULT_FORMAT_VERSION]; -} - -- initForReadingFromFile: (id ) filename -{ - return [self initForReadingFromStream: - [StdioStream streamWithFilename: filename - fmode: "r"]]; -} +/* ..Writing... methods */ - initForWritingToStream: (id ) s - formatVersion: (int) version + withCStreamClass: (Class) cStreamClass { - [self _initWithCStream: [[[self class] defaultCStreamClass] - cStreamWritingToStream: s] - formatVersion: version - isDecoding: NO]; - [self writeSignature]; - return self; + return [self initForWritingToStream: s + withFormatVersion: DEFAULT_FORMAT_VERSION + cStreamClass: cStreamClass + cStreamFormatVersion: [cStreamClass defaultFormatVersion]]; } - initForWritingToStream: (id ) s { return [self initForWritingToStream: s - formatVersion: DEFAULT_FORMAT_VERSION]; + withCStreamClass: [[self class] defaultCStreamClass]]; +} + +- initForWritingToFile: (id ) filename + withFormatVersion: (int) version + cStreamClass: (Class) cStreamClass + cStreamFormatVersion: (int) cStreamFormatVersion +{ + return [self initForWritingToStream: [StdioStream + streamWithFilename: filename + fmode: "w"] + withFormatVersion: version + cStreamClass: cStreamClass + cStreamFormatVersion: cStreamFormatVersion]; +} + +- initForWritingToFile: (id ) filename + withCStreamClass: (Class) cStreamClass +{ + return [self initForWritingToStream: [StdioStream + streamWithFilename: filename + fmode: "w"] + withCStreamClass: cStreamClass]; } - initForWritingToFile: (id ) filename @@ -269,26 +274,60 @@ my_object_is_class(id object) fmode: "w"]]; } -- init ++ (BOOL) encodeRootObject: anObject + withName: (id ) name + toStream: (id )stream { - [self shouldNotImplement:_cmd]; - return self; + id c = [[Coder alloc] initForWritingToStream: stream]; + [c encodeRootObject: anObject withName: name]; + [c closeCoder]; + [c release]; + return YES; } -+ decodeObjectFromStream: (id )stream ++ (BOOL) encodeRootObject: anObject + withName: (id ) name + toFile: (id ) filename +{ + return [self encodeRootObject: anObject + withName: name + toStream: [StdioStream streamWithFilename: filename + fmode: "w"]]; +} + +/* ..Reading... methods */ + ++ coderReadingFromFile: (id ) filename +{ + return [self coderReadingFromStream: + [StdioStream streamWithFilename: filename + fmode: "r"]]; +} + ++ decodeObjectWithName: (id *) name + fromStream: (id )stream; { id c, o; c = [self coderReadingFromStream:stream]; - [c decodeObjectAt: &o withName: NULL]; + [c decodeObjectAt: &o withName: name]; return [o autorelease]; } -+ decodeObjectFromFile: (id ) filename ++ decodeObjectWithName: (id *) name + fromFile: (id ) filename; { - return [self decodeObjectFromStream: + return [self decodeObjectWithName: name + fromStream: [StdioStream streamWithFilename:filename fmode: "r"]]; } +- init +{ + /* Or should we provide some kind of default? */ + [self shouldNotImplement:_cmd]; + return self; +} + /* Functions and methods for keeping cross-references