mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 09:41:15 +00:00
references have unique names. Previous use of the MapTable count for this purpose didn't work because we occasionally removed elements from the table, and thus had aliased forward reference numbers. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1354 72102866-910b-0410-8b05-ffd578937521
148 lines
4.6 KiB
Objective-C
148 lines
4.6 KiB
Objective-C
/* Interface for 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.
|
||
*/
|
||
|
||
#ifndef __Coder_h_OBJECTS_INCLUDE
|
||
#define __Coder_h_OBJECTS_INCLUDE
|
||
|
||
#include <objects/stdobjects.h>
|
||
#include <objects/Coding.h>
|
||
#include <objects/Streaming.h>
|
||
#include <objects/String.h>
|
||
#include <Foundation/NSHashTable.h>
|
||
#include <Foundation/NSMapTable.h>
|
||
|
||
@class CStream;
|
||
|
||
|
||
/* The root abstract class for archiving */
|
||
|
||
@interface Coder : NSObject
|
||
{
|
||
int format_version;
|
||
CStream *cstream;
|
||
NSMapTable *classname_2_classname; /* for changing class names on r/w */
|
||
int interconnect_stack_height; /* number of nested root objects */
|
||
}
|
||
|
||
+ setDebugging: (BOOL)f;
|
||
|
||
@end
|
||
|
||
|
||
/* An abstract class for writing an archive */
|
||
|
||
@interface Encoder : Coder
|
||
{
|
||
/* xxx in_progress_table should actually be an NSHashTable,
|
||
but we are working around a bug right now. */
|
||
NSMapTable *in_progress_table; /* objects begun writing, but !finished */
|
||
NSMapTable *object_2_xref; /* objects already written */
|
||
NSMapTable *object_2_fref; /* table of forward references */
|
||
NSMapTable *const_ptr_2_xref; /* const pointers already written */
|
||
unsigned fref_counter; /* Keep track of unused fref numbers */
|
||
}
|
||
|
||
- initForWritingToFile: (id <String>) filename;
|
||
- initForWritingToFile: (id <String>) filename
|
||
withCStreamClass: (Class) cStreamClass;
|
||
- initForWritingToFile: (id <String>) filename
|
||
withFormatVersion: (int) version
|
||
cStreamClass: (Class)scc
|
||
cStreamFormatVersion: (int) cStreamFormatVersion;
|
||
|
||
- initForWritingToStream: (id <Streaming>) s;
|
||
- initForWritingToStream: (id <Streaming>) s
|
||
withCStreamClass: (Class) cStreamClass;
|
||
- initForWritingToStream: (id <Streaming>) s
|
||
withFormatVersion: (int) version
|
||
cStreamClass: (Class) cStreamClass
|
||
cStreamFormatVersion: (int) cStreamFormatVersion;
|
||
|
||
+ (BOOL) encodeRootObject: anObject
|
||
withName: (id <String>) name
|
||
toFile: (id <String>) filename;
|
||
+ (BOOL) encodeRootObject: anObject
|
||
withName: (id <String>) name
|
||
toStream: (id <Streaming>)stream;
|
||
|
||
/* Defaults */
|
||
+ (void) setDefaultStreamClass: sc;
|
||
+ defaultStreamClass;
|
||
+ (void) setDefaultCStreamClass: sc;
|
||
+ defaultCStreamClass;
|
||
+ (void) setDefaultFormatVersion: (int)fv;
|
||
+ (int) defaultFormatVersion;
|
||
|
||
@end
|
||
|
||
@interface Encoder (Encoding) <Encoding>
|
||
@end
|
||
|
||
|
||
|
||
/* An abstract class for reading an archive. */
|
||
|
||
@interface Decoder : Coder
|
||
{
|
||
NSZone *zone; /* zone in which to create objects */
|
||
id xref_2_object; /* objects already read */
|
||
id xref_2_object_root; /* objs read since last -startDecodoingI.. */
|
||
NSMapTable *xref_2_const_ptr; /* const pointers already written */
|
||
NSMapTable *fref_2_object; /* table of forward references */
|
||
NSMapTable *address_2_fref; /* table of forward references */
|
||
}
|
||
|
||
/* These are class methods (and not instance methods) because the
|
||
header of the file or stream determines which subclass of Decoder
|
||
is created. */
|
||
|
||
+ newReadingFromFile: (id <String>) filename;
|
||
+ newReadingFromStream: (id <Streaming>)stream;
|
||
|
||
+ decodeObjectWithName: (id <String> *) name
|
||
fromFile: (id <String>) filename;
|
||
+ decodeObjectWithName: (id <String> *) name
|
||
fromStream: (id <Streaming>)stream;
|
||
|
||
@end
|
||
|
||
@interface Decoder (Decoding) <Decoding>
|
||
@end
|
||
|
||
|
||
/* Extensions to NSObject for encoding and decoding. */
|
||
|
||
@interface NSObject (OptionalNewWithCoder)
|
||
+ newWithCoder: (Coder*)aDecoder;
|
||
@end
|
||
|
||
@interface NSObject (CoderAdditions)
|
||
/* <SelfCoding> not needed because of NSCoding */
|
||
/* These methods here temporarily until ObjC runtime category bug fixed */
|
||
- classForConnectedCoder:aRmc;
|
||
+ (void) encodeObject: anObject withConnectedCoder: aRmc;
|
||
@end
|
||
|
||
extern id CoderSignatureMalformedException;
|
||
|
||
#endif /* __Coder_h_OBJECTS_INCLUDE */
|