ObjFW  Check-in [725b23f325]

Overview
Comment:Improve OFDictionary.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 725b23f325c1bc2be33e429d30c9ec49e9b15381da61d4613563c8a12ecfa4d0
User & Date: js on 2009-12-05 16:33:51
Other Links: manifest | tags
Context
2009-12-05
16:43
Improve -[initWithObject:forKey:]. (check-in: 776cc1c033 user: js tags: trunk)
16:33
Improve OFDictionary. (check-in: 725b23f325 user: js tags: trunk)
13:19
Get rid of float in OFMutableDictionary. (check-in: 7d0a27a751 user: js tags: trunk)
Changes

Modified src/OFDictionary.m from [9dd77b8958] to [be94e8c683].

222
223
224
225
226
227
228



229
230
231
232
233
234
235
236

237
238
239
240
241
242
243
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238

239
240
241
242
243
244
245
246







+
+
+







-
+







		@throw [OFInvalidArgumentException newWithClass: isa
						       selector: _cmd];

	hash = [key hash];

	for (i = hash & (size - 1); i < size && data[i].key != nil &&
	    ![data[i].key isEqual: key]; i++);

	if (data[i].key == nil)
		return nil;

	/* In case the last bucket is already used */
	if (i >= size)
		for (i = 0; i < size && data[i].key != nil &&
		    ![data[i].key isEqual: key]; i++);

	/* Key not in dictionary */
	if (i >= size || data[i].key == nil)
	if (i >= size || ![data[i].key isEqual: key])
		return nil;

	return data[i].object;
}

- (size_t)count
{

Modified src/OFMutableDictionary.m from [5b1e163002] to [e74e634938].

83
84
85
86
87
88
89
90

91
92
93
94
95
96
97
83
84
85
86
87
88
89

90
91
92
93
94
95
96
97







-
+








	/* In case the last bucket is already used */
	if (i >= size)
		for (i = 0; i < size && data[i].key != nil &&
		    ![data[i].key isEqual: key]; i++);

	/* Key not in dictionary */
	if (i >= size || data[i].key == nil) {
	if (i >= size || ![data[i].key isEqual: key]) {
		resize(self, isa, count + 1, &data, &size);

		i = hash & (size - 1);
		for (; i < size && data[i].key != nil; i++);

		/* In case the last bucket is already used */
		if (i >= size)
122
123
124
125
126
127
128



129
130
131
132
133
134
135
136

137
138
139
140
141
142
143
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

139
140
141
142
143
144
145
146







+
+
+







-
+







		@throw [OFInvalidArgumentException newWithClass: isa
						       selector: _cmd];

	hash = [key hash];

	for (i = hash & (size - 1); i < size && data[i].key != nil &&
	    ![data[i].key isEqual: key]; i++);

	if (data[i].key == nil)
		return self;

	/* In case the last bucket is already used */
	if (i >= size)
		for (i = 0; i < size && data[i].key != nil &&
		    ![data[i].key isEqual: key]; i++);

	/* Key not in dictionary */
	if (i >= size || data[i].key == nil)
	if (i >= size || ![data[i].key isEqual: key])
		return self;

	[data[i].key release];
	[data[i].object release];
	data[i].key = nil;

	count--;