00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <stdarg.h>
00013
00014 #import "OFObject.h"
00015 #import "OFEnumerator.h"
00016
00017 @class OFArray;
00018
00020 struct of_dictionary_bucket
00021 {
00022 OFObject <OFCopying> *key;
00023 OFObject *object;
00024 uint32_t hash;
00025 };
00027
00031 @interface OFDictionary: OFObject <OFCopying, OFMutableCopying,
00032 OFFastEnumeration>
00033 {
00034 struct of_dictionary_bucket *data;
00035 size_t size;
00036 size_t count;
00037 }
00038
00044 + dictionary;
00045
00052 + dictionaryWithDictionary: (OFDictionary*)dict;
00053
00061 + dictionaryWithObject: (OFObject*)obj
00062 forKey: (OFObject <OFCopying>*)key;
00063
00071 + dictionaryWithObjects: (OFArray*)objs
00072 forKeys: (OFArray*)keys;
00073
00080 + dictionaryWithKeysAndObjects: (OFObject <OFCopying>*)key, ...;
00081
00087 - init;
00088
00096 - initWithDictionary: (OFDictionary*)dict;
00097
00106 - initWithObject: (OFObject*)obj
00107 forKey: (OFObject <OFCopying>*)key;
00108
00117 - initWithObjects: (OFArray*)objs
00118 forKeys: (OFArray*)keys;
00119
00127 - initWithKeysAndObjects: (OFObject <OFCopying>*)first, ...;
00128
00137 - initWithKey: (OFObject <OFCopying>*)first
00138 argList: (va_list)args;
00139
00144 - (id)objectForKey: (OFObject <OFCopying>*)key;
00145
00149 - (size_t)count;
00150
00154 - (OFEnumerator*)objectEnumerator;
00155
00159 - (OFEnumerator*)keyEnumerator;
00160 @end
00161
00163 @interface OFDictionaryEnumerator: OFEnumerator
00164 {
00165 struct of_dictionary_bucket *data;
00166 size_t size;
00167 unsigned long mutations;
00168 unsigned long *mutations_ptr;
00169 size_t pos;
00170 }
00171
00172 - initWithData: (struct of_dictionary_bucket*)data
00173 size: (size_t)size
00174 mutationsPointer: (unsigned long*)mutations_ptr;
00175 @end
00176
00177 @interface OFDictionaryObjectEnumerator: OFDictionaryEnumerator
00178 @end
00179
00180 @interface OFDictionaryKeyEnumerator: OFDictionaryEnumerator
00181 @end
00183
00184 #import "OFMutableDictionary.h"