ObjFW  Check-in [252ecc91a1]

Overview
Comment:Don't allocate 2 pages if we need exactly pagesize.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 252ecc91a12c41ab553caf4d6f072edb7ea38bde72bdb521e334b7ce6bcead66
User & Date: js on 2008-11-07 20:25:02
Other Links: manifest | tags
Context
2008-11-08
17:57
Add missing add: for OFBigArray and fix calculation of nsize. check-in: ae28fbf3ca user: js tags: trunk
2008-11-07
20:25
Don't allocate 2 pages if we need exactly pagesize. check-in: 252ecc91a1 user: js tags: trunk
17:25
Implementation for OFBigArray. check-in: 59f16e8a3d user: js tags: trunk
Changes

Modified src/OFArray.m from [c474c9a944] to [84ed4421e5].

131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
 fromCArray: (void*)carray
{
	size_t nsize;

	if (nitems > SIZE_MAX - items || items + nitems > SIZE_MAX / itemsize)
		[[OFOutOfRangeException newWithObject: self] raise];

	nsize = (((items + nitems) * itemsize) / pagesize) + 1;

	if (size != nsize)
		data = [self resizeMem: data
				toSize: nsize];

	memcpy(data + items * itemsize, carray, nitems * itemsize);
	items += nitems;
	size = nsize;

	return self;
}

- removeNItems: (size_t)nitems
{
	size_t nsize;

	if (nitems > items)
		[[OFOutOfRangeException newWithObject: self] raise];

	nsize = (((items - nitems) * itemsize) / pagesize) + 1;

	if (size != nsize)
		data = [self resizeMem: data
				toSize: nsize];

	items -= nitems;
	size = nsize;

	return self;
}
@end







|



















|











131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
 fromCArray: (void*)carray
{
	size_t nsize;

	if (nitems > SIZE_MAX - items || items + nitems > SIZE_MAX / itemsize)
		[[OFOutOfRangeException newWithObject: self] raise];

	nsize = ((items + nitems) * itemsize + pagesize - 1) / pagesize;

	if (size != nsize)
		data = [self resizeMem: data
				toSize: nsize];

	memcpy(data + items * itemsize, carray, nitems * itemsize);
	items += nitems;
	size = nsize;

	return self;
}

- removeNItems: (size_t)nitems
{
	size_t nsize;

	if (nitems > items)
		[[OFOutOfRangeException newWithObject: self] raise];

	nsize = ((items - nitems) * itemsize + pagesize - 1) / pagesize;

	if (size != nsize)
		data = [self resizeMem: data
				toSize: nsize];

	items -= nitems;
	size = nsize;

	return self;
}
@end