added GSdoc comments to class, method, and function declarations; for some classes some comments were already in the source file (not the header), in which case further comments were added here; otherwise comments were put in the headers

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@19586 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Adrian Robert 2004-06-22 22:27:39 +00:00
parent 3e78bdb1e7
commit 9e3ec7ecff
38 changed files with 2408 additions and 161 deletions

View file

@ -21,10 +21,9 @@
License along with this library; if not, write to the Free License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
AutogsdocSource: NSArchiver.m AutogsdocSource:NSUnarchiver.m
AutogsdocSource: NSUnarchiver.m AutogsdocSource:NSArchiver.m
*/
*/
#ifndef __NSArchiver_h_GNUSTEP_BASE_INCLUDE #ifndef __NSArchiver_h_GNUSTEP_BASE_INCLUDE
#define __NSArchiver_h_GNUSTEP_BASE_INCLUDE #define __NSArchiver_h_GNUSTEP_BASE_INCLUDE

View file

@ -79,8 +79,9 @@ typedef struct autorelease_array_list
* object gets deallocated. * object gets deallocated.
* </p> * </p>
* <p> * <p>
* A simple retain/release mechanism is not very interesting ... * A simple retain/release mechanism has problems with passing objects
* so it's spiced up with autorelease pools. You can use the * from one scope to another,
* so it's augmented with autorelease pools. You can use the
* AUTORELEASE() macro to call the [NSObject-autorelease] * AUTORELEASE() macro to call the [NSObject-autorelease]
* method, which adds an object to the current autorelease pool by * method, which adds an object to the current autorelease pool by
* calling [NSAutoreleasePool+addObject:].<br /> * calling [NSAutoreleasePool+addObject:].<br />
@ -127,7 +128,7 @@ typedef struct autorelease_array_list
* <desc> * <desc>
* Methods whose names begin with init return an initialised * Methods whose names begin with init return an initialised
* version of the receiving object, owned by the caller.<br /> * version of the receiving object, owned by the caller.<br />
* NB. The returned object may not actualy be the same as the * NB. The returned object may not actually be the same as the
* receiver ... sometimes an init method releases the original * receiver ... sometimes an init method releases the original
* receiver and returns an alternative. * receiver and returns an alternative.
* </desc> * </desc>

View file

@ -27,6 +27,7 @@
#include <Foundation/NSCharacterSet.h> #include <Foundation/NSCharacterSet.h>
#include <Foundation/NSData.h> #include <Foundation/NSData.h>
//PENDING: may want to make these less likely to conflict
#define UNICODE_SIZE 65536 #define UNICODE_SIZE 65536
#define BITMAP_SIZE UNICODE_SIZE/8 #define BITMAP_SIZE UNICODE_SIZE/8
@ -36,20 +37,35 @@
#define ISSET(a,i) ((((a) & (1<<(i)))) > 0) ? YES : NO; #define ISSET(a,i) ((((a) & (1<<(i)))) > 0) ? YES : NO;
#endif #endif
/**
* An [NSCharacterSet] that stores the set of unicode characters in it as a
* simple bitmap. Implementation is very efficient.
*/
@interface NSBitmapCharSet : NSCharacterSet @interface NSBitmapCharSet : NSCharacterSet
{ {
char _data[BITMAP_SIZE]; char _data[BITMAP_SIZE];
} }
/**
* Init directly with bitmap data. bitmap should be <code>BITMAP_SIZE</code>
* long, which is currently 2^16 / 8.
*/
- (id) initWithBitmap: (NSData*)bitmap; - (id) initWithBitmap: (NSData*)bitmap;
@end @end
/**
* Mutable version of [NSBitmapCharSet].
*/
@interface NSMutableBitmapCharSet : NSMutableCharacterSet @interface NSMutableBitmapCharSet : NSMutableCharacterSet
{ {
char _data[BITMAP_SIZE]; char _data[BITMAP_SIZE];
} }
/**
* Init directly with bitmap data. bitmap should be <code>BITMAP_SIZE</code>
* long, which is currently 2^16 / 8.
*/
- (id) initWithBitmap: (NSData*)bitmap; - (id) initWithBitmap: (NSData*)bitmap;
@end @end

View file

@ -140,7 +140,7 @@ GS_EXPORT NSString* NSLoadedClasses;
inDirectory: (NSString*)bundlePath; inDirectory: (NSString*)bundlePath;
/** /**
This method has been depreciated. Version numbers were never implemented This method has been deprecated. Version numbers were never implemented
so this method behaves exactly like +pathForResource:ofType:inDirectory:. so this method behaves exactly like +pathForResource:ofType:inDirectory:.
*/ */
+ (NSString*) pathForResource: (NSString*)name + (NSString*) pathForResource: (NSString*)name
@ -173,6 +173,10 @@ GS_EXPORT NSString* NSLoadedClasses;
*/ */
- (Class) principalClass; - (Class) principalClass;
/**
* Not implemented. Create an instance and call the corresponding instance
* method instead.
*/
+ (NSArray*) pathsForResourcesOfType: (NSString*)extension + (NSArray*) pathsForResourcesOfType: (NSString*)extension
inDirectory: (NSString*)bundlePath; inDirectory: (NSString*)bundlePath;
@ -241,14 +245,29 @@ GS_EXPORT NSString* NSLoadedClasses;
- (void) setBundleVersion: (unsigned)version; - (void) setBundleVersion: (unsigned)version;
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
/**
* Returns subarray of given array containing those localizations that are
* used to locate resources given environment and user preferences.
*/
+ (NSArray *) preferredLocalizationsFromArray: (NSArray *)localizationsArray; + (NSArray *) preferredLocalizationsFromArray: (NSArray *)localizationsArray;
/**
* Returns subarray of given array containing those localizations that are
* used to locate resources given environment given user preferences (which
* are used instead of looking up the preferences of the current user).
*/
+ (NSArray *) preferredLocalizationsFromArray: (NSArray *)localizationsArray + (NSArray *) preferredLocalizationsFromArray: (NSArray *)localizationsArray
forPreferences: (NSArray *)preferencesArray; forPreferences: (NSArray *)preferencesArray;
- (BOOL) isLoaded; - (BOOL) isLoaded;
/**
* Not implemented.
*/
- (NSArray*) pathsForResourcesOfType: (NSString*)extension - (NSArray*) pathsForResourcesOfType: (NSString*)extension
inDirectory: (NSString*)bundlePath inDirectory: (NSString*)bundlePath
forLocalization: (NSString*)localizationName; forLocalization: (NSString*)localizationName;
/**
* Not implemented.
*/
- (NSString*) pathForResource: (NSString*)name - (NSString*) pathForResource: (NSString*)name
ofType: (NSString*)ext ofType: (NSString*)ext
inDirectory: (NSString*)bundlePath inDirectory: (NSString*)bundlePath
@ -285,6 +304,10 @@ GS_EXPORT NSString* NSLoadedClasses;
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Augments [NSBundle], including methods for handling libraries in the GNUstep
* fashion, for rapid localization, and other purposes.
*/
@interface NSBundle (GNUstep) @interface NSBundle (GNUstep)
/** This method is an experimental GNUstep extension, and /** This method is an experimental GNUstep extension, and
@ -301,15 +324,15 @@ GS_EXPORT NSString* NSLoadedClasses;
+ (NSString*) _gnustep_target_os; + (NSString*) _gnustep_target_os;
+ (NSString*) _library_combo; + (NSString*) _library_combo;
/** Find a resource in the "Library" directory */ /** Find a resource in the "Library" directory. */
+ (NSString*) pathForLibraryResource: (NSString*)name + (NSString*) pathForLibraryResource: (NSString*)name
ofType: (NSString*)ext ofType: (NSString*)ext
inDirectory: (NSString*)bundlePath; inDirectory: (NSString*)bundlePath;
/** Depreciated. Use +bundleForLibrary: instead. */ /** Deprecated. Use +bundleForLibrary: instead. */
+ (NSBundle*) gnustepBundle; + (NSBundle*) gnustepBundle;
/** Depreciated. Use +pathForLibraryResource:ofType:inDirectory: /** Deprecated. Use +pathForLibraryResource:ofType:inDirectory:
or +bundleForLibrary: instead. */ or +bundleForLibrary: instead. */
+ (NSString*) pathForGNUstepResource: (NSString*)name + (NSString*) pathForGNUstepResource: (NSString*)name
ofType: (NSString*)ext ofType: (NSString*)ext

View file

@ -106,7 +106,20 @@
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Adds <code>-weekOfYear</code> method.
*/
@interface NSCalendarDate (GSCategories) @interface NSCalendarDate (GSCategories)
/**
* The ISO standard week of the year is based on the first week of the
* year being that week (starting on monday) for which the thursday
* is on or after the first of january.<br />
* This has the effect that, if january first is a friday, saturday or
* sunday, the days of that week (up to and including the sunday) are
* considered to be in week 53 of the preceeding year. Similarly if the
* last day of the year is a monday tuesday or wednesday, these days are
* part of week 1 of the next year.
*/
- (int) weekOfYear; - (int) weekOfYear;
@end @end

View file

@ -30,51 +30,191 @@
@class NSMutableData, NSData, NSString; @class NSMutableData, NSData, NSString;
/**
* <p>Top-level class defining methods for use when archiving (encoding)
* objects to a byte array or file, and when restoring (decoding) objects.
* Generally only subclasses of this class are used directly - [NSArchiver],
* [NSUnarchiver], [NSKeyedArchiver], [NSKeyedUnarchiver], or [NSPortCoder].
* </p>
* <p><code>NSPortCoder</code> is used within the distributed objects
* framework. For archiving to/from disk, the <em>Keyed...</em> classes are
* preferred for new implementations, since they provide greater
* forward/backward compatibility in the face of class changes.</p>
*/
@interface NSCoder : NSObject @interface NSCoder : NSObject
// Encoding Data // Encoding Data
/**
* Encodes array of count structures or objects of given type, which may be
* obtained through the '<code>@encode(...)</code>' compile-time operator.
* Usually this is used for primitives though it can be used for objects as
* well.
*/
- (void) encodeArrayOfObjCType: (const char*)type - (void) encodeArrayOfObjCType: (const char*)type
count: (unsigned)count count: (unsigned)count
at: (const void*)array; at: (const void*)array;
/**
* Can be ignored.
*/
- (void) encodeBycopyObject: (id)anObject; - (void) encodeBycopyObject: (id)anObject;
/**
* Can be ignored.
*/
- (void) encodeByrefObject: (id)anObject; - (void) encodeByrefObject: (id)anObject;
/**
* Stores bytes directly into archive.
*/
- (void) encodeBytes: (void*)d length: (unsigned)l; - (void) encodeBytes: (void*)d length: (unsigned)l;
/**
* Encode object if it is/will be encoded unconditionally by this coder,
* otherwise store a nil.
*/
- (void) encodeConditionalObject: (id)anObject; - (void) encodeConditionalObject: (id)anObject;
/**
* Encode an instance of [NSData].
*/
- (void) encodeDataObject: (NSData*)data; - (void) encodeDataObject: (NSData*)data;
/**
* Encodes a generic object. This will usually result in an [NSCoding
* -encodeWithCoder:] message being sent to anObject so it can encode itself.
*/
- (void) encodeObject: (id)anObject; - (void) encodeObject: (id)anObject;
/**
* Encodes a property list by calling [NSSerializer -serializePropertyList:],
* then encoding the resulting [NSData] object.
*/
- (void) encodePropertyList: (id)plist; - (void) encodePropertyList: (id)plist;
/**
* Encodes a point structure.
*/
- (void) encodePoint: (NSPoint)point; - (void) encodePoint: (NSPoint)point;
/**
* Encodes a rectangle structure.
*/
- (void) encodeRect: (NSRect)rect; - (void) encodeRect: (NSRect)rect;
/**
* Store object and objects it refers to in archive (i.e., complete object
* graph).
*/
- (void) encodeRootObject: (id)rootObject; - (void) encodeRootObject: (id)rootObject;
/**
* Encodes a size structure.
*/
- (void) encodeSize: (NSSize)size; - (void) encodeSize: (NSSize)size;
/**
* Encodes structure or object of given type, which may be obtained
* through the '<code>@encode(...)</code>' compile-time operator. Usually
* this is used for primitives though it can be used for objects as well.
*/
- (void) encodeValueOfObjCType: (const char*)type - (void) encodeValueOfObjCType: (const char*)type
at: (const void*)address; at: (const void*)address;
/**
* Multiple version of [-encodeValueOfObjCType:at:].
*/
- (void) encodeValuesOfObjCTypes: (const char*)types,...; - (void) encodeValuesOfObjCTypes: (const char*)types,...;
// Decoding Data // Decoding Data
/**
* Decodes array of count structures or objects of given type, which may be
* obtained through the '<code>@encode(...)</code>' compile-time operator.
* Usually this is used for primitives though it can be used for objects as
* well. Objects will be retained and you must release them.
*/
- (void) decodeArrayOfObjCType: (const char*)type - (void) decodeArrayOfObjCType: (const char*)type
count: (unsigned)count count: (unsigned)count
at: (void*)address; at: (void*)address;
/**
* Retrieve bytes directly from archive.
*/
- (void*) decodeBytesWithReturnedLength: (unsigned*)l; - (void*) decodeBytesWithReturnedLength: (unsigned*)l;
/**
* Decode an instance of [NSData].
*/
- (NSData*) decodeDataObject; - (NSData*) decodeDataObject;
/**
* Decodes a generic object. Usually the class will be read from the
* archive, an object will be created through an <code>alloc</code> call,
* then that class will be sent an [NSCoding -initWithCoder:] message.
*/
- (id) decodeObject; - (id) decodeObject;
/**
* Decodes a property list from the archive previously stored through a call
* to [-encodePropertyList:].
*/
- (id) decodePropertyList; - (id) decodePropertyList;
/**
* Decodes a point structure.
*/
- (NSPoint) decodePoint; - (NSPoint) decodePoint;
/**
* Decodes a rectangle structure.
*/
- (NSRect) decodeRect; - (NSRect) decodeRect;
/**
* Decodes a size structure.
*/
- (NSSize) decodeSize; - (NSSize) decodeSize;
/**
* Decodes structure or object of given type, which may be obtained
* through the '<code>@encode(...)</code>' compile-time operator. Usually
* this is used for primitives though it can be used for objects as well,
* in which case you are responsible for releasing them.
*/
- (void) decodeValueOfObjCType: (const char*)type - (void) decodeValueOfObjCType: (const char*)type
at: (void*)address; at: (void*)address;
/**
* Multiple version of [-decodeValueOfObjCType:at:].
*/
- (void) decodeValuesOfObjCTypes: (const char*)types,...; - (void) decodeValuesOfObjCTypes: (const char*)types,...;
// Managing Zones // Managing Zones
/**
* Returns zone being used to allocate memory for decoded objects.
*/
- (NSZone*) objectZone; - (NSZone*) objectZone;
/**
* Sets zone to use for allocating memory for decoded objects.
*/
- (void) setObjectZone: (NSZone*)zone; - (void) setObjectZone: (NSZone*)zone;
// Getting a Version // Getting a Version
/**
* Returns *Step version, which is not the release version, but a large number,
* by specification &lt;1000 for pre-OpenStep. This implementation returns
* a number based on the GNUstep major, minor, and subminor versions.
*/
- (unsigned int) systemVersion; - (unsigned int) systemVersion;
/**
* Returns current version of class (when encoding) or version of decoded
* class (decoded). Version comes from [NSObject -getVersion].
*
*/
- (unsigned int) versionForClassName: (NSString*)className; - (unsigned int) versionForClassName: (NSString*)className;
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
@ -162,7 +302,7 @@
- (void) encodeBool: (BOOL) aBool forKey: (NSString*)aKey; - (void) encodeBool: (BOOL) aBool forKey: (NSString*)aKey;
/** <override-subclass /> /** <override-subclass />
* Encodes the data of the specified length and pointed to by aPointeraBool, * Encodes the data of the specified length and pointed to by aPointer,
* and associates the encoded value with aKey. * and associates the encoded value with aKey.
*/ */
- (void) encodeBytes: (const uint8_t*)aPointer - (void) encodeBytes: (const uint8_t*)aPointer
@ -209,6 +349,9 @@
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* GNUstep extensions to [NSCoder], supporting compatibility with libObjects.
*/
@interface NSCoder (GNUstep) @interface NSCoder (GNUstep)
/* Compatibility with libObjects */ /* Compatibility with libObjects */
- (void) decodeArrayOfObjCType: (const char*)type - (void) decodeArrayOfObjCType: (const char*)type

View file

@ -146,22 +146,41 @@ GS_EXPORT NSString *NSConnectionProxyCount; /* Objects received */
@end @end
/* /**
* This catagory contains legacy methods from the original GNU 'Connection' * This category contains legacy methods from the original GNU 'Connection'
* class, and useful extensions to NSConnection. * class, and useful extensions to [NSConnection].
*/ */
@interface NSConnection (GNUstepExtensions) <GCFinalization> @interface NSConnection (GNUstepExtensions) <GCFinalization>
/**
* Alternative convenience constructor, not specified in OpenStep, where you
* registe root anObject under given name in one step.
*/
+ (NSConnection*) newRegisteringAtName: (NSString*)name + (NSConnection*) newRegisteringAtName: (NSString*)name
withRootObject: (id)anObject; withRootObject: (id)anObject;
/**
* Performs local and remote cleanup.
*/
- (void) gcFinalize; - (void) gcFinalize;
/**
* [NSDistantObject -forward::] calls this to send the message over the wire.
*/
- (retval_t) forwardForProxy: (NSDistantObject*)object - (retval_t) forwardForProxy: (NSDistantObject*)object
selector: (SEL)sel selector: (SEL)sel
argFrame: (arglist_t)argframe; argFrame: (arglist_t)argframe;
/**
* [NSDistantObject -forwardInvocation:] calls this to send the message over
* the wire.
*/
- (void) forwardInvocation: (NSInvocation *)inv - (void) forwardInvocation: (NSInvocation *)inv
forProxy: (NSDistantObject*)object; forProxy: (NSDistantObject*)object;
/**
* Returns type code (@encode()-compatible) for given remote method.
*/
- (const char *) typeForSelector: (SEL)sel remoteTarget: (unsigned)target; - (const char *) typeForSelector: (SEL)sel remoteTarget: (unsigned)target;
@end @end
@ -169,8 +188,8 @@ GS_EXPORT NSString *NSConnectionProxyCount; /* Objects received */
GS_EXPORT NSString *ConnectionBecameInvalidNotification; GS_EXPORT NSString *ConnectionBecameInvalidNotification;
@interface Object (NSConnectionDelegate) @interface Object (NSConnectionDelegate)
/* /**
* This method may be used to ask a delegates permission to create * This method may be used to ask a delegate's permission to create
* a new connection from the old one. * a new connection from the old one.
* This method should be implemented in preference to the * This method should be implemented in preference to the
* [makeNewConnection:sender:] which is obsolete. * [makeNewConnection:sender:] which is obsolete.
@ -178,7 +197,7 @@ GS_EXPORT NSString *ConnectionBecameInvalidNotification;
- (BOOL) connection: (NSConnection*)parent - (BOOL) connection: (NSConnection*)parent
shouldMakeNewConnection: (NSConnection*)newConnection; shouldMakeNewConnection: (NSConnection*)newConnection;
/* /**
* This is the old way of doing the same thing as * This is the old way of doing the same thing as
* [connection:shouldMakeNewConnection:] * [connection:shouldMakeNewConnection:]
* It is obsolete - don't use it. * It is obsolete - don't use it.
@ -186,7 +205,7 @@ GS_EXPORT NSString *ConnectionBecameInvalidNotification;
- (BOOL) makeNewConnection: (NSConnection*)newConnection - (BOOL) makeNewConnection: (NSConnection*)newConnection
sender: (NSConnection*)parent; sender: (NSConnection*)parent;
/* /**
* If the delegate responds to this method, it will be used to ask the * If the delegate responds to this method, it will be used to ask the
* delegate's permission to establish a new connection from the old one. * delegate's permission to establish a new connection from the old one.
* Often this is used so that the delegate can register for invalidation * Often this is used so that the delegate can register for invalidation
@ -197,20 +216,29 @@ GS_EXPORT NSString *ConnectionBecameInvalidNotification;
- (NSConnection*) connection: (NSConnection*)ancestorConn - (NSConnection*) connection: (NSConnection*)ancestorConn
didConnect: (NSConnection*)newConn; didConnect: (NSConnection*)newConn;
/* /**
* These are like the MacOS-X delegate methods, except that we provide the * These are like the MacOS-X delegate methods, except that we provide the
* components in mutable arrays, so that the delegate can alter the data * components in mutable arrays, so that the delegate can alter the data
* items in the array. Of course, you must do that WITH CARE. * items in the array. Of course, you must do that WITH CARE.
*/ */
- (BOOL) authenticateComponents: (NSMutableArray*)components - (BOOL) authenticateComponents: (NSMutableArray*)components
withData: (NSData*)authenticationData; withData: (NSData*)authenticationData;
/**
* These are like the MacOS-X delegate methods, except that we provide the
* components in mutable arrays, so that the delegate can alter the data
* items in the array. Of course, you must do that WITH CARE.
*/
- (NSData*) authenticationDataForComponents: (NSMutableArray*)components; - (NSData*) authenticationDataForComponents: (NSMutableArray*)components;
@end @end
/**
* This informal protocol allows an object to control the details of how an
* object is sent over the wire in distributed objects Port communications.
*/
@interface Object (NSPortCoder) @interface Object (NSPortCoder)
- (Class) classForPortCoder; /**
/*
* Must return the class that will be created on the remote side * Must return the class that will be created on the remote side
* of the connection. If the class to be created is not the same * of the connection. If the class to be created is not the same
* as that of the object returned by replacementObjectForPortCoder: * as that of the object returned by replacementObjectForPortCoder:
@ -221,14 +249,16 @@ GS_EXPORT NSString *ConnectionBecameInvalidNotification;
* class is returned. To force bycopy operation the object should * class is returned. To force bycopy operation the object should
* return its own class. * return its own class.
*/ */
- (id) replacementObjectForPortCoder: (NSPortCoder*)aCoder; - (Class) classForPortCoder;
/*
/**
* This message is sent to an object about to be encoded for sending * This message is sent to an object about to be encoded for sending
* over the wire. The default action is to return an NSDistantObject * over the wire. The default action is to return an NSDistantObject
* which is a local proxy for the object unless the object is being * which is a local proxy for the object unless the object is being
* sent bycopy, in which case the actual object is returned. * sent bycopy, in which case the actual object is returned.
* To force bycopy, an object should return itsself. * To force bycopy, an object should return itself.
*/ */
- (id) replacementObjectForPortCoder: (NSPortCoder*)aCoder;
@end @end

