math.mp: Fix initialization issues after resizing

This commit is contained in:
Eugen Wissner 2017-03-23 15:36:17 +01:00
parent 7892c1a930
commit 402fdfae89
2 changed files with 1260 additions and 1248 deletions

View File

@ -537,7 +537,7 @@ struct Integer
return this;
}
private unittest
private @nogc unittest
{
{
auto h1 = Integer(1019);
@ -761,6 +761,7 @@ struct Integer
static if (op == "/")
{
auto quotient = allocator.resize!ubyte(null, bitSize / 8 + 1);
quotient.initializeAll();
}
// bitPosition keeps track of which bit, of the quotient,

View File

@ -87,8 +87,8 @@ shared Allocator allocator;
shared static this() nothrow @trusted @nogc
{
import tanya.memory.mmappool;
allocator = MmapPool.instance;
import tanya.memory.mallocator;
allocator = Mallocator.instance;
}
@property ref shared(Allocator) defaultAllocator() nothrow @safe @nogc
@ -162,11 +162,22 @@ package(tanya) T[] resize(T)(shared Allocator allocator,
auto ref T[] array,
const size_t length) @trusted
{
void[] buf = array;
if (length == 0)
{
if (allocator.deallocate(array))
{
return null;
}
else
{
onOutOfMemoryErrorNoGC();
}
}
void[] buf = array;
if (!allocator.reallocate(buf, length * T.sizeof))
{
onOutOfMemoryError;
onOutOfMemoryErrorNoGC();
}
// Casting from void[] is unsafe, but we know we cast to the original type.
array = cast(T[]) buf;