67 lines
1.9 KiB
D
67 lines
1.9 KiB
D
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/**
|
|
* Common exceptions and errors.
|
|
*
|
|
* Copyright: Eugene Wissner 2017.
|
|
* License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
|
|
* Mozilla Public License, v. 2.0).
|
|
* Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
|
|
* Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/exception.d,
|
|
* tanya/exception.d)
|
|
*/
|
|
module tanya.exception;
|
|
|
|
import tanya.conv;
|
|
import tanya.memory;
|
|
|
|
/**
|
|
* Error thrown if memory allocation fails.
|
|
*/
|
|
final class OutOfMemoryError : Error
|
|
{
|
|
/**
|
|
* Constructs new error.
|
|
*
|
|
* Params:
|
|
* msg = The message for the exception.
|
|
* file = The file where the exception occurred.
|
|
* line = The line number where the exception occurred.
|
|
* next = The previous exception in the chain of exceptions, if any.
|
|
*/
|
|
this(string msg = "Out of memory",
|
|
string file = __FILE__,
|
|
size_t line = __LINE__,
|
|
Throwable next = null) @nogc nothrow pure @safe
|
|
{
|
|
super(msg, file, line, next);
|
|
}
|
|
|
|
/// ditto
|
|
this(string msg,
|
|
Throwable next,
|
|
string file = __FILE__,
|
|
size_t line = __LINE__) @nogc nothrow pure @safe
|
|
{
|
|
super(msg, file, line, next);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allocates $(D_PSYMBOL OutOfMemoryError) in a static storage and throws it.
|
|
*
|
|
* Params:
|
|
* msg = Custom error message.
|
|
*
|
|
* Throws: $(D_PSYMBOL OutOfMemoryError).
|
|
*/
|
|
void onOutOfMemoryError(string msg = "Out of memory")
|
|
@nogc nothrow pure @trusted
|
|
{
|
|
static ubyte[stateSize!OutOfMemoryError] memory;
|
|
alias PureType = OutOfMemoryError function(string) @nogc nothrow pure;
|
|
throw (cast(PureType) () => emplace!OutOfMemoryError(memory))(msg);
|
|
}
|