View file

@ -116,13 +116,70 @@
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Extension methods for the NSData class- mainly conversion utilities.
*/
@interface NSData (GSCategories) @interface NSData (GSCategories)
/**
* Returns an NSString object containing an ASCII hexadecimal representation
* of the receiver. This means that the returned object will contain
* exactly twice as many characters as there are bytes as the receiver,
* as each byte in the receiver is represented by two hexadecimal digits.<br />
* The high order four bits of each byte is encoded before the low
* order four bits. Capital letters 'A' to 'F' are used to represent
* values from 10 to 15.<br />
* If you need the hexadecimal representation as raw byte data, use code
* like -
* <example>
* hexData = [[sourceData hexadecimalRepresentation]
* dataUsingEncoding: NSASCIIStringEncoding];
* </example>
*/
- (NSString*) hexadecimalRepresentation; - (NSString*) hexadecimalRepresentation;
/**
* Initialises the receiver with the supplied string data which contains
* a hexadecimal coding of the bytes. The parsing of the string is
* fairly tolerant, ignoring whitespace and permitting both upper and
* lower case hexadecimal digits (the -hexadecimalRepresentation method
* produces a string using only uppercase digits with no white spaqce).<br />
* If the string does not contain one or more pairs of hexadecimal digits
* then an exception is raised.
*/
- (id) initWithHexadecimalRepresentation: (NSString*)string; - (id) initWithHexadecimalRepresentation: (NSString*)string;
/**
* Creates an MD5 digest of the information stored in the receiver and
* returns it as an autoreleased 16 byte NSData object.<br />
* If you need to produce a digest of string information, you need to
* decide what character encoding is to be used and convert your string
* to a data object of that encoding type first using the
* [NSString-dataUsingEncoding:] method -
* <example>
* myDigest = [[myString dataUsingEncoding: NSUTF8StringEncoding] md5Digest];
* </example>
* If you need to use the digest in a human readable form, you will
* probably want it to be seen as 32 hexadecimal digits, and can do that
* using the -hexadecimalRepresentation method.
*/
- (NSData*) md5Digest; - (NSData*) md5Digest;
/**
* Decodes the source data from uuencoded and return the result.<br />
* Returns the encoded file name in namePtr if it is not null.
* Returns the encoded file mode in modePtr if it is not null.
*/
- (BOOL) uudecodeInto: (NSMutableData*)decoded - (BOOL) uudecodeInto: (NSMutableData*)decoded
name: (NSString**)namePtr name: (NSString**)namePtr
mode: (int*)modePtr; mode: (int*)modePtr;
/**
* Encode the source data to uuencoded.<br />
* Uses the supplied name as the filename in the encoded data,
* and says that the file mode is as specified.<br />
* If no name is supplied, uses <code>untitled</code> as the name.
*/
- (BOOL) uuencodeInto: (NSMutableData*)encoded - (BOOL) uuencodeInto: (NSMutableData*)encoded
name: (NSString*)name name: (NSString*)name
mode: (int)mode; mode: (int)mode;

View file

@ -29,6 +29,67 @@
#include <Foundation/NSFormatter.h> #include <Foundation/NSFormatter.h>
/**
* <p>Class for generating text representations of [NSDate]s and
* [NSCalendarDate]s, and for converting strings into instances of these
* objects. Note that [NSDate] and [NSCalendarDate] do contain some
* string conversion methods, but using this class provides more control
* over conversion.</p>
* <p>See the [NSFormatter] documentation for description of the basic methods
* for formatting and parsing that are available.</p>
* <p>The basic format of a format string uses "%" codes to represent
* components of the date. Thus, for example, <code>@"%b %d, %Y"</code>
* specifies strings similar to "June 18, 1991". The full list of codes is
* as follows:</p>
* <deflist>
* <term>%%</term>
* <desc>a '%' character</desc>
* <term>%a</term>
* <desc>abbreviated weekday name</desc>
* <term>%A</term>
* <desc>full weekday name</desc>
* <term>%b</term>
* <desc>abbreviated month name</desc>
* <term>%B</term>
* <desc>full month name</desc>
* <term>%c</term>
* <desc>shorthand for "%X %x", the locale format for date and time</desc>
* <term>%d</term>
* <desc>day of the month as a decimal number (01-31)</desc>
* <term>%e</term>
* <desc>same as %d but does not print the leading 0 for days 1 through 9 (unlike strftime(), does not print a leading space)</desc>
* <term>%F</term>
* <desc>milliseconds as a decimal number (000-999)</desc>
* <term>%H</term>
* <desc>hour based on a 24-hour clock as a decimal number (00-23)</desc>
* <term>%I</term>
* <desc>hour based on a 12-hour clock as a decimal number (01-12)</desc>
* <term>%j</term>
* <desc>day of the year as a decimal number (001-366)</desc>
* <term>%m</term>
* <desc>month as a decimal number (01-12)</desc>
* <term>%M</term>
* <desc>minute as a decimal number (00-59)</desc>
* <term>%p</term>
* <desc>AM/PM designation for the locale</desc>
* <term>%S</term>
* <desc>second as a decimal number (00-59)</desc>
* <term>%w</term>
* <desc>weekday as a decimal number (0-6), where Sunday is 0</desc>
* <term>%x</term>
* <desc>date using the date representation for the locale, including the time zone (produces different results from strftime())</desc>
* <term>%X</term>
* <desc>time using the time representation for the locale (produces different results from strftime())</desc>
* <term>%y</term>
* <desc>year without century (00-99)</desc>
* <term>%Y</term>
* <desc>year with century (such as 1990)</desc>
* <term>%Z</term>
* <desc>time zone name (such as Pacific Daylight Time; produces different results from strftime())</desc>
* <term>%z</term>
* <desc>time zone offset in hours and minutes from GMT (HHMM)</desc>
* </deflist>
*/
@interface NSDateFormatter : NSFormatter <NSCoding, NSCopying> @interface NSDateFormatter : NSFormatter <NSCoding, NSCopying>
{ {
NSString *_dateFormat; NSString *_dateFormat;
@ -36,11 +97,34 @@
} }
/* Initializing an NSDateFormatter */ /* Initializing an NSDateFormatter */
/**
* Initialize with given specifier string format. See class description for
* how to specify a format string. If flag is YES, string-to-object
* conversion will attempt to process strings as natural language dates, such
* as "yesterday", or "first Tuesday of next month" if straight format-based
* conversion fails.
*/
- (id) initWithDateFormat: (NSString *)format - (id) initWithDateFormat: (NSString *)format
allowNaturalLanguage: (BOOL)flag; allowNaturalLanguage: (BOOL)flag;
/* Determining Attributes */ /* Determining Attributes */
/**
* Returns whether initialized to support natural language formatting. If
* YES, string-to-object conversion will attempt to process strings as
* natural language dates, such as "yesterday", or "first Tuesday of next
* month" if straight format-based conversion fails.
*/
- (BOOL) allowsNaturalLanguage; - (BOOL) allowsNaturalLanguage;
/**
* Returns format string initialized with, specifying how dates are formatted,
* for object-to-string conversion, and how they are parsed, for
* string-to-object conversion. For example, <code>@"%b %d, %Y"</code>
* specifies strings similar to "June 18, 1991".
*/
- (NSString *) dateFormat; - (NSString *) dateFormat;
@end @end

View file

@ -220,8 +220,9 @@ GS_EXPORT BOOL NSDeallocateZombies;
</p> </p>
<p>NSProcess initialises a set of strings that are the names of active <p>NSProcess initialises a set of strings that are the names of active
debug levels using the '--GNU-Debug=...' command line argument. debug levels using the '--GNU-Debug=...' command line argument.
Each command-line argument of that form is removed from NSProcessInfos Each command-line argument of that form is removed from
list of arguments and the variable part (...) is added to the set. <code>NSProcessInfo</code>'s list of arguments and the variable part
(...) is added to the set.
This means that as far as the program proper is concerned, it is This means that as far as the program proper is concerned, it is
running with the same arguments as if debugging had not been enabled. running with the same arguments as if debugging had not been enabled.
</p> </p>
@ -233,7 +234,7 @@ GS_EXPORT BOOL NSDeallocateZombies;
<p>NSUserDefaults also adds debug levels from the array given by the <p>NSUserDefaults also adds debug levels from the array given by the
GNU-Debug key ... but these values will not take effect until the GNU-Debug key ... but these values will not take effect until the
+standardUserDefaults method is called ... so they are useless for +standardUserDefaults method is called ... so they are useless for
debugging NSUserDefaults itsself or for debugging any code executed debugging NSUserDefaults itself or for debugging any code executed
before the defaults system is used. before the defaults system is used.
</p> </p>
<p>To embed debug logging in your code you use the NSDebugLLog() or <p>To embed debug logging in your code you use the NSDebugLLog() or
@ -395,7 +396,7 @@ GS_EXPORT BOOL NSDeallocateZombies;
something that it not necessarily fatal or illegal, but looks like it something that it not necessarily fatal or illegal, but looks like it
might be a programming error. eg. attempting to remove 'nil' from an might be a programming error. eg. attempting to remove 'nil' from an
NSArray, which the Spec/documentation does not prohibit, but which a NSArray, which the Spec/documentation does not prohibit, but which a
well written progam should not be attempting (since an NSArray object well written program should not be attempting (since an NSArray object
cannot contain a 'nil'). cannot contain a 'nil').
</p> </p>
<p>NB. The 'warn=yes' option is understood by the GNUstep make package <p>NB. The 'warn=yes' option is understood by the GNUstep make package
@ -405,7 +406,7 @@ GS_EXPORT BOOL NSDeallocateZombies;
<p>To embed debug logging in your code you use the NSWarnLog() macro. <p>To embed debug logging in your code you use the NSWarnLog() macro.
</p> </p>
<p>As a convenience, there are two more logging macros you can use - <p>As a convenience, there are two more logging macros you can use -
NSWarnLog(), and NSWarnMLog(). NSWarnFLog(), and NSWarnMLog().
These are specifically for use in either functions or methods and These are specifically for use in either functions or methods and
prepend information about the file, line and either function or prepend information about the file, line and either function or
class/method in which the message was generated. class/method in which the message was generated.

View file

