std.allocator ready for some abuse

Namespace rswhite4 at googlemail.com
Thu Nov 7 05:30:08 PST 2013


On Thursday, 7 November 2013 at 13:15:03 UTC, Sönke Ludwig wrote:
> Am 07.11.2013 11:32, schrieb Namespace:
>> How about a stack allocator like this:
>> ----
>> enum StackSize = 8192;
>>
>> struct Stack {
>>     static Stack it;
>>
>>     void[StackSize] _buffer = void;
>>     size_t _bufUsage;
>>
>>     void[] take(size_t N) {
>>         if ((this._bufUsage + N) <= StackSize) {
>>             scope(exit) this._bufUsage += N;
>>
>>             return _buffer[this._bufUsage .. this._bufUsage + 
>> N];
>>         }
>>
>>         return null;
>>     }
>>
>>     void reset() {
>>         this._bufUsage = 0;
>>     }
>> }
>> ----
>> Would that fit in std.allocator?
>
> That's std.allocator.InSituRegion, just that is misses the 
> reset() method.

Nice! But I suggest two things:
  1. Add a reset function for reusing the same storage
  2. Should that: 
https://github.com/andralex/phobos/blob/allocator/std/allocator.d#L2907 
not be replaced with ubyte[size] _store = void; ?


More information about the Digitalmars-d mailing list