Hi Mike Schinkel, > Given there seems to be a lot of concern about the approach the RFC proposes > would it not address the concerns about memory usage and performance if > several methods were added to SplFixedArray instead (as well as functions > like indexOf(), contains(), map(), filter(), JSONSerialize(), etc., or > similar): > > =============== > > setCapacity(int) — Sets the Capacity, i.e. the maximum Size before resize > getCapacity():int — Gets the current Capacity. > > setGrowthFactor(float) — Sets the Growth Factor for push(). Defaults to 2 > getGrowthFactor():float — Gets the current Growth Factor > > pop([shrink]):mixed — Returns [Size] then subtracts 1 from Size. If > (bool)shrink passed then call shrink(). > push(mixed) — Sets [Size]=mixed, then Size++, unless Size=Capacity then > setSize(n) where n=round(Size*GrowthFactor,0) before Size++. > > grow([new_capacity]) — Increases memory allocated. Sets Capacity to > Size*GrowthFactor or new_capacity. > shrink([new_capacity]) — Reduces memory allocated. Sets Capacity to current > Size or new_capacity. > > =============== > > If you had these methods then I think you would get the memory and > performance improvements you want, and if you really want a final Vector > class for your own uses you could roll your own using inheritance or > containment.
I asked 8 months ago about `push`/`pop` in SplFixedArray. The few responses were unanimously opposed to SplFixedArray being repurposed like a vector, the setSize functionality was treated more like an escape hatch and it was conceptually for fixed-size data. I also believe adding a configurable growth factor would be excessive for a high level language. Thanks, Tyson -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php