@ -50,7 +50,7 @@ typedef enum {
NSCalculationDivideByZero NSCalculationDivideByZero
} NSCalculationError; } NSCalculationError;
/* /**
* Give a precision of at least 38 decimal digits * Give a precision of at least 38 decimal digits
* requires 128 bits. * requires 128 bits.
*/ */
@ -59,6 +59,21 @@ typedef enum {
#define NSDecimalMaxDigit 38 #define NSDecimalMaxDigit 38
#define NSDecimalNoScale 128 #define NSDecimalNoScale 128
/**
* <p>Structure providing equivalent functionality, in conjunction with a set
* of functions, to the [NSDecimalNumber] class.</p>
<example>
typedef struct {
signed char exponent; // Signed exponent - -128 to 127
BOOL isNegative; // Is this negative?
BOOL validNumber; // Is this a valid number?
unsigned char length; // digits in mantissa.
unsigned char cMantissa[2*NSDecimalMaxDigit];
} NSDecimal;
</example>
* <p>Instances can be initialized using the NSDecimalFromString(NSString *)
* function.</p>
*/
typedef struct { typedef struct {
signed char exponent; /* Signed exponent - -128 to 127 */ signed char exponent; /* Signed exponent - -128 to 127 */
BOOL isNegative; /* Is this negative? */ BOOL isNegative; /* Is this negative? */

View file

@ -33,15 +33,87 @@
@class NSDecimalNumber; @class NSDecimalNumber;
/**
* This protocol encapsulates information about how an [NSDecimalNumber]
* should round and process exceptions. Usually you can just create objects
* of the [NSDecimalNumberHandler] class, which implements this protocol, but
* if you don't want to use that class you can create your own implementing
* it.
*/
@protocol NSDecimalNumberBehaviors @protocol NSDecimalNumberBehaviors
/**
* <p>Specifies behavior when, in the course of applying method to leftOperand
* and rightOperand, an [NSDecimalNumber] instance encounters given error.</p>
* <p>error has four possible constant values:</p>
* <deflist>
* <term><code>NSCalculationLossOfPrecision</code></term>
* <desc>The number can't be represented in 38 significant digits.</desc>
* <term><code>NSCalculationOverflow</code></term>
* <desc>The number is too large to represent.</desc>
* <term><code>NSCalculationUnderflow</code></term>
* <desc>The number is too small to represent.</desc>
* <term><code>NSCalculationDivideByZero</code></term>
* <desc>The caller tried to divide by 0.</desc>
* </deflist>
*
* <p>Behavior on error can be one of the following:</p>
* <list>
* <item>Raise an exception.</item>
* <item>Return nil. The calling method will return its value as though no
* error had occurred. If error is
* <code>NSCalculationLossOfPrecision</code>, method will return an
* imprecise value, constrained to 38 significant digits. If error is
* <code>NSCalculationUnderflow</code> or
* <code>NSCalculationOverflow</code>, method will return
* <code>NSDecimalNumber</code>'s <code>notANumber</code>. You shouldn't
* return nil if error is <code>NSDivideByZero</code>.
* </item>
* <item>Correct the error and return a valid <code>NSDecimalNumber</code>.
* The calling method will use this as its own return value.</item>
* </list>
*/
- (NSDecimalNumber*) exceptionDuringOperation: (SEL)method - (NSDecimalNumber*) exceptionDuringOperation: (SEL)method
error: (NSCalculationError)error error: (NSCalculationError)error
leftOperand: (NSDecimalNumber*)leftOperand leftOperand: (NSDecimalNumber*)leftOperand
rightOperand: (NSDecimalNumber*)rightOperand; rightOperand: (NSDecimalNumber*)rightOperand;
/**
* Specifies how [NSDecimalNumber]'s <code>decimalNumberBy...</code> methods
* round their return values. This should be set to one of the following
* constants:
* <deflist>
* <term><code>NSRoundDown</code></term>
* <desc>Always round down.</desc>
* <term><code>NSRoundUp</code></term>
* <desc>Always round up.</desc>
* <term><code>NSRoundPlain</code></term>
* <desc>Round to the closest possible return value. Halfway (e.g. .5)
* rounds up for positive numbers, down for negative (towards larger absolute
* value).</desc>
* <term><code>NSRoundBankers</code></term>
* <desc>Round to the closest possible return value, but halfway (e.g. .5)
* rounds towards possibility whose last digit is even.</desc>
* </deflist>
*/
- (NSRoundingMode) roundingMode; - (NSRoundingMode) roundingMode;
/**
* Specifies the precision of the values returned by [NSDecimalNumber]'s
* <code>decimalNumberBy...</code> methods, in terms of the number of
* digits allowed after the decimal point. This can be negative, implying
* that the precision should be, e.g., 100's, 1000's, etc.. For unlimited
* precision, set to <code>NSDecimalNoScale</code>.
*/
- (short) scale; - (short) scale;
@end @end
/**
* A utility class adopting [NSDecimalNumberBehaviors] protocol. Can be used
* to control [NSDecimalNumber] rounding and exception-handling behavior, by
* passing an instance as an argument to any [NSDecimalNumber] method ending
* with <code>...Behavior:</code>.
*/
@interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors> @interface NSDecimalNumberHandler : NSObject <NSDecimalNumberBehaviors>
{ {
NSRoundingMode _roundingMode; NSRoundingMode _roundingMode;
@ -52,7 +124,19 @@
BOOL _raiseOnDivideByZero; BOOL _raiseOnDivideByZero;
} }
/**
* Provides an instance implementing the default behavior for the
* [NSDecimalNumber] class. 38 decimal digits, rounded to closest return
* value (<code>NSRoundPlain</code>). Exceptions raised on overflow,
* underflow, and divide by zero.
*/
+ (id)defaultDecimalNumberHandler; + (id)defaultDecimalNumberHandler;
/**
* Constructor setting all behavior. (For more precise control over error
* handling, create your own class implementing the [NSDecimalNumberBehaviors]
* protocol.)
*/
+ (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode + (id)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode
scale:(short)scale scale:(short)scale
raiseOnExactness:(BOOL)raiseOnExactness raiseOnExactness:(BOOL)raiseOnExactness
@ -60,6 +144,11 @@
raiseOnUnderflow:(BOOL)raiseOnUnderflow raiseOnUnderflow:(BOOL)raiseOnUnderflow
raiseOnDivideByZero:(BOOL)raiseOnDivideByZero; raiseOnDivideByZero:(BOOL)raiseOnDivideByZero;
/**
* Initializor setting all behavior. (For more precise control over error
* handling, create your own class implementing the [NSDecimalNumberBehaviors]
* protocol.)
*/
- (id)initWithRoundingMode:(NSRoundingMode)roundingMode - (id)initWithRoundingMode:(NSRoundingMode)roundingMode
scale:(short)scale scale:(short)scale
raiseOnExactness:(BOOL)raiseOnExactness raiseOnExactness:(BOOL)raiseOnExactness
@ -68,67 +157,249 @@
raiseOnDivideByZero:(BOOL)raiseOnDivideByZero; raiseOnDivideByZero:(BOOL)raiseOnDivideByZero;
@end @end
/**
* <p>Class that implements a number of methods for performing decimal
* arithmetic to arbitrary precision. The behavior in terms of rounding
* choices and exception handling may be customized using the
* [NSDecimalNumberHandler] class, and defaults to
* [NSDecimalNumberHandler+defaultDecimalNumberHandler].</p>
*
* <p>Equivalent functionality to the <code>NSDecimalNumber</code> class may
* be accessed through functions, mostly named <code>NSDecimalXXX</code>,
* e.g., NSDecimalMin(). Both the class and the functions use a structure
* called <code>NSDecimal</code>.</p>
*
* <p>Note that instances of <code>NSDecimalNumber</code> are immutable.</p>
*/
@interface NSDecimalNumber : NSNumber <NSDecimalNumberBehaviors> @interface NSDecimalNumber : NSNumber <NSDecimalNumberBehaviors>
{ {
NSDecimal data; NSDecimal data;
} }
/**
* Returns the default rounding/precision/exception handling behavior, which
* is same as [NSDecimalNumberHandler+defaultDecimalNumberHandler] unless it
* has been explicitly set otherwise.
*/
+ (id <NSDecimalNumberBehaviors>)defaultBehavior; + (id <NSDecimalNumberBehaviors>)defaultBehavior;
/**
* Sets the default rounding/precision/exception handling behavior to the
* given behavior. If this is not called, behavior defaults to
* [NSDecimalNumberHandler+defaultDecimalNumberHandler].
*/
+ (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior; + (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Return maximum positive value that can be represented.
*/
+ (NSDecimalNumber *)maximumDecimalNumber; + (NSDecimalNumber *)maximumDecimalNumber;
/**
* Return minimum negative value (<em>not</em> the smallest positive value)
* that can be represented.
*/
+ (NSDecimalNumber *)minimumDecimalNumber; + (NSDecimalNumber *)minimumDecimalNumber;
/**
* Return a fixed value representing an NaN.
*/
+ (NSDecimalNumber *)notANumber; + (NSDecimalNumber *)notANumber;
/**
* Return a constant object with a value of one.
*/
+ (NSDecimalNumber *)one; + (NSDecimalNumber *)one;
/**
* Return a constant object with a value of zero.
*/
+ (NSDecimalNumber *)zero; + (NSDecimalNumber *)zero;
/**
* New instance with given value. Note an NSDecimal may be created using the
* function NSDecimalFromString().
*/
+ (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)decimal; + (NSDecimalNumber *)decimalNumberWithDecimal:(NSDecimal)decimal;
/**
* New instance by component. Note that the precision of this initializer is
* limited.
*/
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa + (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent exponent:(short)exponent
isNegative:(BOOL)isNegative; isNegative:(BOOL)isNegative;
/**
* New instance from string. Arbitrary precision is preserved, though calling
* one of the <code>decimalNumberBy...</code> methods will return a result
* constrained by the current <em><code>scale</code></em>. Number format
* is parsed according to current default locale.
*/
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString; + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString;
/**
* New instance from string. Arbitrary precision is preserved, though calling
* one of the <code>decimalNumberBy...</code> methods will return a result
* constrained by the current <em><code>scale</code></em>. Number format
* is parsed according to given locale.
*/
+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString + (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString
locale:(NSDictionary *)locale; locale:(NSDictionary *)locale;
/**
* Initialize with given value. Note an NSDecimal may be created using the
* function NSDecimalFromString().
*/
- (id)initWithDecimal:(NSDecimal)decimal; - (id)initWithDecimal:(NSDecimal)decimal;
/**
* Initialize by component. Note that the precision of this initializer is
* limited.
*/
- (id)initWithMantissa:(unsigned long long)mantissa - (id)initWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent exponent:(short)exponent
isNegative:(BOOL)flag; isNegative:(BOOL)flag;
/**
* Initialize from string. Arbitrary precision is preserved, though calling
* one of the <code>decimalNumberBy...</code> methods will return a result
* constrained by the current <em><code>scale</code></em>. Number format
* is parsed according to current default locale.
*/
- (id)initWithString:(NSString *)numberValue; - (id)initWithString:(NSString *)numberValue;
/**
* Initialize from string. Arbitrary precision is preserved, though calling
* one of the <code>decimalNumberBy...</code> methods will return a result
* constrained by the current <em><code>scale</code></em>. Number format
* is parsed according to given locale.
*/
- (id)initWithString:(NSString *)numberValue - (id)initWithString:(NSString *)numberValue
locale:(NSDictionary *)locale; locale:(NSDictionary *)locale;
/**
* Returns the Objective-C type (<code>@encode(...)</code> compatible) of the
* data contained <code>NSDecimalNumber</code>, which is by convention "d"
* (for double), even though this is not strictly accurate.
*/
- (const char *)objCType; - (const char *)objCType;
/**
* Return underlying value as an <code>NSDecimal</code> structure.
*/
- (NSDecimal)decimalValue; - (NSDecimal)decimalValue;
/**
* Returns string version of number formatted accordng to locale.
*/
- (NSString *)descriptionWithLocale:(NSDictionary *)locale; - (NSString *)descriptionWithLocale:(NSDictionary *)locale;
/**
* Returns underlying value as a <code>double</code>, which may be an
* approximation if precision greater than the default of 38.
*/
- (double)doubleValue; - (double)doubleValue;
/**
* Compares with other number, returning less, greater, or equal.
*/
- (NSComparisonResult)compare:(NSNumber *)decimalNumber; - (NSComparisonResult)compare:(NSNumber *)decimalNumber;
/**
* Adds self to decimalNumber and returns new result, using +defaultBehavior
* for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber; - (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
/**
* Adds self to decimalNumber and returns new result, using given behavior
* for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber - (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber
withBehavior:(id<NSDecimalNumberBehaviors>)behavior; withBehavior:(id<NSDecimalNumberBehaviors>)behavior;
/**
* Divides self by decimalNumber and returns new result, using +defaultBehavior
* for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber; - (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
/**
* Divides self by decimalNumber and returns new result, using given behavior
* for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber - (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior; withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Multiplies self by decimalNumber and returns new result, using
* +defaultBehavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber; - (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
/**
* Multiplies self by decimalNumber and returns new result, using given
* behavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber - (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior; withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Multiplies self by given power of 10 and returns new result, using
* +defaultBehavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power; - (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
/**
* Multiplies self by given power of 10 and returns new result, using given
* behavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power - (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power
withBehavior:(id <NSDecimalNumberBehaviors>)behavior; withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Raises self to given positive integer power and returns new result, using
* +defaultBehavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power; - (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power;
/**
* Raises self to given positive integer power and returns new result, using
* given behavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power - (NSDecimalNumber *)decimalNumberByRaisingToPower:(unsigned)power
withBehavior:(id <NSDecimalNumberBehaviors>)behavior; withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Subtracts decimalNumber from self and returns new result, using
* +defaultBehavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber; - (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
/**
* Subtracts decimalNumber from self and returns new result, using given
* behavior for rounding/precision/error handling.
*/
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber - (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber
withBehavior:(id <NSDecimalNumberBehaviors>)behavior; withBehavior:(id <NSDecimalNumberBehaviors>)behavior;
/**
* Returns rounded version of underlying decimal.
*/
- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(id <NSDecimalNumberBehaviors>)behavior;
@end @end
/**
* Interface for obtaining an NSDecimalNumber value from an ordinary
* NSNumber.
*/
@interface NSNumber (NSDecimalNumber) @interface NSNumber (NSDecimalNumber)
/**
* Obtaining an NSDecimalNumber version of an ordinary NSNumber.
*/
- (NSDecimal) decimalValue; - (NSDecimal) decimalValue;
@end @end

View file

@ -58,8 +58,9 @@ GS_EXPORT NSString* const NSOSStatusErrorDomain;
GS_EXPORT NSString* const NSPOSIXErrorDomain; GS_EXPORT NSString* const NSPOSIXErrorDomain;
/** /**
* Error information class * Error information class.
*/ */
// TODO: document what this is for, especially since it's not in OS X
@interface NSError : NSObject <NSCopying, NSCoding> @interface NSError : NSObject <NSCopying, NSCoding>
{ {
@private @private
@ -89,7 +90,7 @@ GS_EXPORT NSString* const NSPOSIXErrorDomain;
/** <init /> /** <init />
* Initialises the receiver using the supplied domain, code, and info.<br /> * Initialises the receiver using the supplied domain, code, and info.<br />
* The domain musat be non-nil. * The domain must be non-nil.
*/ */
- (id) initWithDomain: (NSString*)aDomain - (id) initWithDomain: (NSString*)aDomain
code: (int)aCode code: (int)aCode
@ -105,10 +106,11 @@ GS_EXPORT NSString* const NSPOSIXErrorDomain;
/** /**
* Return the user info for this instance (or nil if none is set)<br /> * Return the user info for this instance (or nil if none is set)<br />
* The NSLocalizedDescriptionKey should locate a human readable description * The <code>NSLocalizedDescriptionKey</code> should locate a human readable
* in the dictionary.<br /> * description in the dictionary.<br />
* The NSUnderlyingErrorKey key should locate an NSError instance if an * The <code>NSUnderlyingErrorKey</code> key should locate an
* error is available describing any underlying problem.<br /> * <code>NSError</code> instance if an error is available describing any
* underlying problem.<br />
*/ */
- (NSDictionary*) userInfo; - (NSDictionary*) userInfo;
@end @end

View file

@ -145,7 +145,7 @@ GS_EXPORT NSString * const NSFileHandleOperationException;
- (BOOL) writeInProgress; - (BOOL) writeInProgress;
@end @end
/* /**
* Where OpenSSL is available, you can use the subclass returned by +sslClass * Where OpenSSL is available, you can use the subclass returned by +sslClass
* to handle SSL connections. * to handle SSL connections.
* The -sslAccept method is used to do SSL handlshake and start an * The -sslAccept method is used to do SSL handlshake and start an

View file

@ -31,23 +31,88 @@
@class NSString, NSAttributedString, NSDictionary; @class NSString, NSAttributedString, NSDictionary;
/**
* This abstract class defines the interface for classes that support
* interconversion between strings and objects of various types. GNUstep
* provides two concrete implementations of this class: [NSDateFormatter]
* and [NSNumberFormatter]. Others may be implemented for specialized
* applications.
*/
@interface NSFormatter : NSObject <NSCopying, NSCoding> @interface NSFormatter : NSObject <NSCopying, NSCoding>
{ {
} }
/**
* This method calls [-stringForObjectValue:] then marks up the string with
* attributes if it should be displayed specially. For example, in an
* application you may want to display out-of-range dates or numbers in
* italics. This is an optional method and may return nil to indicate that
* an attributed string is not provided.
*/
- (NSAttributedString*) attributedStringForObjectValue: (id)anObject - (NSAttributedString*) attributedStringForObjectValue: (id)anObject
withDefaultAttributes: (NSDictionary*)attr; withDefaultAttributes: (NSDictionary*)attr;
/**
* For use in applications where user interactively edits a string. If the
* version of the string for editing purposes should look different from the
* string displayed (returned by [-stringForObjectValue:] or
* [-attributedStringForObjectValue:withDefaultAttributes:]), return that
* here. For example, the edited string may contain formatting codes or
* similar that are not displayed in the final string. The default
* implementation simply returns [-stringForObjectValue:].
*/
- (NSString*) editingStringForObjectValue: (id)anObject; - (NSString*) editingStringForObjectValue: (id)anObject;
/**
* Primary method for converting a string to an object through parsing.
* anObject and error are output parameters; you should allocate memory for
* one pointer each for the variables passed into these methods. The
* returned object will have been created through <code>alloc-init</code>.
* If there is a problem with conversion, a constant-string description of
* what went wrong is returned through error, and NO is returned, otherwise
* YES.
*/
- (BOOL) getObjectValue: (id*)anObject - (BOOL) getObjectValue: (id*)anObject
forString: (NSString*)string forString: (NSString*)string
errorDescription: (NSString**)error; errorDescription: (NSString**)error;
/**
* Checks whether partialString <em>could</em>, if it were completed, be
* parsed into a valid object. newString and error are output parameters;
* you should allocate memory for one pointer each for the variables passed
* into these methods. This method is set up to be called after every
* keystroke during user editing. If it returns NO, it optionally returns
* newString to replace what the user was editing; if it doesn't, the editor
* should delete the last character the user typed.
*/
- (BOOL) isPartialStringValid: (NSString*)partialString - (BOOL) isPartialStringValid: (NSString*)partialString
newEditingString: (NSString**)newString newEditingString: (NSString**)newString
errorDescription: (NSString**)error; errorDescription: (NSString**)error;
/**
* Checks whether a change to a string leaves it a valid string that, if it
* were completed, could be parsed into a valid object. origString contains
* the string before the proposed change, and origSelRange contains the range
* that is updated in the proposed change. partialStringPtr contains the new
* string to validate and proposedSelRangePtr holds the selection range that
* will be used if the string is accepted or replaced. Basically, this method
* returns YES if partialStringPtr is valid, otherwise NO and may replace
* partialStringPtr and proposedSelectedRange with improved values, and may
* report the reason in error.
*/
- (BOOL) isPartialStringValid: (NSString**)partialStringPtr - (BOOL) isPartialStringValid: (NSString**)partialStringPtr
proposedSelectedRange: (NSRange*)proposedSelRangePtr proposedSelectedRange: (NSRange*)proposedSelRangePtr
originalString: (NSString*)origString originalString: (NSString*)origString
originalSelectedRange: (NSRange)originalSelRangePtr originalSelectedRange: (NSRange)originalSelRangePtr
errorDescription: (NSString**)error; errorDescription: (NSString**)error;
/**
* Primary method for converting an object to a string through formatting.
* Object will be converted to string according to the formatter's
* implementation and init parameters. There is no default handling if the
* class of anObject is not what the formatter expects, and usually nil
* will be returned in this case.
*/
- (NSString*) stringForObjectValue: (id)anObject; - (NSString*) stringForObjectValue: (id)anObject;
@end @end

View file

@ -46,7 +46,12 @@
#define GS_DEFINED_MIN #define GS_DEFINED_MIN
#endif #endif
/* Point definition. */ /**
<example>{
float x;
float y;
}</example>
<p>Represents a 2-d cartesian position.</p> */
typedef struct _NSPoint NSPoint; typedef struct _NSPoint NSPoint;
struct _NSPoint struct _NSPoint
{ {
@ -55,11 +60,17 @@ struct _NSPoint
}; };
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
/** Array of NSPoint structs. */
typedef NSPoint *NSPointArray; typedef NSPoint *NSPointArray;
typedef NSPoint *NSPointPointer; typedef NSPoint *NSPointPointer;
#endif #endif
/* Rectangle sizes. */ /**
<example>{
float width;
float height;
}</example>
<p>Floating point rectangle size.</p> */
typedef struct _NSSize NSSize; typedef struct _NSSize NSSize;
struct _NSSize struct _NSSize
{ {
@ -72,7 +83,13 @@ typedef NSSize *NSSizeArray;
typedef NSSize *NSSizePointer; typedef NSSize *NSSizePointer;
#endif #endif
/* Rectangle. */ /**
<example>{
NSPoint origin;
NSSize size;
}</example>
<p>Rectangle.</p> */
typedef struct _NSRect NSRect; typedef struct _NSRect NSRect;
struct _NSRect struct _NSRect
{ {
@ -81,6 +98,7 @@ struct _NSRect
}; };
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
/** Array of NSPoint structs. */
typedef NSRect *NSRectArray; typedef NSRect *NSRectArray;
typedef NSRect *NSRectPointer; typedef NSRect *NSRectPointer;
#endif #endif
@ -95,8 +113,11 @@ enum _NSRectEdge
NSMaxYEdge NSMaxYEdge
}; };
/** Point at 0,0 */
static const NSPoint NSZeroPoint __attribute__((unused)); /* Zero point. */ static const NSPoint NSZeroPoint __attribute__((unused)); /* Zero point. */
/** Zero-size rectangle at 0,0 */
static const NSRect NSZeroRect __attribute__((unused)); /* Zero rectangle. */ static const NSRect NSZeroRect __attribute__((unused)); /* Zero rectangle. */
/** Zero size */
static const NSSize NSZeroSize __attribute__((unused)); /* Zero size. */ static const NSSize NSZeroSize __attribute__((unused)); /* Zero size. */
/**** Function Prototypes ****************************************************/ /**** Function Prototypes ****************************************************/

View file

@ -47,25 +47,32 @@ typedef void* NSHashTable;
*/ */
typedef struct { void *map; void *node; size_t bucket; } NSHashEnumerator; typedef struct { void *map; void *node; size_t bucket; } NSHashEnumerator;
/** Callback functions. <br />*/ /** Callback functions for an NSHashTable. See NSCreateHashTable() . <br />*/
typedef struct _NSHashTableCallBacks typedef struct _NSHashTableCallBacks
{ {
/** hash ... Hashing function. NOTE: Elements with equal values must have /** <code>unsigned int (*hash)(NSHashTable *, const void *)</code> ...
* equal hash function values. <br />*/ * Hashing function. NOTE: Elements with equal values must have equal hash
* function values. The default if NULL uses the pointer addresses
* directly. <br/>*/
unsigned int (*hash)(NSHashTable *, const void *); unsigned int (*hash)(NSHashTable *, const void *);
/** isEqual ... Comparison function. <br />*/ /** <code>BOOL (*isEqual)(NSHashTable *, const void *, const void *)</code>
* ... Comparison function. The default if NULL uses '<code>==</code>'.
* <br/>*/
BOOL (*isEqual)(NSHashTable *, const void *, const void *); BOOL (*isEqual)(NSHashTable *, const void *, const void *);
/** retain ... Retaining function called when adding elements /** <code>void (*retain)(NSHashTable *, const void *)</code> ...
* to the table. <br />*/ * Retaining function called when adding elements to the table.
* The default if NULL is a no-op (no reference counting). <br/> */
void (*retain)(NSHashTable *, const void *); void (*retain)(NSHashTable *, const void *);
/** release ... Releasing function called when a data element is /** <code>void (*release)(NSHashTable *, void *)</code> ... Releasing
* removed from the table. <br />*/ * function called when a data element is removed from the table.
* The default if NULL is a no-op (no reference counting).<br/>*/
void (*release)(NSHashTable *, void *); void (*release)(NSHashTable *, void *);
/** describe ... Description function. <br />*/ /** <code>NSString *(*describe)(NSHashTable *, const void *)</code> ...
* Description function. The default if NULL prints boilerplate. <br /> */
NSString *(*describe)(NSHashTable *, const void *); NSString *(*describe)(NSHashTable *, const void *);
} NSHashTableCallBacks; } NSHashTableCallBacks;

View file

@ -27,6 +27,10 @@
@class NSString, NSArray, NSSet; @class NSString, NSArray, NSSet;
/**
* Instances of this class encapsulate host information. Constructors based
* on host name or numeric address are provided.
*/
@interface NSHost : NSObject @interface NSHost : NSObject
{ {
@private @private
@ -34,51 +38,82 @@
NSSet *_addresses; NSSet *_addresses;
} }
/* /**
* Get a host object. Hosts are cached for efficiency. Only one * Get current host object.
* shared instance of a host will exist.
* Addresses must be "Dotted Decimal" strings, e.g.
*
* NSHost aHost = [NSHost hostWithAddress:@"192.42.172.1"];
*
*/ */
+ (NSHost*) currentHost; + (NSHost*) currentHost;
/**
* Get info for host with given DNS name.
*/
+ (NSHost*) hostWithName: (NSString*)name; + (NSHost*) hostWithName: (NSString*)name;
/**
* Get a host object. Hosts are cached for efficiency. The address
* must be an IPV4 "dotted decimal" string, e.g.
<example>
NSHost aHost = [NSHost hostWithAddress:@"192.42.172.1"];
</example>
*/
+ (NSHost*) hostWithAddress: (NSString*)address; + (NSHost*) hostWithAddress: (NSString*)address;
/* /**
* Host cache management * Set host cache management.
* If enabled, only one object representing each host will be created, and * If enabled, only one object representing each host will be created, and
* a shared instance will be returned by all methods that return a host. * a shared instance will be returned by all methods that return a host.
*/ */
+ (void) setHostCacheEnabled: (BOOL)flag; + (void) setHostCacheEnabled: (BOOL)flag;
/**
* Return host cache management.
* If enabled, only one object representing each host will be created, and
* a shared instance will be returned by all methods that return a host.
*/
+ (BOOL) isHostCacheEnabled; + (BOOL) isHostCacheEnabled;
/**
* Clear cache of host info instances.
*/
+ (void) flushHostCache; + (void) flushHostCache;
/* /**
* Compare hosts * Compare hosts.
* Hosts are equal if they share at least one address * Hosts are equal if they share at least one address
*/ */
- (BOOL) isEqualToHost: (NSHost*) aHost; - (BOOL) isEqualToHost: (NSHost*) aHost;
/* /**
* Host names. * Return host name. Chosen arbitrarily if a host has more than one.
* "name" will return one name (arbitrarily chosen) if a host has several.
*/ */
- (NSString*) name; - (NSString*) name;
/**
* Return all known names for host.
*/
- (NSArray*) names; - (NSArray*) names;
/* /**
* Host addresses. * Return host address in "dotted decimal" notation, e.g. "192.42.172.1".
* Addresses are represented as "Dotted Decimal" strings, e.g. @"192.42.172.1" * Chosen arbitrarily if a host has more than one.
* "address" will return one address (arbitrarily chosen) if there are several.
*/ */
- (NSString*) address; - (NSString*) address;
/**
* Return all known addresses for host in "dotted decimal" notation,
* e.g. "192.42.172.1".
*/
- (NSArray*) addresses; - (NSArray*) addresses;
@end @end
/**
* Adds synonym for +currentHost.
*/
@interface NSHost (GNUstep) @interface NSHost (GNUstep)
/**
* Synonym for +currentHost.
*/
+ (NSHost*) localHost; /* All local IP addresses */ + (NSHost*) localHost; /* All local IP addresses */
@end @end

View file

@ -37,7 +37,12 @@
@class NSMutableDictionary, NSMutableData, NSData, NSString; @class NSMutableDictionary, NSMutableData, NSData, NSString;
/** /**
* Keyed archiving class * Implements <em>keyed</em> archiving of object graphs. This archiver
* should be used instead of [NSArchiver] for new implementations. Classes
* implementing [NSCoding] should check the [NSCoder-allowsKeyedCoding]
* method and if the response is YES, encode/decode their fields using the
* <code>...forKey:</code> [NSCoder] methods, which provide for more robust
* forwards and backwards compatibility.
*/ */
@interface NSKeyedArchiver : NSCoder @interface NSKeyedArchiver : NSCoder
{ {
@ -100,16 +105,53 @@
*/ */
- (id) delegate; - (id) delegate;
/**
* Encodes aBool and associates the encoded value with aKey.
*/
- (void) encodeBool: (BOOL)aBool forKey: (NSString*)aKey; - (void) encodeBool: (BOOL)aBool forKey: (NSString*)aKey;
/**
* Encodes the data of the specified length and pointed to by aPointer,
* and associates the encoded value with aKey.
*/
- (void) encodeBytes: (const uint8_t*)aPointer - (void) encodeBytes: (const uint8_t*)aPointer
length: (unsigned)length length: (unsigned)length
forKey: (NSString*)aKey; forKey: (NSString*)aKey;
/**
* Encodes anObject and associates the encoded value with aKey, but only
* if anObject has already been encoded using -encodeObject:forKey:
*/
- (void) encodeConditionalObject: (id)anObject forKey: (NSString*)aKey; - (void) encodeConditionalObject: (id)anObject forKey: (NSString*)aKey;
/**
* Encodes aDouble and associates the encoded value with aKey.
*/
- (void) encodeDouble: (double)aDouble forKey: (NSString*)aKey; - (void) encodeDouble: (double)aDouble forKey: (NSString*)aKey;
/**
* Encodes aFloat and associates the encoded value with aKey.
*/
- (void) encodeFloat: (float)aFloat forKey: (NSString*)aKey; - (void) encodeFloat: (float)aFloat forKey: (NSString*)aKey;
/**
* Encodes anInteger and associates the encoded value with aKey.
*/
- (void) encodeInt: (int)anInteger forKey: (NSString*)aKey; - (void) encodeInt: (int)anInteger forKey: (NSString*)aKey;
/**
* Encodes anInteger and associates the encoded value with aKey.
*/
- (void) encodeInt32: (int32_t)anInteger forKey: (NSString*)aKey; - (void) encodeInt32: (int32_t)anInteger forKey: (NSString*)aKey;
/**
* Encodes anInteger and associates the encoded value with aKey.
*/
- (void) encodeInt64: (int64_t)anInteger forKey: (NSString*)aKey; - (void) encodeInt64: (int64_t)anInteger forKey: (NSString*)aKey;
/**
* Encodes anObject and associates the encoded value with aKey.
*/
- (void) encodeObject: (id)anObject forKey: (NSString*)aKey; - (void) encodeObject: (id)anObject forKey: (NSString*)aKey;
/** /**
@ -159,7 +201,12 @@
/** /**
* Keyed unarchiving class. * Implements <em>keyed</em> unarchiving of object graphs. The keyed archiver
* should be used instead of [NSArchiver] for new implementations. Classes
* implementing [NSCoding] should check the [NSCoder-allowsKeyedCoding]
* method and if the response is YES, encode/decode their fields using the
* <code>...forKey:</code> [NSCoder] methods, which provide for more robust
* forwards and backwards compatibility.
*/ */
@interface NSKeyedUnarchiver : NSCoder @interface NSKeyedUnarchiver : NSCoder
{ {
@ -182,29 +229,132 @@
NSZone *_zone; /* Zone for allocating objs. */ NSZone *_zone; /* Zone for allocating objs. */
} }
/**
* Returns class substituted for class name specified by aString when
* encountered in the archive being decoded from, or nil if there is no
* specific translation mapping. Each instance also maintains a translation
* map, which is searched first for a match during decoding.
*/
+ (Class) classForClassName: (NSString*)aString; + (Class) classForClassName: (NSString*)aString;
/**
* Sets class substituted for class name specified by aString when
* encountered in the archive being decoded from, or nil if there is no
* specific translation mapping. Each instance also maintains a translation
* map, which is searched first for a match during decoding.
*/
+ (void) setClass: (Class)aClass forClassName: (NSString*)aString; + (void) setClass: (Class)aClass forClassName: (NSString*)aString;
/**
* Decodes from byte array in data and returns resulting root object.
*/
+ (id) unarchiveObjectWithData: (NSData*)data; + (id) unarchiveObjectWithData: (NSData*)data;
/**
* Decodes from file contents at aPath and returns resulting root object.
*/
+ (id) unarchiveObjectWithFile: (NSString*)aPath; + (id) unarchiveObjectWithFile: (NSString*)aPath;
/**
* Returns class substituted for class name specified by aString when
* encountered in the archive being decoded from, or nil if there is no
* specific translation mapping. The class as a whole also maintains a
* translation map, which is searched on decoding if no match found here.
*/
- (Class) classForClassName: (NSString*)aString; - (Class) classForClassName: (NSString*)aString;
/**
* Sets class substituted for class name specified by aString when
* encountered in the archive being decoded from, or nil if there is no
* specific translation mapping. Each instance also maintains a translation
* map, which is searched first for a match during decoding.
*/
- (BOOL) containsValueForKey: (NSString*)aKey; - (BOOL) containsValueForKey: (NSString*)aKey;
/**
* Sets class substituted for class name specified by aString when
* encountered in the archive being decoded from, or nil if there is no
* specific translation mapping. Each instance also maintains a translation
* map, which is searched first for a match during decoding.
*/
- (void) setClass: (Class)aClass forClassName: (NSString*)aString;
/**
* Returns a boolean value associated with aKey. This value must previously
* have been encoded using -encodeBool:forKey:
*/
- (BOOL) decodeBoolForKey: (NSString*)aKey; - (BOOL) decodeBoolForKey: (NSString*)aKey;
/**
* Returns a pointer to a byte array associated with aKey.<br />
* Returns the length of the data in aLength.<br />
* This value must previously have been encoded using
* -encodeBytes:length:forKey:
*/
- (const uint8_t*) decodeBytesForKey: (NSString*)aKey - (const uint8_t*) decodeBytesForKey: (NSString*)aKey
returnedLength: (unsigned*)length; returnedLength: (unsigned*)length;
- (double) decodeDoubleForKey: (NSString*)aKey;
- (float) decodeFloatForKey: (NSString*)aKey;
- (int) decodeIntForKey: (NSString*)aKey;
- (int32_t) decodeInt32ForKey: (NSString*)aKey;
- (int64_t) decodeInt64ForKey: (NSString*)aKey;
- (id) decodeObjectForKey: (NSString*)aKey;
/** /**
* returns the delegate of the unarchiver. * Returns a double value associated with aKey. This value must previously
* have been encoded using -encodeDouble:forKey: or -encodeFloat:forKey:
*/
- (double) decodeDoubleForKey: (NSString*)aKey;
/**
* Returns a float value associated with aKey. This value must previously
* have been encoded using -encodeFloat:forKey: or -encodeDouble:forKey:<br />
* Precision may be lost (or an exception raised if the value will not fit
* in a float) if the value was encoded using -encodeDouble:forKey:,
*/
- (float) decodeFloatForKey: (NSString*)aKey;
/**
* Returns an integer value associated with aKey. This value must previously
* have been encoded using -encodeInt:forKey:, -encodeInt32:forKey:, or
* -encodeInt64:forKey:.<br />
* An exception will be raised if the value does not fit in an integer.
*/
- (int) decodeIntForKey: (NSString*)aKey;
/**
* Returns a 32-bit integer value associated with aKey. This value must
* previously have been encoded using -encodeInt:forKey:,
* -encodeInt32:forKey:, or -encodeInt64:forKey:.<br />
* An exception will be raised if the value does not fit in a 32-bit integer.
*/
- (int32_t) decodeInt32ForKey: (NSString*)aKey;
/**
* Returns a 64-bit integer value associated with aKey. This value must
* previously have been encoded using -encodeInt:forKey:,
* -encodeInt32:forKey:, or -encodeInt64:forKey:.
*/
- (int64_t) decodeInt64ForKey: (NSString*)aKey;
/**
* Returns an object value associated with aKey. This value must
* previously have been encoded using -encodeObject:forKey: or
* -encodeConditionalObject:forKey:
*/
- (id) decodeObjectForKey: (NSString*)aKey;
/**
* Returns the delegate of the unarchiver.
*/ */
- (id) delegate; - (id) delegate;
/**
* Tells receiver that you are done retrieving from archive, so the delegate
* should be allowed to perform close-up operations.
*/
- (void) finishDecoding; - (void) finishDecoding;
/**
* Prepare to read data from key archive (created by [NSKeyedArchiver]).
* Be sure to call -finishDecoding when done.
*/
- (id) initForReadingWithData: (NSData*)data; - (id) initForReadingWithData: (NSData*)data;
- (void) setClass: (Class)aClass forClassName: (NSString*)aString;
/** /**
* Sets the receivers delegate. The delegate should conform to the * Sets the receivers delegate. The delegate should conform to the
* NSObject(NSKeyedUnarchiverDelegate) informal protocol.<br /> * NSObject(NSKeyedUnarchiverDelegate) informal protocol.<br />
@ -215,10 +365,17 @@
@end @end
/**
* Internal methods. Do not use.
*/
@interface NSKeyedArchiver (Internal) @interface NSKeyedArchiver (Internal)
- (void) _encodeArrayOfObjects: (NSArray*)anArray forKey: (NSString*)aKey; - (void) _encodeArrayOfObjects: (NSArray*)anArray forKey: (NSString*)aKey;
- (void) _encodePropertyList: (id)anObject forKey: (NSString*)aKey; - (void) _encodePropertyList: (id)anObject forKey: (NSString*)aKey;
@end @end
/**
* Internal methods. Do not use.
*/
@interface NSKeyedUnarchiver (Internal) @interface NSKeyedUnarchiver (Internal)
- (id) _decodeArrayOfObjectsForKey: (NSString*)aKey; - (id) _decodeArrayOfObjectsForKey: (NSString*)aKey;
- (id) _decodePropertyListForKey: (NSString*)aKey; - (id) _decodePropertyListForKey: (NSString*)aKey;
@ -231,7 +388,7 @@ GS_EXPORT NSString * const NSInvalidUnarchiveOperationException;
/** /**
* Informal protocol implemented by delegates of [NSKeyedArchiver] * Informal protocol implemented by delegates of [NSKeyedArchiver].
*/ */
@interface NSObject (NSKeyedArchiverDelegate) @interface NSObject (NSKeyedArchiverDelegate)
@ -277,7 +434,7 @@ willReplaceObject: (id)anObject
/** /**
* Informal protocol implemented by delegates of [NSKeyedUnarchiver] * Informal protocol implemented by delegates of [NSKeyedUnarchiver].
*/ */
@interface NSObject (NSKeyedUnarchiverDelegate) @interface NSObject (NSKeyedUnarchiverDelegate)
@ -325,7 +482,7 @@ willReplaceObject: (id)anObject
/** /**
* Methods by which a class may control its archiving by the NSKeyedArchiver * Methods by which a class may control its archiving by the [NSKeyedArchiver].
*/ */
@interface NSObject (NSKeyedArchiverObjectSubstitution) @interface NSObject (NSKeyedArchiverObjectSubstitution)
@ -351,6 +508,10 @@ willReplaceObject: (id)anObject
@end @end
/**
* Methods by which a class may control its unarchiving by the
* [NSKeyedArchiver].
*/
@interface NSObject (NSKeyedUnarchiverObjectSubstitution) @interface NSObject (NSKeyedUnarchiverObjectSubstitution)
/** /**
@ -363,34 +524,37 @@ willReplaceObject: (id)anObject
@end @end
/**
* Methods for encoding/decoding points, rectangles, and sizes.
*/
@interface NSCoder (NSGeometryKeyedCoding) @interface NSCoder (NSGeometryKeyedCoding)
/** /**
* Encodes an NSPoint object. * Encodes an <code>NSPoint</code> object.
*/ */
- (void) encodePoint: (NSPoint)aPoint forKey: (NSString*)aKey; - (void) encodePoint: (NSPoint)aPoint forKey: (NSString*)aKey;
/** /**
* Encodes an NSRect object. * Encodes an <code>NSRect</code> object.
*/ */
- (void) encodeRect: (NSRect)aRect forKey: (NSString*)aKey; - (void) encodeRect: (NSRect)aRect forKey: (NSString*)aKey;
/** /**
* Encodes an NSSize object. * Encodes an <code>NSSize</code> object.
*/ */
- (void) encodeSize: (NSSize)aSize forKey: (NSString*)aKey; - (void) encodeSize: (NSSize)aSize forKey: (NSString*)aKey;
/** /**
* Decodes an NSPoint object. * Decodes an <code>NSPoint</code> object.
*/ */
- (NSPoint) decodePointForKey: (NSString*)aKey; - (NSPoint) decodePointForKey: (NSString*)aKey;
/** /**
* Decodes an NSRect object. * Decodes an <code>NSRect</code> object.
*/ */
- (NSRect) decodeRectForKey: (NSString*)aKey; - (NSRect) decodeRectForKey: (NSString*)aKey;
/** /**
* Decodes an NSSize object. * Decodes an <code>NSSize</code> object.
*/ */
- (NSSize) decodeSizeForKey: (NSString*)aKey; - (NSSize) decodeSizeForKey: (NSString*)aKey;
@end @end

View file

@ -33,19 +33,25 @@
#include <Foundation/NSObject.h> #include <Foundation/NSObject.h>
/* /**
* NSLocking protocol * Protocol defining lock and unlock operations.
*/ */
@protocol NSLocking @protocol NSLocking
/**
* Block until acquiring lock.
*/
- (void) lock; - (void) lock;
/**
* Relinquish lock.
*/
- (void) unlock; - (void) unlock;
@end @end
/* /**
* NSLock class * Simplest lock for protecting critical sections of code.
* Simplest lock for protecting critical sections of code
*/ */
@interface NSLock : NSObject <NSLocking, GCFinalization> @interface NSLock : NSObject <NSLocking, GCFinalization>
{ {
@ -53,17 +59,32 @@
void *_mutex; void *_mutex;
} }
/**
* Try to acquire lock and return immediately, YES if succeeded, NO if not.
*/
- (BOOL) tryLock; - (BOOL) tryLock;
/**
* Try to acquire lock and return before limit, YES if succeeded, NO if not.
*/
- (BOOL) lockBeforeDate: (NSDate*)limit; - (BOOL) lockBeforeDate: (NSDate*)limit;
/**
* Block until acquiring lock.
*/
- (void) lock; - (void) lock;
/**
* Relinquish lock.
*/
- (void) unlock; - (void) unlock;
@end @end
/* /**
* NSConditionLock * Lock that allows user to request it only when an internal integer
* Allows locking and unlocking to be based upon a condition * condition is equal to a particular value. The condition is set on
* initialization and whenever the lock is relinquished.
*/ */
@interface NSConditionLock : NSObject <NSLocking, GCFinalization> @interface NSConditionLock : NSObject <NSLocking, GCFinalization>
{ {
@ -73,39 +94,74 @@
int _condition_value; int _condition_value;
} }
/* /**
* Initialize lock with condition * Initialize lock with given condition.
*/ */
- (id) initWithCondition: (int)value; - (id) initWithCondition: (int)value;
/* /**
* Return the current condition of the lock * Return the current condition of the lock.
*/ */
- (int) condition; - (int) condition;
/* /*
* Acquiring and release the lock * Acquiring and releasing the lock.
*/
/**
* Acquire lock when it is available and the internal condition is equal to
* value. Blocks until this occurs.
*/ */
- (void) lockWhenCondition: (int)value; - (void) lockWhenCondition: (int)value;
/**
* Relinquish the lock, setting internal condition to value.
*/
- (void) unlockWithCondition: (int)value; - (void) unlockWithCondition: (int)value;
/**
* Try to acquire lock regardless of condition and return immediately, YES if
* succeeded, NO if not.
*/
- (BOOL) tryLock; - (BOOL) tryLock;
/**
* Try to acquire lock if condition is equal to value and return immediately
* in any case, YES if succeeded, NO if not.
*/
- (BOOL) tryLockWhenCondition: (int)value; - (BOOL) tryLockWhenCondition: (int)value;
/* /*
* Acquiring the lock with a date condition * Acquiring the lock with a date condition.
*/
/**
* Try to acquire lock and return before limit, YES if succeeded, NO if not.
*/ */
- (BOOL) lockBeforeDate: (NSDate*)limit; - (BOOL) lockBeforeDate: (NSDate*)limit;
/**
* Try to acquire lock, when internal condition is equal to condition_to_meet,
* and return before limit, YES if succeeded, NO if not.
*/
- (BOOL) lockWhenCondition: (int)condition_to_meet - (BOOL) lockWhenCondition: (int)condition_to_meet
beforeDate: (NSDate*)limitDate; beforeDate: (NSDate*)limitDate;
/**
* Block until acquiring lock.
*/
- (void) lock; - (void) lock;
/**
* Relinquish lock.
*/
- (void) unlock; - (void) unlock;
@end @end
/*
* NSRecursiveLock /**
* Allows the lock to be recursively acquired by the same thread * Allows the lock to be recursively acquired by the same thread.
* *
* If the same thread locks the mutex (n) times then that same * If the same thread locks the mutex (n) times then that same
* thread must also unlock it (n) times before another thread * thread must also unlock it (n) times before another thread
@ -117,10 +173,25 @@
void *_mutex; void *_mutex;
} }
/**
* Try to acquire lock regardless of condition and return immediately, YES if
* succeeded, NO if not.
*/
- (BOOL) tryLock; - (BOOL) tryLock;
/**
* Try to acquire lock and return before limit, YES if succeeded, NO if not.
*/
- (BOOL) lockBeforeDate: (NSDate*)limit; - (BOOL) lockBeforeDate: (NSDate*)limit;
/**
* Block until acquiring lock.
*/
- (void) lock; - (void) lock;
/**
* Relinquish lock.
*/
- (void) unlock; - (void) unlock;
@end @end
@ -153,11 +224,63 @@
#define GS_INITIALIZED_LOCK(IDENT,CLASSNAME) \ #define GS_INITIALIZED_LOCK(IDENT,CLASSNAME) \
(IDENT != nil ? IDENT : [CLASSNAME newLockAt: &IDENT]) (IDENT != nil ? IDENT : [CLASSNAME newLockAt: &IDENT])
/**
* Defines the <code>newLockAt:</code> method.
*/
@interface NSLock (GSCategories) @interface NSLock (GSCategories)
/**
* Initializes the id pointed to by location
* with a new instance of the receiver's class
* in a thread safe manner, unless
* it has been previously initialized.
* Returns the contents pointed to by location.
* The location is considered unintialized if it contains nil.
* <br/>
* This method is used in the GS_INITIALIZED_LOCK macro
* to initialize lock variables when it cannot be insured
* that they can be initialized in a thread safe environment.
* <example>
* NSLock *my_lock = nil;
*
* void function (void)
* {
* [GS_INITIALIZED_LOCK(my_lock, NSLock) lock];
* do_work ();
* [my_lock unlock];
* }
*
* </example>
*/
+ (id)newLockAt:(id *)location; + (id)newLockAt:(id *)location;
@end @end
/**
* Defines the <code>newLockAt:</code> method.
*/
@interface NSRecursiveLock (GSCategories) @interface NSRecursiveLock (GSCategories)
/**
* Initializes the id pointed to by location
* with a new instance of the receiver's class
* in a thread safe manner, unless
* it has been previously initialized.
* Returns the contents pointed to by location.
* The location is considered unintialized if it contains nil.
* <br/>
* This method is used in the GS_INITIALIZED_LOCK macro
* to initialize lock variables when it cannot be insured
* that they can be initialized in a thread safe environment.
* <example>
* NSLock *my_lock = nil;
*
* void function (void)
* {
* [GS_INITIALIZED_LOCK(my_lock, NSRecursiveLock) lock];
* do_work ();
* [my_lock unlock];
* }
*
* </example>
*/
+ (id)newLockAt:(id *)location; + (id)newLockAt:(id *)location;
@end @end

View file

@ -81,7 +81,7 @@ typedef struct _NSMapTableKeyCallBacks
/** /**
* Description function. Generates a string describing the key * Description function. Generates a string describing the key
* and does not modify the key itsself. * and does not modify the key itself.
*/ */
NSString *(*describe)(NSMapTable *, const void *); NSString *(*describe)(NSMapTable *, const void *);
@ -115,7 +115,7 @@ struct _NSMapTableValueCallBacks
/** /**
* Description function. Generates a string describing the element * Description function. Generates a string describing the element
* and does not modify the element itsself. * and does not modify the element itself.
*/ */
NSString *(*describe)(NSMapTable *, const void *); NSString *(*describe)(NSMapTable *, const void *);
}; };

View file

@ -29,12 +29,22 @@
#include <Foundation/NSObject.h> #include <Foundation/NSObject.h>
#ifndef STRICT_MACOS_X #ifndef STRICT_MACOS_X
/* /**
* Info about layout of arguments. * <p>Info about layout of arguments.
* Extended from the original OpenStep version to let us know if the * Extended from the original OpenStep version to let us know if the
* arg is passed in registers or on the stack. * arg is passed in registers or on the stack.</p>
* *
* NB. This no longer exists in Rhapsody/MacOS. * <p>NB. This no longer exists in Rhapsody/MacOS.</p>
<example>
typedef struct {
int offset;
unsigned size;
const char *type;
unsigned align; // extension, available only ifndef NO_GNUSTEP
unsigned qual; // extension, available only ifndef NO_GNUSTEP
BOOL isReg; // extension, available only ifndef NO_GNUSTEP
} NSArgumentInfo;
</example>
*/ */
typedef struct { typedef struct {
int offset; int offset;
@ -48,6 +58,19 @@ typedef struct {
} NSArgumentInfo; } NSArgumentInfo;
#endif #endif
/**
* <p>Class encapsulating type information for method arguments and return
* value. It is used as a component of [NSInvocation] to implement message
* forwarding, such as within the distributed objects framework. Instances
* can be obtained from the [NSObject] method
* [NSObject-methodSignatureForSelector:].</p>
*
* <p>Basically, types are represented as Objective-C <code>@encode(...)</code>
* compatible strings, together with size information. The arguments are
* numbered starting from 0, including the implicit arguments
* <code><em>self</em></code> (type <code>id</code>, at position 0) and
* <code><em>_cmd</em></code> (type <code>SEL</code>, at position 1).</p>
*/
@interface NSMethodSignature : NSObject @interface NSMethodSignature : NSObject
{ {
const char *_methodTypes; const char *_methodTypes;
@ -60,23 +83,78 @@ typedef struct {
#endif #endif
} }
/**
* Build a method signature directly from string description of return type and
* argument types, using the Objective-C <code>@encode(...)</code> type codes.
*/
+ (NSMethodSignature*) signatureWithObjCTypes: (const char*)t; + (NSMethodSignature*) signatureWithObjCTypes: (const char*)t;
#ifndef STRICT_MACOS_X #ifndef STRICT_MACOS_X
/**
* Returns full information on given argument. Indices start at 0. Provide
* -1 to get info on return value.
*/
- (NSArgumentInfo) argumentInfoAtIndex: (unsigned)index; - (NSArgumentInfo) argumentInfoAtIndex: (unsigned)index;
#endif #endif
/**
* Number of bytes that the full set of arguments occupies on the stack, which
* is platformt(hardware)-dependent.
*/
- (unsigned) frameLength; - (unsigned) frameLength;
/**
* Returns Objective-C <code>@encode(...)</code> compatible string. Arguments
* are numbered starting from 0, including the implicit arguments
* <code><em>self</em></code> (type <code>id</code>, at position 0) and
* <code><em>_cmd</em></code> (type <code>SEL</code>, at position 1).
*/
- (const char*) getArgumentTypeAtIndex: (unsigned)index; - (const char*) getArgumentTypeAtIndex: (unsigned)index;
/**
* Pertains to distributed objects; method is asynchronous when invoked and
* return should not be waited for.
*/
- (BOOL) isOneway; - (BOOL) isOneway;
/**
* Number of bytes that the return value occupies on the stack, which is
* platformt(hardware)-dependent.
*/
- (unsigned) methodReturnLength; - (unsigned) methodReturnLength;
/**
* Returns Objective-C <code>@encode(...)</code> compatible string. Arguments
* are numbered starting from 0, including the implicit arguments
* <code><em>self</em></code> (type <code>id</code>, at position 0) and
* <code><em>_cmd</em></code> (type <code>SEL</code>, at position 1).
*/
- (const char*) methodReturnType; - (const char*) methodReturnType;
/**
* Returns number of arguments to method, including the implicit
* <code><em>self</em></code> and <code><em>_cmd</em></code>.
*/
- (unsigned) numberOfArguments; - (unsigned) numberOfArguments;
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Declares a convenience method for getting the entire array of raw type and
* size information.
*/
@interface NSMethodSignature(GNUstep) @interface NSMethodSignature(GNUstep)
/**
* Convenience method for getting the entire array of raw type and size
* information.
*/
- (NSArgumentInfo*) methodInfo; - (NSArgumentInfo*) methodInfo;
/**
* Returns a string containing all Objective-C
* <code>@encode(...)</code> compatible type information.
*/
- (const char*) methodType; - (const char*) methodType;
@end @end
#endif #endif

View file

@ -85,19 +85,25 @@
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Defines some extensions for maximising posting performance - these options
* are NOT adjustable for the default notification center.
*
*/
@interface NSNotificationCenter (GNUstep) @interface NSNotificationCenter (GNUstep)
/*
* Extensions for maximising posting performance - these options are /**
* NOT adjustable for the default notification center.
*
* You can disable locking in a multi-threaded program if you KNOW that only
* one thread will ever use the notification center.
*
* You can turn on 'immutability' if you KNOW that the posting of a * You can turn on 'immutability' if you KNOW that the posting of a
* notification will never result in an attempt to modify the center. * notification will never result in an attempt to modify the center.
* In this case, the center can optimise delivery of notifications. * In this case, the center can optimise delivery of notifications.
*/ */
- (BOOL) setImmutableInPost: (BOOL)flag; - (BOOL) setImmutableInPost: (BOOL)flag;
/**
*
* You can disable locking in a multi-threaded program if you KNOW that only
* one thread will ever use the notification center.
*/
- (BOOL) setLockingDisabled: (BOOL)flag; - (BOOL) setLockingDisabled: (BOOL)flag;
@end @end
#endif #endif

View file

@ -33,6 +33,42 @@
@class NSString, NSAttributedString, NSDictionary; @class NSString, NSAttributedString, NSDictionary;
/**
* <p><em><strong>This class is currently not implemented in GNUstep! All set
* methods will work, but stringForObject: will ignore the format completely.
* The documentation below describes what the behavior SHOULD
* be...</strong></em></p>
*
* <p>A specialization of the [NSFormatter] class for generating string
* representations of numbers ([NSNumber] and [NSDecimalNumber] instances) and
* for parsing numeric values in strings.</p>
*
* <p>See the [NSFormatter] documentation for description of the basic methods
* for formatting and parsing that are available.</p>
*
* <p>There are no convenience initializers or constructors for this class.
* Instead, to obtain an instance, call alloc init and then -setFormat: .</p>
*
* <p>The basic format of a format string uses "#" signs to represent digits,
* and other characters to represent themselves, in a context-dependent way.
* Thus, for example, <code>@"#,###.00"</code> means to print the number
* ending in .00 if it has no decimal part, otherwise print two decimal
* places, and to print one comma if it is greater than 1000. Thus, 1000
* prints as "1,000.00", and 1444555.979 prints as "1444,555.98" (see
* -setRoundingBehavior:).</p>
*
* <p>After setting the format, you may change the thousands separator and
* decimal point using set methods, or by calling -setLocalizesFormat: .</p>
*
* <p>You may set separate formats to be used for positive numbers, negative
* numbers, and zero independently.</p>
*
* <p>In addition, this class supports attributed strings (see
* [NSAttributedString]), so that you can specify font and color attributes,
* among others, to display aspects of a number. You can assign specific sets
* of attributes for positive and negative numbers, and for specific cases
* including 0, NaN, and nil... </p>
*/
@interface NSNumberFormatter: NSFormatter @interface NSNumberFormatter: NSFormatter
{ {
BOOL _hasThousandSeparators; BOOL _hasThousandSeparators;
@ -53,45 +89,207 @@
} }
// Format // Format
/**
* Returns the format string this instance was initialized with.
*/
- (NSString*) format; - (NSString*) format;
/**
* Sets format string. See class description for more information.
*/
- (void) setFormat: (NSString*)aFormat; - (void) setFormat: (NSString*)aFormat;
/**
* Returns whether this format should defer to the locale in determining
* thousands separator and decimal point. The default is to NOT localize.
*/
- (BOOL) localizesFormat; - (BOOL) localizesFormat;
/**
* Set whether this format should defer to the locale in determining thousands
* separator and decimal point. The default is to NOT localize.
*/
- (void) setLocalizesFormat: (BOOL)flag; - (void) setLocalizesFormat: (BOOL)flag;
/**
* Returns format used for negative numbers.
*/
- (NSString*) negativeFormat; - (NSString*) negativeFormat;
/**
* Sets format used for negative numbers. See class description for more
* information.
*/
- (void) setNegativeFormat: (NSString*)aFormat; - (void) setNegativeFormat: (NSString*)aFormat;
/**
* Returns format used for positive numbers.
*/
- (NSString*) positiveFormat; - (NSString*) positiveFormat;
/**
* Sets format used for positive numbers. See class description for more
* information.
*/
- (void) setPositiveFormat: (NSString*)aFormat; - (void) setPositiveFormat: (NSString*)aFormat;
// Attributed Strings // Attributed Strings
/**
* Returns the exact attributed string used for nil values. By default this
* is an empty string.
*/
- (NSAttributedString*) attributedStringForNil; - (NSAttributedString*) attributedStringForNil;
/**
* Sets the exact attributed string used for nil values. By default this
* is an empty string.
*/
- (void) setAttributedStringForNil: (NSAttributedString*)newAttributedString; - (void) setAttributedStringForNil: (NSAttributedString*)newAttributedString;
/**
* Returns the exact attributed string used for NaN values. By default this
* is the string "NaN" with no attributes.
*/
- (NSAttributedString*) attributedStringForNotANumber; - (NSAttributedString*) attributedStringForNotANumber;
/**
* Sets the exact attributed string used for NaN values. By default this
* is the string "NaN" with no attributes.
*/
- (void) setAttributedStringForNotANumber: (NSAttributedString*)newAttributedString; - (void) setAttributedStringForNotANumber: (NSAttributedString*)newAttributedString;
/**
* Returns the exact attributed string used for zero values. By default this
* is based on the format for zero values, if set, or the format for positive
* values otherwise.
*/
- (NSAttributedString*) attributedStringForZero; - (NSAttributedString*) attributedStringForZero;
/**
* Sets the exact attributed string used for zero values. By default this
* is based on the format for zero values, if set, or the format for positive
* values otherwise.
*/
- (void) setAttributedStringForZero: (NSAttributedString*)newAttributedString; - (void) setAttributedStringForZero: (NSAttributedString*)newAttributedString;
/**
* Returns the attributes to apply to negative values (whole string), when
* -attributedStringForObjectValue:withDefaultAttributes: is called. Default
* is none.
*/
- (NSDictionary*) textAttributesForNegativeValues; - (NSDictionary*) textAttributesForNegativeValues;
/**
* Sets the attributes to apply to negative values (whole string), when
* -attributedStringForObjectValue:withDefaultAttributes: is called. Default
* is none.
*/
- (void) setTextAttributesForNegativeValues: (NSDictionary*)newAttributes; - (void) setTextAttributesForNegativeValues: (NSDictionary*)newAttributes;
/**
* Returns the attributes to apply to positive values (whole string), when
* -attributedStringForObjectValue:withDefaultAttributes: is called. Default
* is none.
*/
- (NSDictionary*) textAttributesForPositiveValues; - (NSDictionary*) textAttributesForPositiveValues;
/**
* Sets the attributes to apply to positive values (whole string), when
* -attributedStringForObjectValue:withDefaultAttributes: is called. Default
* is none.
*/
- (void) setTextAttributesForPositiveValues: (NSDictionary*)newAttributes; - (void) setTextAttributesForPositiveValues: (NSDictionary*)newAttributes;
// Rounding
// Rounding.. this should be communicated as id<NSDecimalNumberBehaviors>,
// not NSDecimalNumberHandler, but this is the way OpenStep and OS X do it..
/**
* Returns object specifying the rounding behavior used when truncating
* decimal digits in formats. Default is
* [NSDecimalNumberHandler+defaultDecimalNumberHandler].
*/
- (NSDecimalNumberHandler*) roundingBehavior; - (NSDecimalNumberHandler*) roundingBehavior;
/**
* Sets object specifying the rounding behavior used when truncating
* decimal digits in formats. Default is
* [NSDecimalNumberHandler+defaultDecimalNumberHandler].
*/
- (void) setRoundingBehavior: (NSDecimalNumberHandler*)newRoundingBehavior; - (void) setRoundingBehavior: (NSDecimalNumberHandler*)newRoundingBehavior;
// Separators // Separators
/**
* Returns whether thousands separator should be used, regardless of whether
* it is set in format. (Default is YES if explicitly set in format.)
*/
- (BOOL) hasThousandSeparators; - (BOOL) hasThousandSeparators;
/**
* Sets whether thousands separator should be used, regardless of whether
* it is set in format. (Default is YES if explicitly set in format.)
*/
- (void) setHasThousandSeparators: (BOOL)flag; - (void) setHasThousandSeparators: (BOOL)flag;
/**
* Returns thousands separator used; default is ','.
*/
- (NSString*) thousandSeparator; - (NSString*) thousandSeparator;
/**
* Sets thousands separator used; default is ','.
*/
- (void) setThousandSeparator: (NSString*)newSeparator; - (void) setThousandSeparator: (NSString*)newSeparator;
/**
* Returns whether number parsing will accept floating point values or generate
* an exception (only int values are valid). Default is YES.
*/
- (BOOL) allowsFloats; - (BOOL) allowsFloats;
/**
* Sets whether number parsing will accept floating point values or generate
* an exception (only int values are valid). Default is YES.
*/
- (void) setAllowsFloats: (BOOL)flag; - (void) setAllowsFloats: (BOOL)flag;
/**
* Returns thousands separator used; default is '.'.
*/
- (NSString*) decimalSeparator; - (NSString*) decimalSeparator;
/**
* Sets thousands separator used; default is '.'.
*/
- (void) setDecimalSeparator: (NSString*)newSeparator; - (void) setDecimalSeparator: (NSString*)newSeparator;
// Maximum/minimum // Maximum/minimum
/**
* Returns maximum value that will be accepted as valid in number parsing.
* Default is none.
*/
- (NSDecimalNumber*) maximum; - (NSDecimalNumber*) maximum;
/**
* Sets maximum value that will be accepted as valid in number parsing.
* Default is none.
*/
- (void) setMaximum: (NSDecimalNumber*)aMaximum; - (void) setMaximum: (NSDecimalNumber*)aMaximum;
/**
* Returns minimum value that will be accepted as valid in number parsing.
* Default is none.
*/
- (NSDecimalNumber*) minimum; - (NSDecimalNumber*) minimum;
/**
* Sets minimum value that will be accepted as valid in number parsing.
* Default is none.
*/
- (void) setMinimum: (NSDecimalNumber*)aMinimum; - (void) setMinimum: (NSDecimalNumber*)aMinimum;
@end @end

View file

@ -39,9 +39,11 @@ GS_EXPORT const char *NSGetSizeAndAlignment(const char *typePtr,
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/* Logging */ /* Logging */
/* OpenStep spec states that log messages go to stderr, but just in case /**
someone wants them to go somewhere else, they can implement a function * OpenStep spec states that log messages go to stderr, but just in case
like this */ * someone wants them to go somewhere else, they can implement a function
* like this.
*/
typedef void NSLog_printf_handler (NSString* message); typedef void NSLog_printf_handler (NSString* message);
GS_EXPORT NSLog_printf_handler *_NSLog_printf_handler; GS_EXPORT NSLog_printf_handler *_NSLog_printf_handler;
GS_EXPORT int _NSLogDescriptor; GS_EXPORT int _NSLogDescriptor;

View file

@ -140,13 +140,33 @@
* to remote processes via the Distributed Objects mechanism. * to remote processes via the Distributed Objects mechanism.
*/ */
@protocol NSCoding @protocol NSCoding
/**
* Called when it is time for receiver to be serialized for writing to an
* archive or network connection. Receiver should record all of its instance
* variables using methods on aCoder. See documentation for [NSCoder],
* [NSArchiver], [NSKeyedArchiver], and/or [NSPortCoder] for more information.
*/
- (void) encodeWithCoder: (NSCoder*)aCoder; - (void) encodeWithCoder: (NSCoder*)aCoder;
/**
* Called on a freshly allocated receiver when it is time to reconstitute from
* serialized bytes in an archive or from a network connection. Receiver
* should load all of its instance variables using methods on aCoder. See
* documentation for [NSCoder], [NSUnarchiver], [NSKeyedUnarchiver], and/or
* [NSPortCoder] for more information.
*/
- (id) initWithCoder: (NSCoder*)aDecoder; - (id) initWithCoder: (NSCoder*)aDecoder;
@end @end
@interface NSObject <NSObject> @interface NSObject <NSObject>
{ {
/**
* Points to instance's class. Used by runtime to access method
* implementations, etc.. Set in +alloc, Unlike other instance variables,
* which are cleared there.
*/
Class isa; Class isa;
} }
@ -260,6 +280,11 @@ NSExtraRefCount(id anObject);
GS_EXPORT void GS_EXPORT void
NSIncrementExtraRefCount(id anObject); NSIncrementExtraRefCount(id anObject);
/**
* Contains values <code>NSOrderedSame</code>, <code>NSOrderedAscending</code>
* <code>NSOrderedDescending</code>, for left hand side equals, less than, or
* greater than right hand side.
*/
typedef enum _NSComparisonResult typedef enum _NSComparisonResult
{ {
NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending
@ -291,11 +316,38 @@ GS_EXPORT NSRecursiveLock *gnustep_global_lock;
- (id) write: (TypedStream*)aStream; - (id) write: (TypedStream*)aStream;
@end @end
/**
* Provides a number of GNUstep-specific methods that are used to aid
* implementation of the Base library.
*/
@interface NSObject (GSCategories) @interface NSObject (GSCategories)
/**
* Message sent when an implementation wants to explicitly exclude a method
* (but cannot due to compiler constraint), and wants to make sure it is not
* called by mistake. Default implementation raises an exception at runtime.
*/
- notImplemented:(SEL)aSel; - notImplemented:(SEL)aSel;
/**
* Message sent when an implementation wants to explicitly require a subclass
* to implement a method (but cannot at compile time since there is no
* <code>abstract</code> keyword in Objective-C). Default implementation
* raises an exception at runtime to alert developer that he/she forgot to
* override a method.
*/
- (id) subclassResponsibility: (SEL)aSel; - (id) subclassResponsibility: (SEL)aSel;
/**
* Message sent when an implementation wants to explicitly exclude a method
* (but cannot due to compiler constraint) and forbid that subclasses
* implement it. Default implementation raises an exception at runtime. If a
* subclass <em>does</em> implement this method, however, the superclass's
* implementation will not be called, so this is not a perfect mechanism.
*/
- (id) shouldNotImplement: (SEL)aSel; - (id) shouldNotImplement: (SEL)aSel;
/*
/**
WARNING: The -compare: method for NSObject is deprecated WARNING: The -compare: method for NSObject is deprecated
due to subclasses declaring the same selector with due to subclasses declaring the same selector with
conflicting signatures. conflicting signatures.
@ -310,23 +362,53 @@ GS_EXPORT NSRecursiveLock *gnustep_global_lock;
#endif #endif
/* /**
* Protocol for garbage collection finalization - same as libFoundation * Protocol for garbage collection finalization - same as libFoundation
* for compatibility. * for compatibility.
*/ */
@protocol GCFinalization @protocol GCFinalization
/**
* Called before receiver is deallocated by garbage collector. If you want
* to do anything special before [NSObject -dealloc] is called, do it here.
*/
- (void) gcFinalize; - (void) gcFinalize;
@end @end
#include <Foundation/NSDate.h> #include <Foundation/NSDate.h>
/**
* Declares some methods for sending messages to self after a fixed delay.
* (These methods <em>are</em> in OpenStep and OS X.)
*/
@interface NSObject (TimedPerformers) @interface NSObject (TimedPerformers)
/**
* Cancels any perform operations set up for the specified target
* in the current run loop.
*/
+ (void) cancelPreviousPerformRequestsWithTarget: (id)obj; + (void) cancelPreviousPerformRequestsWithTarget: (id)obj;
/**
* Cancels any perform operations set up for the specified target
* in the current loop, but only if the value of aSelector and argument
* with which the performs were set up match those supplied.<br />
* Matching of the argument may be either by pointer equality or by
* use of the [NSObject-isEqual:] method.
*/
+ (void) cancelPreviousPerformRequestsWithTarget: (id)obj + (void) cancelPreviousPerformRequestsWithTarget: (id)obj
selector: (SEL)s selector: (SEL)s
object: (id)arg; object: (id)arg;
/**
* Sets given message to be sent to this instance after given delay,
* in any run loop mode. See [NSRunLoop].
*/
- (void) performSelector: (SEL)s - (void) performSelector: (SEL)s
withObject: (id)arg withObject: (id)arg
afterDelay: (NSTimeInterval)seconds; afterDelay: (NSTimeInterval)seconds;
/**
* Sets given message to be sent to this instance after given delay,
* in given run loop modes. See [NSRunLoop].
*/
- (void) performSelector: (SEL)s - (void) performSelector: (SEL)s
withObject: (id)arg withObject: (id)arg
afterDelay: (NSTimeInterval)seconds afterDelay: (NSTimeInterval)seconds

View file

@ -49,38 +49,104 @@
GS_EXPORT NSString * const NSPortTimeoutException; /* OPENSTEP */ GS_EXPORT NSString * const NSPortTimeoutException; /* OPENSTEP */
/**
* <p><code>NSPort</code> is an abstract class defining interfaces underlying
* communications in the distributed objects framework. Each side of a
* connection will have an <code>NSPort</code> object, responsible for sending
* and receiving [NSPortMessage]s, which are then passed to delegates when
* received. The <code>NSPort</code> must be added to the [NSRunLoop] as an
* input source.</p>
*
* <p>This class also implements the functionality of the
* <code><em>NSMachPort</em></code> class on OS X.</p>
*/
@interface NSPort : NSObject <NSCoding, NSCopying> @interface NSPort : NSObject <NSCoding, NSCopying>
{ {
BOOL _is_valid; BOOL _is_valid;
id _delegate; id _delegate;
} }
/**
* Basic constructor returns object capable of send and receive.
*/
+ (NSPort*) port; + (NSPort*) port;
/**
* NSMachPort compatibility method.
*/
+ (NSPort*) portWithMachPort: (int)machPort; + (NSPort*) portWithMachPort: (int)machPort;
/**
* Returns the object that received messages will be passed off to.
*/
- (id) delegate; - (id) delegate;
- (id) init; /**
- (id) initWithMachPort: (int)machPort; * Sets the object that received messages will be passed off to.
*/
- (void) invalidate;
- (BOOL) isValid;
- (int) machPort;
- (void) setDelegate: (id)anObject; - (void) setDelegate: (id)anObject;
/**
* Basic initializer sets up object capable of send and receive.
*/
- (id) init;
/**
* NSMachPort compatibility method.
*/
- (id) initWithMachPort: (int)machPort;
/**
* NSMachPort compatibility.
*/
- (int) machPort;
/**
* Mark port as invalid, deregister with listeners and cease further network
* operations. Subclasses should override and call super.
*/
- (void) invalidate;
/**
* Returns whether port has been marked invalid.
*/
- (BOOL) isValid;
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
/**
* Adds to run loop as input source to be notified for input in given mode.
* This method is for use by subclasses.
*/
- (void) addConnection: (NSConnection*)aConnection - (void) addConnection: (NSConnection*)aConnection
toRunLoop: (NSRunLoop*)aLoop toRunLoop: (NSRunLoop*)aLoop
forMode: (NSString*)aMode; forMode: (NSString*)aMode;
/**
* Removes from run loop as input source to be notified for input in given mode.
* This method is for use by subclasses.
*/
- (void) removeConnection: (NSConnection*)aConnection - (void) removeConnection: (NSConnection*)aConnection
fromRunLoop: (NSRunLoop*)aLoop fromRunLoop: (NSRunLoop*)aLoop
forMode: (NSString*)aMode; forMode: (NSString*)aMode;
/**
* Returns amount of space used for header info at beginning of messages.
* Subclasses should override (this implementation returns 0).
*/
- (unsigned) reservedSpaceLength; - (unsigned) reservedSpaceLength;
/**
* Internal method for sending message, for use by subclasses.
*/
- (BOOL) sendBeforeDate: (NSDate*)when - (BOOL) sendBeforeDate: (NSDate*)when
msgid: (int)msgid msgid: (int)msgid
components: (NSMutableArray*)components components: (NSMutableArray*)components
from: (NSPort*)receivingPort from: (NSPort*)receivingPort
reserved: (unsigned)length; reserved: (unsigned)length;
/**
* Internal method for sending message, for use by subclasses.
*/
- (BOOL) sendBeforeDate: (NSDate*)when - (BOOL) sendBeforeDate: (NSDate*)when
components: (NSMutableArray*)components components: (NSMutableArray*)components
from: (NSPort*)receivingPort from: (NSPort*)receivingPort
@ -89,7 +155,11 @@ GS_EXPORT NSString * const NSPortTimeoutException; /* OPENSTEP */
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* Stubs for backward compatibility. Do not use.
*/
@interface NSPort (GNUstep) @interface NSPort (GNUstep)
//PENDING: none of this is implemented.. should it be removed?
- (void) close; - (void) close;
+ (Class) outPacketClass; + (Class) outPacketClass;
- (Class) outPacketClass; - (Class) outPacketClass;
@ -105,6 +175,15 @@ GS_EXPORT NSString* NSPortDidBecomeInvalidNotification;
typedef SOCKET NSSocketNativeHandle; typedef SOCKET NSSocketNativeHandle;
@class GSTcpHandle; @class GSTcpHandle;
/**
* <p>An [NSPort] implementation for network object communications based on
* BSD sockets. Can be used for interthread/interprocess
* communications between same or different hosts (though on same host
* [NSMessagePort] will be more efficient).</p>
*
* <p>Note that this class is incompatible with the latest OS X version.</p>
*/
@interface NSSocketPort : NSPort <GCFinalization> @interface NSSocketPort : NSPort <GCFinalization>
{ {
NSRecursiveLock *myLock; NSRecursiveLock *myLock;
@ -115,23 +194,76 @@ typedef SOCKET NSSocketNativeHandle;
NSMapTable *handles; /* Handles indexed by socket. */ NSMapTable *handles; /* Handles indexed by socket. */
} }
/**
* Look up and return an existing <code>NSSocketPort</code> given a host and
* number, or return nil if one has not been created.
*/
+ (NSSocketPort*) existingPortWithNumber: (gsu16)number + (NSSocketPort*) existingPortWithNumber: (gsu16)number
onHost: (NSHost*)aHost; onHost: (NSHost*)aHost;
/**
* This is the preferred initialisation method for <code>NSSocketPort</code>.
* <br/>
* number should be a TCP/IP port number or may be zero for a port on
* the local host.<br/>
* aHost should be the host for the port or may be nil for the local
* host.<br/>
* addr is the IP address that MUST be used for this port - if it is nil
* then, for the local host, the port uses ALL IP addresses, and for a
* remote host, the port will use the first address that works.<br/>
* shouldListen specifies whether to listen on the port initially.
*/
+ (NSSocketPort*) portWithNumber: (gsu16)number + (NSSocketPort*) portWithNumber: (gsu16)number
onHost: (NSHost*)aHost onHost: (NSHost*)aHost
forceAddress: (NSString*)addr forceAddress: (NSString*)addr
listener: (BOOL)shouldListen; listener: (BOOL)shouldListen;
/**
* Setup method: add new send or receive connection handle.
*/
- (void) addHandle: (GSTcpHandle*)handle forSend: (BOOL)send; - (void) addHandle: (GSTcpHandle*)handle forSend: (BOOL)send;
/**
* Returns IP address of underlying socket.
*/
- (NSString*) address; - (NSString*) address;
/**
* This is a callback method used by the NSRunLoop class to determine which
* descriptors to watch for the port.
*/
- (void) getFds: (int*)fds count: (int*)count; - (void) getFds: (int*)fds count: (int*)count;
/**
*
*/
- (GSTcpHandle*) handleForPort: (NSSocketPort*)recvPort - (GSTcpHandle*) handleForPort: (NSSocketPort*)recvPort
beforeDate: (NSDate*)when; beforeDate: (NSDate*)when;
/**
* Delegates processing of a message.
*/
- (void) handlePortMessage: (NSPortMessage*)m; - (void) handlePortMessage: (NSPortMessage*)m;
/**
* Returns host that the underlying socket is connected to.
*/
- (NSHost*) host; - (NSHost*) host;
/**
* Returns port number of underlying socket.
*/
- (gsu16) portNumber; - (gsu16) portNumber;
/**
* This is called when a TCP/IP socket connection is broken. We remove the
* connection handle from this port and, if this was the last handle to a
* remote port, we invalidate the port.
*/
- (void) removeHandle: (GSTcpHandle*)handle; - (void) removeHandle: (GSTcpHandle*)handle;
// This is the OS X interface
/* /*
{ {
NSSocketNativeHandle _socket; NSSocketNativeHandle _socket;
@ -169,6 +301,11 @@ typedef SOCKET NSSocketNativeHandle;
@class GSMessageHandle; @class GSMessageHandle;
/**
* An [NSPort] implementation for network object communications based on
* Unix domain sockets. Can be used for interthread/interprocess
* communications on the same host, but not between different hosts.
*/
@interface NSMessagePort : NSPort <GCFinalization> @interface NSMessagePort : NSPort <GCFinalization>
{ {
NSData *name; NSData *name;
@ -179,11 +316,31 @@ typedef SOCKET NSSocketNativeHandle;
- (int) _listener; - (int) _listener;
- (const unsigned char *) _name; - (const unsigned char *) _name;
/**
* <init/>
* This is the preferred initialisation method for <code>NSMessagePort</code>.
*
* socketName is the name of the socket in the port directory
*/
+ (NSMessagePort*) _portWithName: (const unsigned char *)socketName + (NSMessagePort*) _portWithName: (const unsigned char *)socketName
listener: (BOOL)shouldListen; listener: (BOOL)shouldListen;
/**
* Setup method: add new send or receive connection handle.
*/
- (void) addHandle: (GSMessageHandle*)handle forSend: (BOOL)send; - (void) addHandle: (GSMessageHandle*)handle forSend: (BOOL)send;
/**
* This is called when a socket connection is broken. We remove the
* connection handle from this port and, if this was the last handle to a
* remote port, we invalidate the port.
*/
- (void) removeHandle: (GSMessageHandle*)handle; - (void) removeHandle: (GSMessageHandle*)handle;
/**
* Delegates processing of a message.
*/
- (void) handlePortMessage: (NSPortMessage*)m; - (void) handlePortMessage: (NSPortMessage*)m;
@end @end

View file

@ -31,6 +31,17 @@
@class NSConnection; @class NSConnection;
@class NSPort; @class NSPort;
/**
* This class is an [NSCoder] implementation specialized for sending objects
* over network connections for immediate use (as opposed to the archivers
* which persist objects for reconstitution after an indefinite term). It is
* used to help implement the distributed objects framework by the
* [NSConnection] class. Even for highly specialized applications, you
* probably do not need to use this class directly.
*/
//FIXME: the above is what Apple's docs say, but looking at the code the
// NSConnection is actually created by this class rather than the other way
// around, so maybe the docs should be changed..
@interface NSPortCoder : NSCoder @interface NSPortCoder : NSCoder
{ {
@private @private
@ -77,18 +88,57 @@
NSZone *_zone; /* Zone for allocating objs. */ NSZone *_zone; /* Zone for allocating objs. */
} }
/**
* Create a new instance for communications over send and recv, and send an
* initial message through send as specified by comp.
*/
+ (NSPortCoder*) portCoderWithReceivePort: (NSPort*)recv + (NSPortCoder*) portCoderWithReceivePort: (NSPort*)recv
sendPort: (NSPort*)send sendPort: (NSPort*)send
components: (NSArray*)comp; components: (NSArray*)comp;
/**
* Initialize a new instance for communications over send and recv, and send an
* initial message through send as specified by comp.
*/
- (id) initWithReceivePort: (NSPort*)recv - (id) initWithReceivePort: (NSPort*)recv
sendPort: (NSPort*)send sendPort: (NSPort*)send
components: (NSArray*)comp; components: (NSArray*)comp;
/**
* Returns the <code>NSConnection</code> using this instance.
*/
- (NSConnection*) connection; - (NSConnection*) connection;
/**
* Return port object previously encoded by this instance. Mainly for use
* by the ports themselves.
*/
- (NSPort*) decodePortObject; - (NSPort*) decodePortObject;
/**
* Processes and acts upon the initial message the receiver was initialized
* with..
*/
- (void) dispatch; - (void) dispatch;
/**
* Encodes aPort so it can be sent to the receiving side of the connection.
* Mainly for use by the ports themselves.
*/
- (void) encodePortObject: (NSPort*)aPort; - (void) encodePortObject: (NSPort*)aPort;
/**
* Returns YES if receiver is in the process of encoding objects by copying
* them (rather than substituting a proxy). This method is mainly needed
* internally and by subclasses.
*/
- (BOOL) isBycopy; - (BOOL) isBycopy;
/**
* Returns YES if receiver will substitute a proxy when encoding objects
* rather than by copying them. This method is mainly needed
* internally and by subclasses.
*/
- (BOOL) isByref; - (BOOL) isByref;
@end @end

View file

@ -27,6 +27,15 @@
#include <Foundation/NSArray.h> #include <Foundation/NSArray.h>
#include <Foundation/NSPort.h> #include <Foundation/NSPort.h>
/**
* <p>The data transported for distributed objects communications is sent over
* the network encapsulated by NSPortMessage objects, which consist of two
* [NSPort]s (sender and receiver, not sent over the network) and a body
* consisting of one or more [NSData] or [NSPort] objects. (Data in the
* [NSData] must be in network byte order.)</p>
*
* <p>See the [NSConnection] and [NSPortCoder] classes.</p>
*/
@interface NSPortMessage : NSObject @interface NSPortMessage : NSObject
{ {
unsigned _msgid; unsigned _msgid;
@ -34,15 +43,59 @@
NSPort *_send; NSPort *_send;
NSMutableArray *_components; NSMutableArray *_components;
} }
/**
* OpenStep compatibility.
*/
- (id) initWithMachMessage: (void*)buffer; - (id) initWithMachMessage: (void*)buffer;
/** <init/> Initializes to send message described by items (which should
* contain only [NSPort] and/or [NSData] objects, with contents in network
* byte order) over aPort. If/when a reply to the message is sent, it will
* arrive on anotherPort.
*/
- (id) initWithSendPort: (NSPort*)aPort - (id) initWithSendPort: (NSPort*)aPort
receivePort: (NSPort*)anotherPort receivePort: (NSPort*)anotherPort
components: (NSArray*)items; components: (NSArray*)items;
/**
* Request that the message be sent before when. Will block until either
* sends it (returns YES) or when expires (returns NO). The latter may occur
* if many messages are queued up (by multiple threads) faster than they can
* be sent over the network.
*/
- (BOOL) sendBeforeDate: (NSDate*)when; - (BOOL) sendBeforeDate: (NSDate*)when;
/**
* Returns the message components originally used to constitute this message.
*/
- (NSArray*) components; - (NSArray*) components;
/**
* For an outgoing message, returns the port the receiver will send itself
* through. For an incoming message, returns the port replies to the receiver
* should be sent through.
*/
- (NSPort*) sendPort; - (NSPort*) sendPort;
/**
* For an outgoing message, returns the port on which a reply to this message
* will arrive. For an incoming message, returns the port this message
* arrived on.
*/
- (NSPort*) receivePort; - (NSPort*) receivePort;
/**
* Sets ID for message. This is not used by the distributed objects system,
* but may be used in custom ways by cooperating applications to sort or
* otherwise organize messages.
*/
- (void) setMsgid: (unsigned)anId; - (void) setMsgid: (unsigned)anId;
/**
* Returns ID for message. This is not used by the distributed objects
* system, but may be used in custom ways by cooperating applications to sort
* or otherwise organize messages. Set to 0 initially.
*/
- (unsigned) msgid; - (unsigned) msgid;
@end @end

View file

@ -76,12 +76,138 @@ typedef enum {
/** /**
* <p>The NSPropertyListSerialization class provides facilities for * <p>The NSPropertyListSerialization class provides facilities for
* serialising and deserializing property list data in a number of * serialising and deserializing property list data in a number of
* formats. * formats. A property list is roughly an [NSArray] or [NSDictionary] object,
* </p> * with these or [NSNumber], [NSData], [NSString], or [NSDate] objects
* as members. (See below.)</p>
* <p>You do not work with instances of this class, instead you use a * <p>You do not work with instances of this class, instead you use a
* small number of claass methods to serialized and deserialize * small number of class methods to serialize and deserialize
* property lists. * property lists.
* </p> * </p><br/>
* A <em>property list</em> may only be one of the following classes -
* <deflist>
* <term>[NSArray]</term>
* <desc>
* An array which is either empty or contains only <em>property list</em>
* objects.<br />
* An array is delimited by round brackets and its contents are comma
* <em>separated</em> (there is no comma after the last array element).
* <example>
* ( "one", "two", "three" )
* </example>
* In XML format, an array is an element whose name is <code>array</code>
* and whose content is the array content.
* <example>
* &lt;array&gt;&lt;string&gt;one&lt;/string&gt;&lt;string&gt;two&lt;/string&gt;&lt;string&gt;three&lt;/string&gt;&lt;/array&gt;
* </example>
* </desc>
* <term>[NSData]</term>
* <desc>
* An array is represented as a series of pairs of hexadecimal characters
* (each pair representing a byte of data) enclosed in angle brackets.
* Spaces are ignored).
* <example>
* &lt; 54637374 696D67 &gt;
* </example>
* In XML format, a data object is an element whose name is
* <code>data</code> and whose content is a stream of base64 encoded bytes.
* </desc>
* <term>[NSDate]</term>
* <desc>
* Date objects were not traditionally allowed in <em>property lists</em>
* but were added when the XML format was introduced. GNUstep provides
* an extension to the traditional <em>property list</em> format to
* support date objects, but older code will not read
* <em>property lists</em> containing this extension.<br />
* This format consists of an asterisk follwed by the letter 'D' then a
* date/time in YYYY-MM-DD HH:MM:SS +/-ZZZZ format, all enclosed within
* angle brackets.
* <example>
* &lt;*D2002-03-22 11:30:00 +0100&gt;
* </example>
* In XML format, a date object is an element whose name is
* <code>date</code> and whose content is a date in the above format.
* <example>
* &lt;date&gt;2002-03-22 11:30:00 +0100&lt;/date&gt;
* </example>
* </desc>
* <term>[NSDictionary]</term>
* <desc>
* A dictionary which is either empty or contains only <em>string</em>
* keys and <em>property list</em> objects.<br />
* A dictionary is delimited by curly brackets and its contents are
* semicolon <em>terminated</em> (there is a semicolon after each value).
* Each item in the dictionary is a key/value pair with an equals sign
* after the key and before the value.
* <example>
* {
* "key1" = "value1";
* }
* </example>
* In XML format, a dictionary is an element whose name is
* <code>dictionary</code> and whose content consists of pairs of
* strings and other <em>property list</em> objects.
* <example>
* &lt;dictionary&gt;
* &lt;string&gt;key1&lt;/string&gt;
* &lt;string&gt;value1&lt;/string&gt;
* &lt;/dictionary&gt;
* </example>
* </desc>
* <term>[NSNumber]</term>
* <desc>
* Number objects were not traditionally allowed in <em>property lists</em>
* but were added when the XML format was intoroduced. GNUstep provides
* an extension to the traditional <em>property list</em> format to
* support number objects, but older code will not read
* <em>property lists</em> containing this extension.<br />
* Numbers are stored in a variety of formats depending on their values.
* <list>
* <item>boolean ... either <code>&lt;*BY&gt;</code> for YES or
* <code>&lt;*BN&gt;</code> for NO.<br />
* In XML format this is either <code>&lt;true /&gt;</code> or
* <code>&lt;false /&gt;</code>
* </item>
* <item>integer ... <code>&lt;*INNN&gt;</code> where NNN is an
* integer.<br />
* In XML format this is <code>&lt;integer&gt;NNN&lt;integer&gt;</code>
* </item>
* <item>real ... <code>&lt;*RNNN&gt;</code> where NNN is a real
* number.<br />
* In XML format this is <code>&lt;real&gt;NNN&lt;real&gt;</code>
* </item>
* </list>
* </desc>
* <term>[NSString]</term>
* <desc>
* A string is either stored literally (if it contains no spaces or special
* characters), or is stored as a quoted string with special characters
* escaped where necessary.<br />
* Escape conventions are similar to those normally used in ObjectiveC
* programming, using a backslash followed by -
* <list>
* <item><strong>\</strong> a backslash character</item>
* <item><strong>"</strong> a quote character</item>
* <item><strong>b</strong> a backspace character</item>
* <item><strong>n</strong> a newline character</item>
* <item><strong>r</strong> a carriage return character</item>
* <item><strong>t</strong> a tab character</item>
* <item><strong>OOO</strong> (three octal digits)
* an arbitrary ascii character</item>
* <item><strong>UXXXX</strong> (where X is a hexadecimal digit)
* a an arbitrary unicode character</item>
* </list>
* <example>
* "hello world &amp; others"
* </example>
* In XML format, the string is simply stored in UTF8 format as the
* content of a <code>string</code> element, and the only character
* escapes required are those used by XML such as the
* '&amp;lt;' markup representing a '&lt;' character.
* <example>
* &lt;string&gt;hello world &amp;amp; others&lt;/string&gt;"
* </example>
* </desc>
* </deflist>
*/ */
@interface NSPropertyListSerialization : NSObject @interface NSPropertyListSerialization : NSObject
{ {
@ -108,7 +234,7 @@ typedef enum {
* Deserialises dataItem and returns the resulting property list * Deserialises dataItem and returns the resulting property list
* (or nil if the data does not contain a property list serialised * (or nil if the data does not contain a property list serialised
* in a supported format).<br /> * in a supported format).<br />
* The argument anOption is ised to control whether the objects making * The argument anOption is used to control whether the objects making
* up the deserialized property list are mutable or not.<br /> * up the deserialized property list are mutable or not.<br />
* The argument aFormat is either null or a pointer to a location * The argument aFormat is either null or a pointer to a location
* in which the format of the serialized property list will be returned.<br /> * in which the format of the serialized property list will be returned.<br />

View file

@ -47,6 +47,11 @@
#endif #endif
/** /**
* <example>
{
unsigned int location;
unsigned int length;
}</example>
* <p> * <p>
* The NSRange type is used to specify ranges of locations, * The NSRange type is used to specify ranges of locations,
* typically items in an array, characters in a string, and bytes * typically items in an array, characters in a string, and bytes

View file

@ -130,7 +130,7 @@ typedef enum {
* These are general purpose methods for letting objects ask * These are general purpose methods for letting objects ask
* the runloop to watch for events for them. Only one object * the runloop to watch for events for them. Only one object
* at a time may be watching for a particular event in a mode, but * at a time may be watching for a particular event in a mode, but
* that object may add itsself as a watcher many times as long as * that object may add itself as a watcher many times as long as
* each addition is matched by a removal (the run loop keeps count). * each addition is matched by a removal (the run loop keeps count).
* Alternatively, the 'removeAll' parameter may be set to 'YES' for * Alternatively, the 'removeAll' parameter may be set to 'YES' for
* [-removeEvent:type:forMode:all:] in order to remove the watcher * [-removeEvent:type:forMode:all:] in order to remove the watcher
@ -165,9 +165,13 @@ typedef enum {
all: (BOOL)removeAll; all: (BOOL)removeAll;
@end @end
/* xxx This interface will probably change. */ /**
* Defines implementation-helper method -getFds:count:.
* <strong>This interface will probably change. Do not rely on it.</strong>
*/
// xxx This interface will probably change.
@interface NSObject (OptionalPortRunLoop) @interface NSObject (OptionalPortRunLoop)
/* If a InPort object responds to this, it is sent just before we are /** If a InPort object responds to this, it is sent just before we are
about to wait listening for input. about to wait listening for input.
This interface will probably change. */ This interface will probably change. */
- (void) getFds: (int*)fds count: (int*)count; - (void) getFds: (int*)fds count: (int*)count;

View file

@ -30,24 +30,61 @@
@class NSData, NSMutableData; @class NSData, NSMutableData;
/**
* Objects that are not standard property list constituents can adopt this
* protocol to allow themselves to be serialized by an [NSSerializer] and
* deserialized by an [NSDeserializer]. <em>Note, this mechanism has been
* deprecated and you should instead use [NSArchiver] and related facilities
* to serialize objects that are not ordinary property lists.</em>
*/
@protocol NSObjCTypeSerializationCallBack @protocol NSObjCTypeSerializationCallBack
/**
* Decodes an object of given type from data at position cursor.
*/
- (void) deserializeObjectAt: (id*)object - (void) deserializeObjectAt: (id*)object
ofObjCType: (const char *)type ofObjCType: (const char *)type
fromData: (NSData*)data fromData: (NSData*)data
atCursor: (unsigned*)cursor; atCursor: (unsigned*)cursor;
/**
* Encode the given object of given type into data, using a string not a
* binary representation.
*/
- (void) serializeObjectAt: (id*)object - (void) serializeObjectAt: (id*)object
ofObjCType: (const char *)type ofObjCType: (const char *)type
intoData: (NSMutableData*)data; intoData: (NSMutableData*)data;
@end @end
/**
* <p><em>This class is deprecated in favor of
* [NSPropertyListSerialization].</em></p>
*
* <p>It provides a means of producing a byte-array (actually string)
* representation of a property list (NSArray or NSDictionary plus limited
* contents).</p>
*/
@interface NSSerializer: NSObject @interface NSSerializer: NSObject
/**
* <p>Serialize given property list (NSArray or NSDictionary plus limited
* contents) into byte array.</p> <p><em>Deprecated in favor of
* [NSPropertyListSerialization+dataFromPropertyList:format:errorDescription:].</em></p>
*/
+ (NSData*) serializePropertyList: (id)propertyList; + (NSData*) serializePropertyList: (id)propertyList;
/**
* <p>Serialize given property list (NSArray or NSDictionary plus limited
* contents) into given mutable byte array.</p> <p><em>Deprecated in favor of
* [NSPropertyListSerialization+dataFromPropertyList:format:errorDescription:].</em></p>
*/
+ (void) serializePropertyList: (id)propertyList + (void) serializePropertyList: (id)propertyList
intoData: (NSMutableData*)d; intoData: (NSMutableData*)d;
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/* /**
* GNUstep extends serialization by having the option to make the * GNUstep extends serialization by having the option to make the
* resulting data more compact by ensuring that repeated strings * resulting data more compact by ensuring that repeated strings
* are only stored once. If the property-list has a lot of repeated * are only stored once. If the property-list has a lot of repeated
@ -60,19 +97,56 @@
* override the default behavior. * override the default behavior.
*/ */
@interface NSSerializer (GNUstep) @interface NSSerializer (GNUstep)
/**
* Specify whether to produce compacted format, with repeated strings only
* written once.
*/
+ (void) shouldBeCompact: (BOOL)flag; + (void) shouldBeCompact: (BOOL)flag;
/**
* As [NSSerializer+serializePropertyList:intoData:] but specify whether to
* produce compacted format.
*/
+ (void) serializePropertyList: (id)propertyList + (void) serializePropertyList: (id)propertyList
intoData: (NSMutableData*)d intoData: (NSMutableData*)d
compact: (BOOL)flag; compact: (BOOL)flag;
@end @end
#endif #endif
/**
* <em>This class is deprecated in favor of
* [NSPropertyListSerialization].</em> It provides a means of recovering a
* property list (NSArray or NSDictionary plus limited contents) from a
* byte-array (actually string) representation.
*/
@interface NSDeserializer: NSObject @interface NSDeserializer: NSObject
/**
* Recover a property list (NSArray or NSDictionary plus limited
* contents) from a byte array. <em>Deprecated in favor of
* [NSPropertyListSerialization+propertyListFromData:mutabilityOption:format:errorDescription:].</em>
*/
+ (id) deserializePropertyListFromData: (NSData*)data + (id) deserializePropertyListFromData: (NSData*)data
atCursor: (unsigned int*)cursor atCursor: (unsigned int*)cursor
mutableContainers: (BOOL)flag; mutableContainers: (BOOL)flag;
/**
* Recover a property list (NSArray or NSDictionary plus limited
* contents) from a byte array. <em>Deprecated in favor of
* [NSPropertyListSerialization+propertyListFromData:mutabilityOption:format:errorDescription:].</em>
*/
+ (id) deserializePropertyListFromData: (NSData*)data + (id) deserializePropertyListFromData: (NSData*)data
mutableContainers: (BOOL)flag; mutableContainers: (BOOL)flag;
/**
* Recover a property list (NSArray or NSDictionary plus limited contents)
* from a byte array. If the data at cursor has a length greater than
* length, a proxy is substituted for the actual property list as long as the
* constituent objects of that property list are not accessed.
* <em>Deprecated in favor of
* [NSPropertyListSerialization+propertyListFromData:mutabilityOption:format:errorDescription:].</em>
*/
+ (id) deserializePropertyListLazilyFromData: (NSData*)data + (id) deserializePropertyListLazilyFromData: (NSData*)data
atCursor: (unsigned*)cursor atCursor: (unsigned*)cursor
length: (unsigned)length length: (unsigned)length
@ -81,21 +155,24 @@
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/* /**
* GNUstep extends deserialization by having the option to make the * <p>GNUstep extends deserialization by having the option to make the
* resulting data more compact by ensuring that repeated strings * resulting data more compact by ensuring that repeated strings
* are only stored once. If the property-list has a lot of repeated * are only stored once. If the property-list has a lot of repeated
* strings in it, this will be more space efficient but it will be * strings in it, this will be more space efficient but it will be
* slower (though other parts of your code may speed up through more * slower (though other parts of your code may speed up through more
* efficient equality testing of uniqued strings). * efficient equality testing of uniqued strings).
* The default is NOT to deserialize uniqued strings. * The default is NOT to deserialize uniqued strings.</p>
* *
* The [+uniquing:] method turns uniquing on/off. * <p>The [+uniquing:] method turns uniquing on/off.
* Uniquing is done using a global NSCountedSet - see NSCountedSet for * Uniquing is done using a global [NSCountedSet] - see its documentation
* details. * for details.</p>
*/ */
@class NSMutableSet;
@interface NSDeserializer (GNUstep) @interface NSDeserializer (GNUstep)
/**
* Turns uniquing (collapsing of multiple instances of a single string in the
* output to one full copy plus references) on/off.
*/
+ (void) uniquing: (BOOL)flag; + (void) uniquing: (BOOL)flag;
@end @end

View file

@ -98,39 +98,77 @@
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/* /**
* Utility methods for using a counted set to handle uniquing of objects. * Utility methods for using a counted set to handle uniquing of objects.
*/ */
@interface NSCountedSet (GNU_Uniquing) @interface NSCountedSet (GNU_Uniquing)
/**
* <p>
* This method removes from the set all objects whose count is
* less than or equal to the specified value.
* </p>
* <p>
* This is useful where a counted set is used for uniquing objects.
* The set can be periodically purged of objects that have only
* been added once - and are therefore simply wasting space.
* </p>
*/
- (void) purge: (int)level; - (void) purge: (int)level;
/**
* <p>
* If the supplied object (or one equal to it as determined by
* the [-isEqual:] method) is already present in the set, the
* count for that object is incremented, the supplied object
* is released, and the object in the set is retained and returned.
* Otherwise, the supplied object is added to the set and returned.
* </p>
* <p>
* This method is useful for uniquing objects - the init method of
* a class need simply end with -
* <code>
* return [myUniquingSet unique: self];
* </code>
* </p>
*/
- (id) unique: (id)anObject; - (id) unique: (id)anObject;
@end @end
/* /*
* Functions for managing a global uniquing set. * Functions for managing a global uniquing set.
* */
/*
* GSUniquing() turns on/off the action of the GSUnique() function. * GSUniquing() turns on/off the action of the GSUnique() function.
* if uniquing is turned off, GSUnique() simply returns its argument. * if uniquing is turned off, GSUnique() simply returns its argument.
* *
*/
void GSUniquing(BOOL flag);
/*
* GSUnique() returns an object that is equal to the one passed to it. * GSUnique() returns an object that is equal to the one passed to it.
* If the returned object is not the same object as the object passed in, * If the returned object is not the same object as the object passed in,
* the original object is released and the returned object is retained. * the original object is released and the returned object is retained.
* Thus, an -init method that wants to implement uniquing simply needs * Thus, an -init method that wants to implement uniquing simply needs
* to end with 'return GSUnique(self);' * to end with 'return GSUnique(self);'
*/ */
void GSUniquing(BOOL flag);
id GSUnique(id anObject); id GSUnique(id anObject);
/* /*
* Management functions - * Management functions -
* */
/*
* GSUPurge() can be used to purge infrequently referenced objects from the * GSUPurge() can be used to purge infrequently referenced objects from the
* set by removing any objec whose count is less than or equal to that given. * set by removing any objec whose count is less than or equal to that given.
* *
*/
void GSUPurge(unsigned count);
/*
* GSUSet() can be used to artificially set the count for a particular object * GSUSet() can be used to artificially set the count for a particular object
* Setting the count to zero will remove the object from the global set. * Setting the count to zero will remove the object from the global set.
*/ */
void GSUPurge(unsigned count);
id GSUSet(id anObject, unsigned count); id GSUSet(id anObject, unsigned count);
#endif /* NO_GNUSTEP */ #endif /* NO_GNUSTEP */

View file

@ -349,10 +349,10 @@ enum {
* added for GNUstep, to permit the isa variable to be set to another * added for GNUstep, to permit the isa variable to be set to another
* class, and GNUstep uses this to avoid conflicts with the default * class, and GNUstep uses this to avoid conflicts with the default
* implementation of NXConstantString in the ObjC runtime library (the * implementation of NXConstantString in the ObjC runtime library (the
* preprocessor is used to change all occurances of NXConstantString * preprocessor is used to change all occurences of NXConstantString
* in the source code to NSConstantString).</p> * in the source code to NSConstantString).</p>
* <p>Since GNUstep will generally use the GNUstep extension to the * <p>Since GNUstep will generally use the GNUstep extension to the
* compiler, you should never refer to the constnat string class by * compiler, you should never refer to the constant string class by
* name, but should use the [NSString+constantStringClass] method to * name, but should use the [NSString+constantStringClass] method to
* get the actual class being used for constant strings.</p> * get the actual class being used for constant strings.</p>
* What follows is a dummy declaration of the class to keep the compiler * What follows is a dummy declaration of the class to keep the compiler
@ -377,25 +377,101 @@ extern struct objc_class _NSConstantStringClassReference;
- (NSString*) immutableProxy; - (NSString*) immutableProxy;
@end @end
/**
* Provides some additional (non-standard) utility methods.
*/
@interface NSString (GSCategories) @interface NSString (GSCategories)
/**
* Alternate way to invoke <code>stringWithFormat</code> if you have or wish
* to build an explicit <code>va_list</code> structure.
*/
+ (id) stringWithFormat: (NSString*)format + (id) stringWithFormat: (NSString*)format
arguments: (va_list)argList; arguments: (va_list)argList;
/**
* Returns a string formed by removing the prefix string from the
* receiver. Raises an exception if the prefix is not present.
*/
- (NSString*) stringByDeletingPrefix: (NSString*)prefix; - (NSString*) stringByDeletingPrefix: (NSString*)prefix;
/**
* Returns a string formed by removing the suffix string from the
* receiver. Raises an exception if the suffix is not present.
*/
- (NSString*) stringByDeletingSuffix: (NSString*)suffix; - (NSString*) stringByDeletingSuffix: (NSString*)suffix;
/**
* Returns a string formed by removing leading white space from the
* receiver.
*/
- (NSString*) stringByTrimmingLeadSpaces; - (NSString*) stringByTrimmingLeadSpaces;
/**
* Returns a string formed by removing trailing white space from the
* receiver.
*/
- (NSString*) stringByTrimmingTailSpaces; - (NSString*) stringByTrimmingTailSpaces;
/**
* Returns a string formed by removing both leading and trailing
* white space from the receiver.
*/
- (NSString*) stringByTrimmingSpaces; - (NSString*) stringByTrimmingSpaces;
/**
* Returns a string in which any (and all) occurrences of
* replace in the receiver have been replaced with by.
* Returns the receiver if replace
* does not occur within the receiver. NB. an empty string is
* not considered to exist within the receiver.
*/
- (NSString*) stringByReplacingString: (NSString*)replace - (NSString*) stringByReplacingString: (NSString*)replace
withString: (NSString*)by; withString: (NSString*)by;
@end @end
/**
* GNUstep specific (non-standard) additions to the NSMutableString class.
*/
@interface NSMutableString (GSCategories) @interface NSMutableString (GSCategories)
/**
* Removes the specified suffix from the string. Raises an exception
* if the suffix is not present.
*/
- (void) deleteSuffix: (NSString*)suffix; - (void) deleteSuffix: (NSString*)suffix;
/**
* Removes the specified prefix from the string. Raises an exception
* if the prefix is not present.
*/
- (void) deletePrefix: (NSString*)prefix; - (void) deletePrefix: (NSString*)prefix;
/**
* Replaces all occurrances of the string replace with the string by
* in the receiver.<br />
* Has no effect if replace does not occur within the
* receiver. NB. an empty string is not considered to exist within
* the receiver.<br />
* Calls - replaceOccurrencesOfString:withString:options:range: passing
* zero for the options and a range from 0 with the length of the receiver.
*/
- (void) replaceString: (NSString*)replace - (void) replaceString: (NSString*)replace
withString: (NSString*)by; withString: (NSString*)by;
/**
* Removes all leading white space from the receiver.
*/
- (void) trimLeadSpaces; - (void) trimLeadSpaces;
/**
* Removes all trailing white space from the receiver.
*/
- (void) trimTailSpaces; - (void) trimTailSpaces;
/**
* Removes all leading or trailing white space from the receiver.
*/
- (void) trimSpaces; - (void) trimSpaces;
@end @end

View file

@ -82,12 +82,27 @@ GS_EXPORT NSString* NSURLFileScheme;
@end @end
@interface NSObject (NSURLClient) @interface NSObject (NSURLClient)
/**
* Some data has become available. Note that this does not mean that all data
* has become available, only that a chunk of data has arrived.
*/
- (void) URL: (NSURL*)sender - (void) URL: (NSURL*)sender
resourceDataDidBecomeAvailable: (NSData*)newBytes; resourceDataDidBecomeAvailable: (NSData*)newBytes;
/**
* Loading of resource data is complete.
*/
- (void) URLResourceDidFinishLoading: (NSURL*)sender; - (void) URLResourceDidFinishLoading: (NSURL*)sender;
/**
* Loading of resource data was canceled by programmatic request (not an error).
*/
- (void) URLResourceDidCancelLoading: (NSURL*)sender; - (void) URLResourceDidCancelLoading: (NSURL*)sender;
/**
* Loading of resource data has failed, for given human-readable reason.
*/
- (void) URL: (NSURL*)sender - (void) URL: (NSURL*)sender
resourceDidFailLoadingWithReason: (NSString*)reason; resourceDidFailLoadingWithReason: (NSString*)reason;
@end @end

View file

@ -58,7 +58,7 @@ typedef enum
/** /**
* A protocol to which clients of a handle must conform in order to * A protocol to which clients of a handle must conform in order to
* rfeceive notification of events on the handle. * receive notification of events on the handle.
*/ */
@protocol NSURLHandleClient @protocol NSURLHandleClient
/** /**

View file

@ -29,105 +29,315 @@
@class NSString; @class NSString;
/**
* The <code>NSValue</code> class can wrap a single primitive value as an
* object so it can be used in the containers and other places where an object
* reference is needed. Once initialized, an <code>NSValue</code> is
* immutable, and there is no <code>NSMutableValue</code> class. You
* initialize it by giving it a pointer to the primitive value, and you should
* be careful this does not get freed until after the <code>NSValue</code> is
* no longer used.
*/
@interface NSValue : NSObject <NSCopying, NSCoding> @interface NSValue : NSObject <NSCopying, NSCoding>
// Allocating and Initializing // Allocating and Initializing
/**
* Create new instance with specified value (a pointer) of given type, which
* is a string code obtainable through the compile-time operator
* <code>@encode(...)</code>. For example:
<example>
NSValue *theValue = [NSValue value: &amp;n withObjCType: @encode(int)];
</example>
*/
+ (NSValue*) value: (const void*)value withObjCType: (const char*)type; + (NSValue*) value: (const void*)value withObjCType: (const char*)type;
/**
* Create new instance holding anObject. This is useful if you want to add
* anObject to a collection such as [NSArray] but don't want it to be retained
* (a weak reference).
*/
+ (NSValue*) valueWithNonretainedObject: (id)anObject; + (NSValue*) valueWithNonretainedObject: (id)anObject;
/**
* Convenience method to create instance holding an <code>NSPoint</code>
* structure.
*/
+ (NSValue*) valueWithPoint: (NSPoint)point; + (NSValue*) valueWithPoint: (NSPoint)point;
/**
* Convenience method to create instance holding a pointer. Same as
* using <code>@encode(void *)</code> in +value:withObjCType: .
*/
+ (NSValue*) valueWithPointer: (const void*)pointer; + (NSValue*) valueWithPointer: (const void*)pointer;
/**
* Convenience method to create instance holding an <code>NSRange</code>
* structure.
*/
+ (NSValue*) valueWithRange: (NSRange)range; + (NSValue*) valueWithRange: (NSRange)range;
/**
* Convenience method to create instance holding an <code>NSRect</code>
* structure.
*/
+ (NSValue*) valueWithRect: (NSRect)rect; + (NSValue*) valueWithRect: (NSRect)rect;
/**
* Convenience method to create instance holding an <code>NSSize</code>
* structure.
*/
+ (NSValue*) valueWithSize: (NSSize)size; + (NSValue*) valueWithSize: (NSSize)size;
#ifndef STRICT_OPENSTEP #ifndef STRICT_OPENSTEP
/**
* Synonym for value:withObjCType: .
*/
+ (NSValue*) valueWithBytes: (const void*)value objCType: (const char*)type; + (NSValue*) valueWithBytes: (const void*)value objCType: (const char*)type;
/* Designated initializer for all concrete subclasses */
/** <init/>
* Initialize with value of type, parallel to value:withObjCType: .
*/
- (id) initWithBytes: (const void*)data objCType: (const char*)type; - (id) initWithBytes: (const void*)data objCType: (const char*)type;
/**
* Compares this instance to another <code>NSValue</code>. For equality,
* both contents and declared type of the two values must match.
*/
- (BOOL) isEqualToValue: (NSValue*)other; - (BOOL) isEqualToValue: (NSValue*)other;
#endif #endif
// Accessing Data // Accessing Data
/**
* Copies bytes from the pointer receiver was initialized with into buffer
* pointed to by value. Number of bytes copied is determined by the type. If
* type was a void * pointer or object id, the memory address itself is
* copied.
*/
- (void) getValue: (void*)value; - (void) getValue: (void*)value;
/**
* Returns the string <code>@encode(...)</code> compatible type the receiver
* was initialized with.
*/
- (const char*) objCType; - (const char*) objCType;
/**
* If receiver was initialized with an object ID, return it, else raises
* <code>NSInternalInconsistencyException</code>.
*/
- (id) nonretainedObjectValue; - (id) nonretainedObjectValue;
/**
* If receiver was initialized with a void * pointer, return it, else raises
* <code>NSInternalInconsistencyException</code>.
*/
- (void*) pointerValue; - (void*) pointerValue;
/**
* If receiver was initialized with an <code>NSRange</code> value, return it,
* else raises <code>NSInternalInconsistencyException</code>.
*/
- (NSRange) rangeValue; - (NSRange) rangeValue;
/**
* If receiver was initialized with an <code>NSRect</code> value, return it,
* else raises <code>NSInternalInconsistencyException</code>.
*/
- (NSRect) rectValue; - (NSRect) rectValue;
/**
* If receiver was initialized with an <code>NSSize</code> value, return it,
* else raises <code>NSInternalInconsistencyException</code>.
*/
- (NSSize) sizeValue; - (NSSize) sizeValue;
/**
* If receiver was initialized with an <code>NSPoint</code> value, return it,
* else raises <code>NSInternalInconsistencyException</code>.
*/
- (NSPoint) pointValue; - (NSPoint) pointValue;
@end @end
/**
* Subclass of [NSValue] offering convenience methods for initializing from
* and accessing as any C primitive numeric type. On access, the value will
* be type-converted if necessary, using standard C conversion rules.
*/
@interface NSNumber : NSValue <NSCopying,NSCoding> @interface NSNumber : NSValue <NSCopying,NSCoding>
// Allocating and Initializing // Allocating and Initializing
/** New instance from boolean value. */
+ (NSNumber*) numberWithBool: (BOOL)value; + (NSNumber*) numberWithBool: (BOOL)value;
/** New instance from signed char value. */
+ (NSNumber*) numberWithChar: (signed char)value; + (NSNumber*) numberWithChar: (signed char)value;
/** New instance from double value. */
+ (NSNumber*) numberWithDouble: (double)value; + (NSNumber*) numberWithDouble: (double)value;
/** New instance from float value. */
+ (NSNumber*) numberWithFloat: (float)value; + (NSNumber*) numberWithFloat: (float)value;
/** New instance from (signed) int value. */
+ (NSNumber*) numberWithInt: (signed int)value; + (NSNumber*) numberWithInt: (signed int)value;
/** New instance from (signed) long value. */
+ (NSNumber*) numberWithLong: (signed long)value; + (NSNumber*) numberWithLong: (signed long)value;
/** New instance from (signed) long long value. */
+ (NSNumber*) numberWithLongLong: (signed long long)value; + (NSNumber*) numberWithLongLong: (signed long long)value;
/** New instance from (signed) short value. */
+ (NSNumber*) numberWithShort: (signed short)value; + (NSNumber*) numberWithShort: (signed short)value;
/** New instance from unsigned char value. */
+ (NSNumber*) numberWithUnsignedChar: (unsigned char)value; + (NSNumber*) numberWithUnsignedChar: (unsigned char)value;
/** New instance from unsigned int value. */
+ (NSNumber*) numberWithUnsignedInt: (unsigned int)value; + (NSNumber*) numberWithUnsignedInt: (unsigned int)value;
/** New instance from unsigned long value. */
+ (NSNumber*) numberWithUnsignedLong: (unsigned long)value; + (NSNumber*) numberWithUnsignedLong: (unsigned long)value;
/** New instance from unsigned long long value. */
+ (NSNumber*) numberWithUnsignedLongLong: (unsigned long long)value; + (NSNumber*) numberWithUnsignedLongLong: (unsigned long long)value;
/** New instance from unsigned short value. */
+ (NSNumber*) numberWithUnsignedShort: (unsigned short)value; + (NSNumber*) numberWithUnsignedShort: (unsigned short)value;
/** Initialize from boolean value. */
- (id) initWithBool: (BOOL)value; - (id) initWithBool: (BOOL)value;
/** Initialize from signed char value. */
- (id) initWithChar: (signed char)value; - (id) initWithChar: (signed char)value;
/** Initialize from double value. */
- (id) initWithDouble: (double)value; - (id) initWithDouble: (double)value;
/** Initialize from float value. */
- (id) initWithFloat: (float)value; - (id) initWithFloat: (float)value;
/** Initialize from (signed) int value. */
- (id) initWithInt: (signed int)value; - (id) initWithInt: (signed int)value;
/** Initialize from (signed) long value. */
- (id) initWithLong: (signed long)value; - (id) initWithLong: (signed long)value;
/** Initialize from (signed) long long value. */
- (id) initWithLongLong: (signed long long)value; - (id) initWithLongLong: (signed long long)value;
/** Initialize from (signed) short value. */
- (id) initWithShort: (signed short)value; - (id) initWithShort: (signed short)value;
/** Initialize from unsigned char value. */
- (id) initWithUnsignedChar: (unsigned char)value; - (id) initWithUnsignedChar: (unsigned char)value;
/** Initialize from unsigned int value. */
- (id) initWithUnsignedInt: (unsigned int)value; - (id) initWithUnsignedInt: (unsigned int)value;
/** Initialize from unsigned long value. */
- (id) initWithUnsignedLong: (unsigned long)value; - (id) initWithUnsignedLong: (unsigned long)value;
/** Initialize from unsigned long long value. */
- (id) initWithUnsignedLongLong: (unsigned long long)value; - (id) initWithUnsignedLongLong: (unsigned long long)value;
/** Initialize from unsigned short value. */
- (id) initWithUnsignedShort: (unsigned short)value; - (id) initWithUnsignedShort: (unsigned short)value;
// Accessing Data // Accessing Data
/**
* Return value as a BOOL; this will in fact be a char value converted
* if necessary from type initialized with; if you wish to consider anything
* nonzero TRUE do not compare directly to YES, but use <code>'!= NO'</code>.
*/
- (BOOL) boolValue; - (BOOL) boolValue;
/** Returns value as a signed char, converting if necessary. */
- (signed char) charValue; - (signed char) charValue;
/** Returns value as a double, converting if necessary. */
- (double) doubleValue; - (double) doubleValue;
/** Returns value as a float, converting if necessary. */
- (float) floatValue; - (float) floatValue;
/** Returns value as a (signed) int, converting if necessary. */
- (signed int) intValue; - (signed int) intValue;
- (signed long long) longLongValue; /** Returns value as a (signed) long, converting if necessary. */
- (signed long) longValue; - (signed long) longValue;
/** Returns value as a (signed) long long, converting if necessary. */
- (signed long long) longLongValue;
/** Returns value as a (signed) short, converting if necessary. */
- (signed short) shortValue; - (signed short) shortValue;
- (NSString*) stringValue; /** Returns value as an unsigned char, converting if necessary. */
- (unsigned char) unsignedCharValue; - (unsigned char) unsignedCharValue;
/** Returns value as an unsigned int, converting if necessary. */
- (unsigned int) unsignedIntValue; - (unsigned int) unsignedIntValue;
- (unsigned long long) unsignedLongLongValue; /** Returns value as an unsigned long, converting if necessary. */
- (unsigned long) unsignedLongValue; - (unsigned long) unsignedLongValue;
/** Returns value as an unsigned long long, converting if necessary. */
- (unsigned long long) unsignedLongLongValue;
/** Returns value as an unsigned short, converting if necessary. */
- (unsigned short) unsignedShortValue; - (unsigned short) unsignedShortValue;
/** Returns -description . */
- (NSString*) stringValue;
/**
* Returns the string representation of this number using a non-localised
* conversion (decimal point is '.' irrespective of the locale).
*/
- (NSString*) description; - (NSString*) description;
/**
* <p>
* Produces a string representation of the number. For a boolean
* this will be either 'true' or 'false'. For other numbers the
* format is produced using the initWithFormat:locale:... method
* of NSString, and the format depends on the type of number as
* follows -
* </p>
* <deflist>
* <term>char</term>
* <desc>%i</desc>
* <term> short</term>
* <desc>%hi</desc>
* <term> int</term>
* <desc>%i</desc>
* <term> long</term>
* <desc>%li</desc>
* <term> long long</term>
* <desc>%lli</desc>
* <term> unsigned char</term>
* <desc>%u</desc>
* <term> unsigned short</term>
* <desc>%hu</desc>
* <term> unsigned int</term>
* <desc>%u</desc>
* <term> unsigned long</term>
* <desc>%lu</desc>
* <term> unsigned long long</term>
* <desc>%llu</desc>
* <term> float</term>
* <desc>%0.7g</desc>
* <term> double</term>
* <desc>%0.16g</desc>
* </deflist>
*/
- (NSString*) descriptionWithLocale: (NSDictionary*)locale; - (NSString*) descriptionWithLocale: (NSDictionary*)locale;
/**
* Compares receiver with otherNumber, using C type conversion if necessary,
* and returns <code>NSOrderedAscending</code>,
* <code>NSOrderedDescending</code>, or <code>NSOrderedSame</code> depending
* on whether it is less than, greater than, or equal to otherNumber.
*/
- (NSComparisonResult) compare: (NSNumber*)otherNumber; - (NSComparisonResult) compare: (NSNumber*)otherNumber;
/**
* Returns whether receiver and otherNumber represent the same numerical value.
*/
- (BOOL) isEqualToNumber: (NSNumber*)otherNumber; - (BOOL) isEqualToNumber: (NSNumber*)otherNumber;
@end @end
#ifndef NO_GNUSTEP #ifndef NO_GNUSTEP
/**
* GNUstep specific (non-standard) additions to the NSNumber class.
*/
@interface NSNumber(GSCategories) @interface NSNumber(GSCategories)
/**
* Parses string as a <code>double</code>, <code>int</code>, or <code>unsigned
* int</code> depending on what characters are present. Uses
* <code>atof</code> and <code>atoi</code> which don't report errors, so be
* careful if the string might contain an invalid value.
*/
+ (NSValue*) valueFromString: (NSString *)string; + (NSValue*) valueFromString: (NSString *)string;
@end @end
/* Note: This method is not in the OpenStep spec, but they makes /** Note: Defines a method that is not in the OpenStep spec, but makes
subclassing easier. */ subclassing easier. */
@interface NSValue (Subclassing) @interface NSValue (Subclassing)
/* Used by value: withObjCType: to determine the concrete subclass to alloc */ /** Used by value: withObjCType: to determine the concrete subclass to alloc. */
+ (Class) valueClassWithObjCType: (const char*)type; + (Class) valueClassWithObjCType: (const char*)type;
@end @end