In changeset 254 (http://www.dsource.org/projects/druntime/changeset/254), I added three functions. A capacity property, a "setCapacity" function that should really be a property except for the bug mentioned below, and a shrinkToFit function as discussed below.
Note that these functions are all template wrappers in object.di to runtime functions in rt/lifetime.d, they would be easy to switch to compiler builtins *hint hint*. However, before that should happen, we should think of a good name for shrinkToFit. The function shrinks the allocated space of a block so it ends at the end of the given array. Essentially, it's there so you can re-use a buffer. Usage looks like this: buf.length = 0; buf.shrinkToFit(); Please kick tires as desired. -Steve ----- Original Message ---- > From: Steve Schveighoffer <[email protected]> > > Ran into an issue with array properties: > > http://d.puremagic.com/issues/show_bug.cgi?id=3857 > > I'm going to make the function not a property for now (at least for the "set > capacity" part). Should I wait for this bug to be fixed, or should we > discuss a > different scheme? > > My plans were for this to work: > > int[] x; > > x.capacity = 10000; // set the capacity to 10000 elements > assert(x.capacity >= 10000); // get the current capacity (elements allocated > + > available) > int *ptr = x.ptr; > while(x.length < 10000) > x ~= 1; > assert(x.ptr == ptr); // no reallocation > x.length = 0; > x.shrinkToFit(); // name up for debate > x ~= 1; > assert(x.ptr == ptr); // resized the allocation length, so it can be reused > as a > buffer. > > I'll have to change the write property 'capacity' to a function 'setCapacity' > for now. > > -Steve > > > > > ----- Original Message ---- > > From: Steve Schveighoffer > > To: Discuss the phobos library for D > > Sent: Tue, February 23, 2010 1:47:56 PM > > Subject: Re: [phobos] Array preallocate function > > > > I understand your objections to minimize. I don't really have a > > preference, > but > > I don't really like shrinkToFit. I'll use that for now, since it's > > probably > > easy to search/replace later. > > > > -Steve > > > > > > > > ----- Original Message ---- > > > From: Andrei Alexandrescu > > > > What about a "minimize" function, which simply truncates any > > > > "allocated" length after an array. So you would reset an array via: > > > > > > > > arr.length = 0; arr.minimize(); > > > > > > > > The advantage here is the array's length is not affected, just the > > > > allocated length is reduced to match the array's length. There are > > > > less invalid cases to worry about (i.e. "shrinking" to something > > > > larger doesn't make any sense). > > > > > > Sounds good. I'd choose a more specific name, e.g. shrinkToFit. Minimize > > > has > > > me > > > think of optimization functions. > > > > > > Andrei _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
