Up
Authors
- Richard Frith-Macdonald
-
Copyright: (C) 2005 Free Software Foundation, Inc.
NSThread* GSCurrentThread();
Description forthcoming.
NSMutableDictionary* GSCurrentThreadDictionary();
Description forthcoming.
NSString* GSDebugFunctionMsg(const char* func, const char* file, int line, NSString* fmt);
Description forthcoming.
NSString* GSDebugMethodMsg(id obj, SEL sel, const char* file, int line, NSString* fmt);
Description forthcoming.
BOOL GSDebugSet(NSString* level);
Description forthcoming.
NSString* GSEncodingName(NSStringEncoding availableEncodingValue);
Description forthcoming.
NSString* GetEncodingName(NSStringEncoding availableEncodingValue);
Description forthcoming.
void NSDecimalFromComponents(NSDecimal* result, unsigned long long int mantissa, short int exponent, BOOL negative);
Description forthcoming.
NSArray* NSStandardLibraryPaths();
Description forthcoming.
void GSIArrayAddItem(GSIArray array, GSIArrayItem item);
Description forthcoming.
void GSIArrayAddItemNoRetain(GSIArray array, GSIArrayItem item);
Description forthcoming.
unsigned int GSIArrayCapacity(GSIArray array);
Description forthcoming.
void GSIArrayCheckSort(GSIArray array, NSComparisonResult(*) sorter);
Description forthcoming.
void GSIArrayClear(GSIArray array);
Description forthcoming.
GSIArray GSIArrayCopyWithZone(GSIArray array, NSZone* zone);
Description forthcoming.
unsigned int GSIArrayCount(GSIArray array);
Description forthcoming.
void GSIArrayEmpty(GSIArray array);
Description forthcoming.
void GSIArrayGrow(GSIArray array);
Description forthcoming.
void GSIArrayGrowTo(GSIArray array, unsigned int next);
Description forthcoming.
GSIArray GSIArrayInitWithZoneAndCapacity(GSIArray array, NSZone* zone, size_t capacity);
Description forthcoming.
GSIArray GSIArrayInitWithZoneAndStaticCapacity(GSIArray array, NSZone* zone, size_t capacity, GSIArrayItem* buffer);
Description forthcoming.
void GSIArrayInsertItem(GSIArray array, GSIArrayItem item, unsigned int index);
Description forthcoming.
void GSIArrayInsertItemNoRetain(GSIArray array, GSIArrayItem item, unsigned int index);
Description forthcoming.
void GSIArrayInsertSorted(GSIArray array, GSIArrayItem item, NSComparisonResult(*) sorter);
Description forthcoming.
void GSIArrayInsertSortedNoRetain(GSIArray array, GSIArrayItem item, NSComparisonResult(*) sorter);
Description forthcoming.
unsigned int GSIArrayInsertionPosition(GSIArray array, GSIArrayItem item, NSComparisonResult(*) sorter);
Description forthcoming.
GSIArrayItem GSIArrayItemAtIndex(GSIArray array, unsigned int index);
Description forthcoming.
GSIArrayItem* GSIArrayItems(GSIArray array);
Description forthcoming.
GSIArrayItem GSIArrayLastItem(GSIArray array);
Description forthcoming.
void GSIArrayRemoveAllItems(GSIArray array);
Description forthcoming.
void GSIArrayRemoveItemAtIndex(GSIArray array, unsigned int index);
Description forthcoming.
void GSIArrayRemoveItemAtIndexNoRelease(GSIArray array, unsigned int index);
Description forthcoming.
void GSIArrayRemoveItemsFromIndex(GSIArray array, unsigned int index);
Description forthcoming.
void GSIArrayRemoveLastItem(GSIArray array);
Description forthcoming.
void GSIArraySetItemAtIndex(GSIArray array, GSIArrayItem item, unsigned int index);
Description forthcoming.
GSIMapNode GSIMapAddKey(GSIMapTable map, GSIMapKey key);
Description forthcoming.
GSIMapNode GSIMapAddKeyNoRetain(GSIMapTable map, GSIMapKey key);
Description forthcoming.
void GSIMapAddNodeToBucket(GSIMapBucket bucket, GSIMapNode node);
Description forthcoming.
void GSIMapAddNodeToMap(GSIMapTable map, GSIMapNode node);
Description forthcoming.
GSIMapNode GSIMapAddPair(GSIMapTable map, GSIMapKey key, GSIMapVal value);
Description forthcoming.
GSIMapNode GSIMapAddPairNoRetain(GSIMapTable map, GSIMapKey key, GSIMapVal value);
Description forthcoming.
GSIMapBucket GSIMapBucketForKey(GSIMapTable map, GSIMapKey key);
Description forthcoming.
void GSIMapCleanMap(GSIMapTable map);
Description forthcoming.
void GSIMapEmptyMap(GSIMapTable map);
Description forthcoming.
void GSIMapEndEnumerator(GSIMapEnumerator enumerator);
Tidies up after map enumeration... effectively destroys the enumerator.
GSIMapBucket GSIMapEnumeratorBucket(GSIMapEnumerator enumerator);
Returns the bucket from which the next node in the enumeration will come. Once the next node has been enumerated, you can use the bucket and node to remove the node from the map using the
GSIMapRemoveNodeFromMap()
function.
GSIMapEnumerator_t GSIMapEnumeratorForMap(GSIMapTable map);
Enumerating
Create an return an enumerator for the specified
map.
You must call
GSIMapEndEnumerator()
when you have finished with the enumerator.
WARNING You should not alter a
map while an enumeration is in progress. The results of doing so are reasonably unpredictable.
Remember, DON'T MESS WITH A MAP WHILE YOU'RE ENUMERATING IT.
GSIMapNode GSIMapEnumeratorNextNode(GSIMapEnumerator enumerator);
Returns the next node in the map, or a nul pointer if at the end.
void GSIMapFreeNode(GSIMapTable map, GSIMapNode node);
Description forthcoming.
void GSIMapInitWithZoneAndCapacity(GSIMapTable map, NSZone* zone, size_t capacity);
Description forthcoming.
void GSIMapLinkNodeIntoBucket(GSIMapBucket bucket, GSIMapNode node);
Description forthcoming.
void GSIMapMoreNodes(GSIMapTable map, unsigned int required);
Description forthcoming.
GSIMapNode GSIMapNewNode(GSIMapTable map, GSIMapKey key);
Description forthcoming.
GSIMapNode GSIMapNodeForKey(GSIMapTable map, GSIMapKey key);
Description forthcoming.
GSIMapNode GSIMapNodeForKeyInBucket(GSIMapTable map, GSIMapBucket bucket, GSIMapKey key);
Description forthcoming.
GSIMapNode GSIMapNodeForSimpleKey(GSIMapTable map, GSIMapKey key);
Description forthcoming.
GSIMapBucket GSIMapPickBucket(unsigned int hash, GSIMapBucket buckets, size_t bucketCount);
Description forthcoming.
void GSIMapRemangleBuckets(GSIMapTable map, GSIMapBucket old_buckets, size_t old_bucketCount, GSIMapBucket new_buckets, size_t new_bucketCount);
Description forthcoming.
void GSIMapRemoveKey(GSIMapTable map, GSIMapKey key);
Description forthcoming.
void GSIMapRemoveNodeFromBucket(GSIMapBucket bucket, GSIMapNode node);
Description forthcoming.
void GSIMapRemoveNodeFromMap(GSIMapTable map, GSIMapBucket bkt, GSIMapNode node);
Description forthcoming.
void GSIMapResize(GSIMapTable map, size_t new_capacity);
Description forthcoming.
void GSIMapRightSizeMap(GSIMapTable map, size_t capacity);
Description forthcoming.
void GSIMapUnlinkNodeFromBucket(GSIMapBucket bucket, GSIMapNode node);
Description forthcoming.
void GSAddMethodList(Class cls, GSMethodList list, BOOL toInstanceMethods);
Add the method list to the class as the first list to be searched during method invocation for the given class. Depending on toInstanceMethods, this list will be added as an instance or a class method list. If the list is in use by another class, behavior is undefined. Create a new list with GSAllocMethodList()
or use GSRemoveMethodList()
to remove a list before inserting it in a class.
After method list manipulation you should call GSFlushMethodCacheForClass()
for the changes to take effect.
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
GSMethodList GSAllocMethodList(unsigned int count);
Returns a pointer to objc_malloc'ed memory large enough to hold a struct objc_method_list with 'count' number of struct objc_method entries. The memory returned is initialized with 0, including the method count and next method list fields.
This function is intended for use in conjunction with GSAppendMethodToList()
to fill the memory and GSAddMethodList()
to activate the method list.
After method list manipulation you should call GSFlushMethodCacheForClass()
for the changes to take effect.
WARNING: Manipulating the runtime structures can be hazardous!
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
void GSAllocateMutexAt(objc_mutex_t* request);
Allocate a new objc_mutex_t and store it in the location pointed to by
request. A mutex is only created if the value pointed to by
request is NULL. This function is thread safe in the sense that multiple threads my call this function with the same value of
request and only one will actually set the mutex. It is the users responsibility that no one else attempts to set the mutex pointed to. This function should be used with objc_mutex_t variables which were statically initialized to NULL like:
void function (void) { static objc_mutex_t my_lock = NULL; if (my_lock == NULL) GSAllocateMutexAt(&my_lock); objc_mutex_lock(my_lock); do_work (); objc_mutex_unlock(my_lock); }
void GSAppendMethodToList(GSMethodList list, SEL sel, const char* types, IMP imp, BOOL isFree);
Inserts the method described by sel, types and imp into the slot of the list's method_count incremented by 1. This function does not and cannot check whether the list provided has the necessary capacity.
The GNU runtime makes a difference between method lists that are "free standing" and those that "attached" to classes. For "free standing" method lists (e.g. created with GSAllocMethodList()
that have not been added to a class or those which have been removed via GSRemoveMethodList()) isFree must be passed YES
. When manipulating "attached" method lists, specify NO
.
This function is intended for use in conjunction with GSAllocMethodList()
to allocate the list and GSAddMethodList()
to activate the method list.
After method list manipulation you should call GSFlushMethodCacheForClass()
for the changes to take effect.
WARNING: Manipulating the runtime structures can be hazardous!
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
void* GSAutoreleasedBuffer(unsigned int size);
Quickly return autoreleased data storage area.
GSIVar GSCGetInstanceVariableDefinition(Class cls, const char* name);
Returns the pointer to the instance variable structure for the instance variable name in the specified class. This function searches the specified class and its superclasses.
It should be safe to use this function in +load
implementations.
This function should currently (June 2003) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
Class GSClassFromName(const char* name);
Given a class name, return the corresponding class or a nul pointer if the class cannot be found.
If the argument is nil
, return a nul pointer.
unsigned int GSClassList(Class* buffer, unsigned int max, BOOL clearCache);
Fills a nil
terminated array of Class objects referenced by buffer with max number of classes registered with the objc runtime. The provided buffer must be large enough to hold max + 1 Class objects. If buffer is nil
, the function returns the number of Class objects that would be inserted if the buffer is large enough. Otherwise returns the number of Class objects that did not fit into the provided buffer. This function keeps a cache of the class list for future invocations when used with the GNU runtime. If clearCache is YES
, this cache will be invalidated and rebuild. The flag has no effect for the NeXT runtime. This function is provided as consistent API to both runtimes. In the case of the GNU runtime it is likely more efficient to use objc_next_class()
to iterate over the classes.
const char* GSClassNameFromObject(id obj);
Return the name of the object's class, or a nul pointer if no object was supplied.
BOOL GSFindInstanceVariable(id obj, const char* name, const char** type, unsigned int* size, int* offset);
void GSFlushMethodCacheForClass(Class cls);
Flushes the cached method dispatch table for the class. Call this function after any manipulations in the method structures.
It should be safe to use this function in +load
implementations.
This function should currently (June 2003) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
GSMethod GSGetClassMethod(Class cls, SEL sel);
Description forthcoming.
GSMethod GSGetClassMethodNotInherited(Class cls, SEL sel);
Description forthcoming.
GSMethod GSGetInstanceMethod(Class cls, SEL sel);
Description forthcoming.
GSMethod GSGetInstanceMethodNotInherited(Class cls, SEL sel);
Description forthcoming.
GSMethod GSGetMethod(Class cls, SEL sel, BOOL searchInstanceMethods, BOOL searchSuperClasses);
Returns the pointer to the method structure for the selector in the specified class. Depending on searchInstanceMethods, this function searches either instance or class methods. Depending on searchSuperClassesm this function searches either the specified class only or also its superclasses.
To obtain the implementation pointer IMP use returnValue->method_imp which should be safe across all runtimes.
It should be safe to use this function in +load
implementations.
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
id GSGetValue(NSObject* self, NSString* key, SEL sel, const char* type, unsigned int size, int offset);
void GSGetVariable(id obj, int offset, unsigned int size, void* data);
const char* GSLastErrorStr(long int error_id);
Returns a system error message on a variety of systems
GSMethod GSMethodFromList(GSMethodList list, SEL sel, BOOL isFree);
Returns the (first) GSMethod contained in the supplied list that corresponds to sel. Returns NULL if none is found.
The GNU runtime makes a difference between method lists that are "free standing" and those that "attached" to classes. For "free standing" method lists (e.g. created with GSAllocMethodList()
that have not been added to a class or those which have been removed via GSRemoveMethodList()) isFree must be passed YES
. When manipulating "attached" method lists, specify NO
.
GSMethodList GSMethodListForSelector(Class cls, SEL selector, void** iterator, BOOL searchInstanceMethods);
Returns a method list of the class that contains the selector. Depending on searchInstanceMethods either instance or class methods are searched. Returns NULL if none are found. This function does not search the superclasses method lists. Call this method with the address of a void *
pointing to NULL to obtain the first (active) method list containing the selector. Subsequent calls will return further method lists which contain the selector. If none are found, it returns NULL. You may instead pass NULL as the iterator in which case the first method list containing the selector will be returned. Do not call it with an uninitialized iterator. If either class or selector are NULL the function returns NULL. If subsequent calls to this function with the same non-NULL iterator yet different searchInstanceMethods value are called, the behavior is undefined.
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
const char* GSNameFromClass(Class cls);
Return the name of the supplied class, or a nul pointer if no class was supplied.
const char* GSNameFromSelector(SEL sel);
Return the name of the supplied selector, or a nul pointer if no selector was supplied.
void GSObjCAddClassBehavior(Class receiver, Class behavior);
A Behavior can be seen as a "Protocol with an implementation" or a "Class without any instance variables". A key feature of behaviors is that they give a degree of multiple inheritance.
Behavior methods, when added to a class, override the class's superclass methods, but not the class's methods.
It's not the case that a class adding behaviors from another class must have "no instance vars". The receiver class just has to have the same layout as the behavior class (optionally with some additional ivars after those of the behavior class).
This function provides Behaviors without adding any new syntax to the Objective C language. Simply define a class with the methods you want to add, then call this function with that class as the behavior argument.
This function should be called in the +initialize
method of the receiver.
If you add several behaviors to a class, be aware that the order of the additions is significant.
void GSObjCAddClasses(NSArray* classes);
Description forthcoming.
NSArray* GSObjCAllSubclassesOfClass(Class cls);
Returns an autoreleased array of subclasses of Class cls, including subclasses of subclasses.
Class GSObjCClass(id obj);
GSObjCClass()
return the class of an instance. Returns a nul pointer if the argument is
nil
.
NSArray* GSObjCDirectSubclassesOfClass(Class cls);
Returns an autoreleased array containing subclasses directly descendent of Class cls.
BOOL GSObjCFindVariable(id obj, const char* name, const char** type, unsigned int* size, int* offset);
This function is used to locate information about the instance variable of obj called name. It returns YES
if the variable was found, NO
otherwise. If it returns YES
, then the values pointed to by type, size, and offset will be set (except where they are null pointers).
GSIVar GSObjCGetInstanceVariableDefinition(Class cls, NSString* name);
Returns the pointer to the instance variable structure for the instance variable name in the specified class. This function searches the specified class and its superclasses.
It is not necessarily safe to use this function in +load
implementations.
This function should currently (June 2003) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
id GSObjCGetValue(NSObject* self, NSString* key, SEL sel, const char* type, unsigned int size, int offset);
This is used internally by the key-value coding methods, to get a value from an object either via an accessor method (if sel is supplied), or via direct access (if type, size, and offset are supplied).
Automatic conversion between NSNumber and C scalar types is performed.
If type is null and can't be determined from the selector, the [NSObject -handleQueryWithUnboundKey:]
method is called to try to get a value.
void GSObjCGetVariable(id obj, int offset, unsigned int size, void* data);
Gets the value from an instance variable in obj
This function performs no checking... you should use it only where you are providing information from a call to GSFindVariable()
and you know that the data area provided is the correct size.
BOOL GSObjCIsClass(Class cls);
GSObjCIsClass()
tests to see if an
id is a class. Returns
NO
if the argument is
nil
.
BOOL GSObjCIsInstance(id obj);
GSObjCIsInstance()
tests to see if an
id is an instance. Returns
NO
if the argument is
nil
.
BOOL GSObjCIsKindOf(Class cls, Class other);
GSObjCIsKindOf()
tests to see if a class inherits from another class The argument to this function must NOT be
nil
.
NSValue* GSObjCMakeClass(NSString* name, NSString* superName, NSDictionary* iVars);
references: http://www.macdevcenter.com/pub/a/mac/2002/05/31/runtime_parttwo.html?page=1 http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/9objc_runtime_reference/chapter_5_section_1.html http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/9objc_runtime_reference/chapter_5_section_21.html ObjcRuntimeUtilities.m by Nicola Pero
Create a Class structure for use by the ObjectiveC runtime and return an NSValue object pointing to it. The class will not be added to the runtime (you must do that later using the GSObjCAddClasses()
function).
The iVars dictionary lists the instance variable names and their types.
NSArray* GSObjCMethodNames(id obj);
This method returns an array listing the names of all the instance methods available to obj, whether they belong to the class of obj or one of its superclasses.
If obj is a class, this returns the class methods.
Returns nil
if obj is nil
.
const char* GSObjCName(Class cls);
Description forthcoming.
const char* GSObjCSelectorName(SEL sel);
Description forthcoming.
const char* GSObjCSelectorTypes(SEL sel);
Description forthcoming.
void GSObjCSetValue(NSObject* self, NSString* key, id val, SEL sel, const char* type, unsigned int size, int offset);
This is used internally by the key-value coding methods, to set a value in an object either via an accessor method (if sel is supplied), or via direct access (if type, size, and offset are supplied).
Automatic conversion between NSNumber and C scalar types is performed.
If type is null and can't be determined from the selector, the [NSObject -handleTakeValue:forUnboundKey:]
method is called to try to set a value.
void GSObjCSetVariable(id obj, int offset, unsigned int size, const void* data);
Sets the value in an instance variable in
obj This function performs no checking... you should use it only where you are providing information from a call to
GSObjCFindVariable()
and you know that the
data area provided is the correct
size.
Class GSObjCSuper(Class cls);
Returns the superclass of this.
NSArray* GSObjCVariableNames(id obj);
This method returns an array listing the names of all the instance variables present in the instance obj, whether they belong to the class of obj or one of its superclasses.
Returns nil
if obj is nil
.
int GSObjCVersion(Class cls);
Returns the version number of this.
NSZone* GSObjCZone(NSObject* obj);
Return the zone in which an object belongs, without using the zone method
BOOL GSPrintf(FILE* fptr, NSString* format,...);
Prints a message to fptr using the format string provided and any additional arguments. The format string is interpreted as by the NSString formatted initialisers, and understands the '%@' syntax for printing an object.
The data is written to the file pointer in the default CString encoding if possible, as a UTF8 string otherwise.
This function is recommended for printing general log messages. For debug messages use NSDebugLog()
and friends. For error logging use NSLog()
, and for warnings you might consider NSWarnLog()
.
Protocol* GSProtocolFromName(const char* name);
Returns a protocol object with the corresponding
name. This function searches the registered classes for any protocol with the supplied
name. If one is found, it is cached in for future requests. If efficiency is a factor then use
GSRegisterProtocol()
to insert a protocol explicitly into the cache used by this function. If no protocol is found this function returns
nil
.
void GSRegisterProtocol(Protocol* proto);
BOOL GSRemoveMethodFromList(GSMethodList list, SEL sel, BOOL isFree);
Removes the method identified by sel from the method list moving the following methods up in the list, leaving the last entry blank. After this call, all references of previous GSMethodFromList()
calls with this list should be considered invalid. If the values they referenced are needed, they must be copied to external buffers before this function is called.
Returns YES
if the a matching method was found a removed, NO
otherwise.
The GNU runtime makes a difference between method lists that are "free standing" and those that "attached" to classes. For "free standing" method lists (e.g. created with GSAllocMethodList()
that have not been added to a class or those which have been removed via GSRemoveMethodList()) isFree must be passed YES
. When manipulating "attached" method lists, specify NO
.
After method list manipulation you should call GSFlushMethodCacheForClass()
for the changes to take effect.
WARNING: Manipulating the runtime structures can be hazardous!
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
void GSRemoveMethodList(Class cls, GSMethodList list, BOOL fromInstanceMethods);
Removes the method list from the classes instance or class method lists depending on fromInstanceMethods. If the list is not part of the class, behavior is undefined.
After method list manipulation you should call GSFlushMethodCacheForClass()
for the changes to take effect.
This function should currently (June 2004) be considered WIP. Please follow potential changes (Name, parameters,...) closely until it stabilizes.
SEL GSSelectorFromName(const char* name);
Return a selector matching the specified name, or nil
if no name is supplied. The returned selector could be any one with the name.
If no selector exists, returns nil
.
SEL GSSelectorFromNameAndTypes(const char* name, const char* types);
Return the selector for the specified name and types. Returns a nul pointer if the name is nul. Uses any available selector if the types argument is nul.
Creates a new selector if necessary.
BOOL GSSelectorTypesMatch(const char* types1, const char* types2);
Compare only the type information ignoring qualifiers, the frame layout and register markers. Unlike sel_types_match, this function also handles comparisons of types with and without any layout information.
void GSSetValue(NSObject* self, NSString* key, id val, SEL sel, const char* type, unsigned int size, int offset);
void GSSetVariable(id obj, int offset, unsigned int size, const void* data);
const char* GSTypesFromSelector(SEL sel);
Return the type information from the specified selector. May return a nul pointer if the selector was a nul pointer or if it was not typed.
NSString* GSFindNamedFile(NSArray* paths, NSString* aName, NSString* anExtension);
Try to locate file/directory (aName).( anExtension (aName).(anExtension) in paths. Will return the first found or nil
if nothing is found.
void behavior_class_add_category(Class class, struct objc_category* category);
Description forthcoming.
void behavior_class_add_class(Class class, Class behavior);
Description forthcoming.
void behavior_class_add_methods(Class class, struct objc_method_list* methods);
Description forthcoming.
void behavior_set_debug(int i);
Description forthcoming.
NSStringEncoding GSEncodingForRegistry(NSString* registry, NSString* encoding);
Returns the NSStringEncoding that matches the specified character set registry and encoding information. For instance, for the iso8859-5 character set, the registry is iso8859 and the encoding is 5, and the returned NSStringEncoding is NSISOCyrillicStringEncoding. If there is no specific encoding, use @"0". Returns GSUndefinedEncoding if there is no match.
NSStringEncoding GSEncodingFromLocale(const char* clocale);
Try to deduce the string encoding from the locale string clocale. This function looks in the Locale.encodings file installed as part of GNUstep Base if the encoding cannot be deduced from the clocale string itself. If clocale isn't set or no match can be found, returns GSUndefinedEncoding.
NSString* GSEncodingName(NSStringEncoding encoding);
Description forthcoming.
BOOL GSFromUnicode(unsigned char** dst, unsigned int* size, const unichar* src, unsigned int slen, NSStringEncoding enc, NSZone* zone, unsigned int options);
Function to convert from 16-bit unicode to 8-bit data.
The dst argument is a pointer to a pointer to a buffer in which the converted data is to be stored. If it is a null pointer, this function discards converted data, and is used only to determine the length of the converted data. If the zone argument is non-nul, the function is free to allocate a larger buffer if necessary, and store this new buffer in the dst argument. It will *NOT* deallocate the original buffer!
The size argument is a pointer to the initial size of the destination buffer. If the function changes the buffer size, this value will be altered to the new size. This is measured in bytes.
The src argument is a pointer to the 16-bit unicode string which is to be converted to 8-bit data.
The slen argument is the length of the 16-bit unicode string which is to be converted to 8-bit data. This is measured in 16-bit characters, not bytes.
The enc argument specifies the encoding type of the 8-bit byte sequence which is to be produced from the 16-bit unicode.
The zone argument specifies a memory zone in which the function may allocate a buffer to return data in. If this is nul, the function will fail if the originally supplied buffer is not big enough (unless dst is a null pointer... indicating that converted data is to be discarded).
The options argument controls some special behavior.
-
If GSUniStrict is set, the function will fail if a character is encountered in the source which can't be converted. Otherwise, some approximation or marker will be placed in the destination.
-
If GSUniTerminate is set, the function is expected to nul terminate the output data, and will assume that it is safe to place the nul just beyond the end of the stated buffer size. Also, if the function grows the buffer, it will allow for an extra termination byte.
-
If GSUniTemporary is set, the function will return the results in an autoreleased buffer rather than in a buffer that the caller must release.
-
If GSUniBOM is set, the function will read the first unicode character as a byte order marker.
-
If GSUniShortOk is set, the function will return a buffer containing any decoded characters even if the whole conversion fails.
On return, the function result is a flag indicating success (YES
) or failure ( NO
), and on success, the value stored in size is the number of bytes in the converted data. The converted data itself is stored in the location given by dst.
NB. If the value stored in dst has been changed, it is a pointer to allocated memory which the caller is responsible for freeing, and the caller is still responsible for freeing the original buffer.
BOOL GSToUnicode(unichar** dst, unsigned int* size, const unsigned char* src, unsigned int slen, NSStringEncoding enc, NSZone* zone, unsigned int options);
Function to convert from 8-bit data to 16-bit unicode characters.
The dst argument is a pointer to a pointer to a buffer in which the converted string is to be stored. If it is a null pointer, this function discards converted data, and is used only to determine the length of the converted string. If the zone argument is non-nul, the function is free to allocate a larger buffer if necessary, and store this new buffer in the dst argument. It will *NOT* deallocate the original buffer!
The size argument is a pointer to the initial size of the destination buffer. If the function changes the buffer size, this value will be altered to the new size. This is measured in 16-bit unicode characters, not bytes.
The src argument is a pointer to the byte sequence which is to be converted to 16-bit unicode.
The slen argument is the length of the byte sequence which is to be converted to 16-bit unicode. This is measured in bytes.
The enc argument specifies the encoding type of the 8-bit byte sequence which is to be converted to 16-bit unicode.
The zone argument specifies a memory zone in which the function may allocate a buffer to return data in. If this is nul, the function will fail if the originally supplied buffer is not big enough (unless dst is a null pointer... indicating that converted data is to be discarded).
The options argument controls some special behavior.
-
If GSUniTerminate is set, the function is expected to null terminate the output string, and will assume that it is safe to place the nul just beyond the end of the stated buffer size. Also, if the function grows the buffer, it will allow for an extra termination character.
-
If GSUniTemporary is set, the function will return the results in an autoreleased buffer rather than in a buffer that the caller must release.
-
If GSUniBOM is set, the function will write the first unicode character as a byte order marker.
-
If GSUniShortOk is set, the function will return a buffer containing any decoded characters even if the whole conversion fails.
On return, the function result is a flag indicating success (YES
) or failure ( NO
), and on success, the value stored in size is the number of characters in the converted string. The converted string itself is stored in the location given by dst.
NB. If the value stored in dst has been changed, it is a pointer to allocated memory which the caller is responsible for freeing, and the caller is still responsible for freeing the original buffer.
NSStringEncoding* GetAvailableEncodings();
Returns a nul terminated array of the available string encodings.
NSStringEncoding GetDefEncoding();
Return the default encoding
NSString* GetEncodingName(NSStringEncoding encoding);
Description forthcoming.
unichar chartouni(unsigned char c);
unichar encode_chartouni(unsigned char c, NSStringEncoding enc);
int encode_cstrtoustr(unichar* dst, int dl, const char* src, int sl, NSStringEncoding enc);
unsigned char encode_unitochar(unichar u, NSStringEncoding enc);
unsigned int encode_unitochar_strict(unichar u, NSStringEncoding enc);
int encode_ustrtocstr(char* dst, int dl, const unichar* src, int sl, NSStringEncoding enc, BOOL strict);
unsigned char uni_cop(unichar u);
Description forthcoming.
unichar* uni_is_decomp(unichar u);
Description forthcoming.
BOOL uni_isnonsp(unichar u);
Description forthcoming.
unichar uni_tolower(unichar ch);
Uses direct access into a two-level table to map cases.
The two-level table method is less space efficient (but still not bad) than a single table and a linear search, but it reduces the number of conditional statements to just one.
unichar uni_toupper(unichar ch);
Uses direct access into a two-level table to map cases.
The two-level table method is less space efficient (but still not bad) than a single table and a linear search, but it reduces the number of conditional statements to just one.
unsigned char unitochar(unichar u);
GS_MAX_OBJECTS_FROM_STACK
The number of objects to try to get from varargs into an array on the stack... if there are more than this, use the heap. NB. This MUST be a multiple of 2
GS_USEIDLIST(firstObject, code,...)
This is a macro designed to minimise the use of memory allocation and deallocation when you need to work with a vararg list of objects.
The objects are unpacked from the vararg list into a 'C' array and then a code fragment you specify is able to make use of them before that 'C' array is destroyed.
The firstObject argument is the name of the formal parameter in your method or function which precedes the ',...' denoting variable args.
The code argument is a piece of objective-c code to be executed to make use of the objects stored in the 'C' array.
When this code is called the unsigned integer '__count' will contain the number of objects unpacked, and the pointer '__objects' will point to the unpacked objects, ie. firstObject followed by the vararg arguments up to (but not including) the first nil
.
GS_USEIDPAIRLIST(firstObject, code,...)
This is a macro designed to minimise the use of memory allocation and deallocation when you need to work with a vararg list of objects.
The objects are unpacked from the vararg list into two 'C' arrays and then a code fragment you specify is able to make use of them before that 'C' array is destroyed.
The firstObject argument is the name of the formal parameter in your method or function which precedes the ',...' denoting variable args.
The code argument is a piece of objective-c code to be executed to make use of the objects stored in the 'C' arrays.
When this code is called the unsigned integer '__count' will contain the number of objects unpacked, the pointer '__objects' will point to the first object in each pair, and the pointer '__pairs' will point to an array containing the second halves of the pairs of objects whose first halves are in '__objects'.
This lets you pack a list of the form 'key, value, key, value,...' into an array of keys and an array of values.
Up