libs-base/Source/Coder.m

372 lines
8 KiB
Mathematica
Raw Normal View History

/* Implementation of GNU Objective-C coder object for use serializing
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
Written by: R. Andrew McCallum <mccallum@gnu.ai.mit.edu>
Date: July 1994
This file is part of the GNU Objective C Class Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <gnustep/base/prefix.h>
#include <gnustep/base/Coder.h>
#include <gnustep/base/CoderPrivate.h>
#include <gnustep/base/MemoryStream.h>
#include <gnustep/base/Coding.h>
#include <gnustep/base/Dictionary.h>
#include <gnustep/base/Stack.h>
#include <gnustep/base/Set.h>
#include <gnustep/base/NSString.h>
#include <gnustep/base/Streaming.h>
#include <gnustep/base/Stream.h>
#include <gnustep/base/CStreaming.h>
#include <gnustep/base/CStream.h>
#include <gnustep/base/TextCStream.h>
#include <gnustep/base/BinaryCStream.h>
#include <gnustep/base/StdioStream.h>
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
#include <Foundation/NSException.h>
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
#include <Foundation/NSGeometry.h>
#include <Foundation/NSData.h>
#include <Foundation/NSArchiver.h>
#include <Foundation/NSMapTable.h>
#include <Foundation/NSHashTable.h>
#include <assert.h>
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
/* Exception strings */
id CoderSignatureMalformedException = @"CoderSignatureMalformedException";
#define DEFAULT_FORMAT_VERSION 0
#define ROUND(V, A) \
({ typeof(V) __v=(V); typeof(A) __a=(A); \
__a*((__v+__a-1)/__a); })
#define DOING_ROOT_OBJECT (interconnect_stack_height != 0)
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
static BOOL debug_coder = NO;
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
@implementation Coder
+ setDebugging: (BOOL)f
{
debug_coder = f;
return self;
}
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
/* Initialization. */
/* This is the designated initializer. But, don't call it yourself;
override it and call [super...] in subclasses. */
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
- _initWithCStream: (id <CStreaming>) cs
formatVersion: (int) version
{
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
format_version = version;
cstream = [cs retain];
classname_2_classname = NULL;
interconnect_stack_height = 0;
return self;
}
- init
{
/* Or should we provide some kind of default? */
[self shouldNotImplement:_cmd];
return self;
}
/* We must separate the idea of "closing" a coder and "deallocating"
a coder because of delays in deallocation due to -autorelease. */
- (void) close
{
[[cstream stream] close];
}
- (BOOL) isClosed
{
return [[cstream stream] isClosed];
}
- (void) dealloc
{
/* xxx No. [self _finishDecodeRootObject]; */
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
[cstream release];
[super dealloc];
}
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
/* Access to instance variables. */
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
- cStream
{
return cstream;
}
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
- (int) formatVersion
{
return format_version;
}
- (void) resetCoder
{
/* xxx Finish this */
Now uses a CStream instance for low-level encoding of variables of C type. Include many more files. Use new-style method name "..ValueOfObjCType", instead of "..ValueOfType". Use (id <String>) instead of (char *) where appropriate. (DEFAULT_FORMAT_VERSION): Renamed from CODER_FORMAT_VERSION. (default_stream_class): Renamed from defaultStreamClass; (default_cstream_class): New static variable. ([Coder +initialize]): Initialize above two variables. ([Coder +setDefaultCStreamClass:]): New method. ([Coder +defaultCStreamClass]): New method. ([Coder +setDefaultStreamClass:]): New method. ([Coder +defaultStreamClass]): New method. ([Coder +defaultFormatVersion]): New method. ([Coder -writeSignature]): New method, replaces -encodeSignature. ([Coder +readSignatureFromCStream:getClassname:formatVersion:]): New method, replaces decodeSignature. ([Coder -_initWithCStream:formatVersion:isDecoding:f]): New method, replaces _initWithStream:isDecoding. ([Coder +coderReadingFromStream:stream]): New method. ([Coder +coderReadingFromFile:filename]): New method. ([Coder -initForReadingFromStream:formatVersion:]): New method. ([Coder -initForWritingToStream:sformatVersion:version]): New method. ([Coder +decodeObjectFromStream:]): New method. ([Coder +decodeObjectFromFile:filename]): New method. ([Coder -initEncodingOnStream:]): Method removed. ([Coder -initDecodingOnStream:]): Method removed. ([Coder -initEncoding:]): Method removed. ([Coder -initDecoding:]): Method removed. ([Coder -encodeBytes:count:withName:]): Now unimplemented. ([Coder -decodeBytes:count:withName:name]): Likewise. ([Coder -decodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfCType:at:withName:]): New method. ([Coder -encodeValueOfObjCType:at:withName:name]): Now longer handles arrays and structs; those are now handled in a CStream method. ([Coder -decodeValueOfObjCType:at:withName:]): Likewise. ([Coder -encodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -decodeValueOfSimpleType:at:withName:]): Method removed. ([Coder -encodeIndent]): Call cstream to handle this, instead of doing nothing. ([Coder -encodeUnindent]): Likewise. ([Coder -decodeIndent]): Likewise. ([Coder -decodeUnindent]): Likewise. ([Coder -encodeName:]): Likewise. ([Coder -decodeName:]): Likewise. ([Coder -formatVersion]): Method renamed from coderFormatVersion. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@770 72102866-910b-0410-8b05-ffd578937521
1996-01-23 22:51:58 +00:00
[self notImplemented:_cmd];
}
@end
/* To fool ourselves into thinking we can call all these
Encoding and Decoding methods. */
@interface Coder (Coding) <Encoding, Decoding>
@end
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
@implementation Coder (NSCoderCompatibility)
/* Encoding Data */
- (void) encodeValueOfObjCType: (const char*)type
at: (const void*)address;
{
[self encodeValueOfObjCType: type at: address withName: NULL];
}
- (void) encodeArrayOfObjCType: (const char*)type
count: (unsigned)count
at: (const void*)array
{
[self encodeArrayOfObjCType: type count: count at: array withName: NULL];
}
- (void) encodeObject: (id)anObject
{
[self encodeObject: anObject withName: NULL];
}
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
- (void) encodeBycopyObject: (id)anObject
{
[self encodeBycopyObject: anObject withName: NULL];
}
- (void) encodeConditionalObject: (id)anObject
{
/* Apparently, NeXT's implementation doesn't actually
handle *forward* references, (hence it's use of -decodeObject,
instead of decodeObjectAt:.)
So here, we only encode the object for real if the object has
already been written.
This means that if you encode a web of objects with the more
powerful GNU Coder, and then try to decode them with NSArchiver,
you could get corrupt data on the stack when Coder resolves its
forward references. I recommend just using the GNU Coder. */
#if 1
if ([self _coderReferenceForObject: anObject])
[self encodeObject: anObject];
else
[self encodeObject: nil];
#else
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
[self encodeObjectReference: anObject withName: NULL];
#endif
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
}
- (void) encodeDataObject: (NSData*)data
{
[self notImplemented:_cmd];
}
- (void) encodePropertyList: (id)plist
{
[self notImplemented:_cmd];
}
- (void) encodePoint: (NSPoint)point
{
[self encodeValueOfObjCType:@encode(NSPoint)
at:&point
withName: NULL];
}
- (void) encodeRect: (NSRect)rect
{
[self encodeValueOfObjCType:@encode(NSRect) at:&rect withName: NULL];
}
- (void) encodeRootObject: (id)rootObject
{
[self encodeRootObject: rootObject withName: NULL];
}
- (void) encodeSize: (NSSize)size
{
[self encodeValueOfObjCType:@encode(NSSize) at:&size withName: NULL];
}
- (void) encodeValuesOfObjCTypes: (const char*)types,...
{
[self notImplemented:_cmd];
}
/* Decoding Data */
- (void) decodeValueOfObjCType: (const char*)type
at: (void*)address
{
[self decodeValueOfObjCType: type at: address withName: NULL];
}
- (void) decodeArrayOfObjCType: (const char*)type
count: (unsigned)count
at: (void*)address
{
[self decodeArrayOfObjCType: type count: count at: address withName: NULL];
}
- (NSData*) decodeDataObject
{
[self notImplemented:_cmd];
return nil;
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
}
- (id) decodeObject
{
/* xxx This won't work for decoding forward references!!! */
id o;
[self decodeObjectAt: &o withName: NULL];
return o;
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
}
- (id) decodePropertyList
{
[self notImplemented:_cmd];
return nil;
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
}
- (NSPoint) decodePoint
{
NSPoint point;
[self decodeValueOfObjCType:@encode(NSPoint)
at:&point
withName: NULL];
return point;
}
- (NSRect) decodeRect
{
NSRect rect;
[self decodeValueOfObjCType:@encode(NSRect)
at:&rect
withName: NULL];
return rect;
}
- (NSSize) decodeSize
{
NSSize size;
[self decodeValueOfObjCType:@encode(NSSize)
at:&size
withName: NULL];
return size;
}
- (void) decodeValuesOfObjCTypes: (const char*)types,...
{
[self notImplemented:_cmd];
}
/* Getting a Version */
- (unsigned int) systemVersion
{
return format_version; /* xxx Is this right? */
}
- (unsigned int) versionForClassName: (NSString*)className
{
[self notImplemented:_cmd];
return 0;
}
@end /* of (NSCoderCompatibility) */
@implementation Coder (NSArchiverCompatibility)
/* Initializing an archiver */
@interface NSData (Streaming) <Streaming>
@end
- (id) initForWritingWithMutableData: (NSMutableData*)mdata
{
/* This relies on the fact that GNU extentions to NSMutableData
cause it to conform to <Streaming>. */
[(id)self initForWritingToStream: mdata];
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
return self;
}
- (id) initForReadingWithData: (NSData*)data
{
id ret = [[self class] newReadingFromStream: data];
[self release];
return ret;
}
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
/* Archiving Data */
+ (NSData*) archivedDataWithRootObject: (id)rootObject
{
id d = [[NSMutableData alloc] init];
id a = [[NSArchiver alloc] initForWritingWithMutableData:d];
[a encodeRootObject:rootObject];
return [d autorelease];
}
+ (BOOL) archiveRootObject: (id)rootObject toFile: (NSString*)path
{
/* xxx fix this return value */
id d = [self archivedDataWithRootObject:rootObject];
[d writeToFile:path atomically:NO];
return YES;
}
/* Getting data from the archiver */
+ unarchiveObjectWithData: (NSData*) data
{
return [self decodeObjectWithName: NULL fromStream: data];
}
+ unarchiveObjectWithFile: (NSString*) path
{
return [self decodeObjectWithName: NULL fromFile: path];
}
- (NSMutableData*) archiverData
{
[self notImplemented:_cmd];
return nil;
([Coder -_initWithCStream:formatVersion:isDecoding:]): Initialize new zone ivar. ([Coder -encodeBycopyObject:withName:]): Renamed from -encodeObjectBycopy, to better match NeXT. ([Coder -decodeObjectAt:anObjPtr:name]): Use zone ivar in creating decoded objects. ([Coder -encodeArrayOfObjCType:count:at:withName:]): Renamed from -encodeArrayOfObjCType:at:count:withName:, to better match NeXT. ([Coder -decodeArrayOfObjCType:count:at:withName:]): Likewise. ([Coder +classNameEncodedForTrueClassName:trueName]): New method, for NSCoder compatibility. ([Coder -encodeClassName:trueNameintoClassName:inArchiveName]): Likewise. ([Coder +classNameDecodedForArchiveClassName:inArchiveName]): Likewise. ([Coder +decodeClassName:inArchiveNameasClassName:]): Likewise. ([Coder -objectZone]): Likewise. ([Coder -setObjectZone:]): Likewise. ([Coder -encodeValueOfObjCType:at:]): Likewise. ([Coder -encodeArrayOfObjCType:count:at:]): Likewise. ([Coder -encodeBycopyObject:]): Likewise. ([Coder -encodeConditionalObject:]): Likewise. ([Coder -encodeDataObject:]): Likewise. ([Coder -encodeObject:]): Likewise. ([Coder -encodePoint:]): Likewise. ([Coder -encodeRect:]): Likewise. ([Coder -encodeRootObject:]): Likewise. ([Coder -encodeSize:]): Likewise. ([Coder -encodeValuesOfObjCTypes:...:]): Likewise. ([Coder -decodeValueOfObjCType:at:]): Likewise. ([Coder -decodeArrayOfObjCType:count:at:]): Likewise. ([Coder -decodeDataObject]): Likewise. ([Coder -decodeObject]): Likewise. ([Coder -decodePropertyList]): Likewise. ([Coder -decodePoint]): Likewise. ([Coder -decodeRect]): Likewise. ([Coder -decodeSize]): Likewise. ([Coder -decodeValuesOfObjCTypes:...:]): Likewise. ([Coder -systemVersion]): Likewise. ([Coder -versionForClassName:]): Likewise. ([Coder -initForWritingWithMutableData:]): New method, for NSArchiver compatibility. ([Coder +archivedDataWithRootObject:]): Likewise. ([Coder +archiveRootObject:toFile:]): Likewise. ([Coder +unarchiveObjectWithData:data]): Likewise. ([Coder +unarchiveObjectWithFile:path]): Likewise. ([Coder -archiverData]): Likewise. ([Coder -cStream]): New method. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@825 72102866-910b-0410-8b05-ffd578937521
1996-01-26 03:06:35 +00:00
}
@end