summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2017-02-03 13:07:40 +0100
committerEugen Wissner <belka@caraus.de>2017-02-03 13:07:40 +0100
commit241767df13a798c2755736e904535681da490e3f (patch)
tree4d79df5fe63c098deb7db560aef8776035dab7fe /source
parentb2baba923790f6165e4a914b1414d6f52710fc51 (diff)
downloadtanya-241767df13a798c2755736e904535681da490e3f.tar.gz
Move DefaultAllocator mixin to tanya.memory
Since it depends on defaultAllocator property defined in the module.
Diffstat (limited to 'source')
-rw-r--r--source/tanya/memory/allocator.d65
-rw-r--r--source/tanya/memory/package.d76
2 files changed, 75 insertions, 66 deletions
diff --git a/source/tanya/memory/allocator.d b/source/tanya/memory/allocator.d
index 930a934..c942568 100644
--- a/source/tanya/memory/allocator.d
+++ b/source/tanya/memory/allocator.d
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
- * Copyright: Eugene Wissner 2016.
+ * Copyright: Eugene Wissner 2016-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)
@@ -65,66 +65,3 @@ interface Allocator
*/
bool reallocateInPlace(ref void[] p, in size_t size) shared nothrow @nogc;
}
-
-/**
- * The mixin generates common methods for classes and structs using
- * allocators. It provides a protected member, constructor and a read-only property,
- * that checks if an allocator was already set and sets it to the default
- * one, if not (useful for structs which don't have a default constructor).
- */
-mixin template DefaultAllocator()
-{
- /// Allocator.
- protected shared Allocator allocator_;
-
- /**
- * Params:
- * allocator = The allocator should be used.
- */
- this(shared Allocator allocator)
- in
- {
- assert(allocator !is null);
- }
- body
- {
- this.allocator_ = allocator;
- }
-
- /**
- * This property checks if the allocator was set in the constructor
- * and sets it to the default one, if not.
- *
- * Returns: Used allocator.
- *
- * Postcondition: $(D_INLINECODE allocator_ !is null)
- */
- protected @property shared(Allocator) allocator() nothrow @safe @nogc
- out (allocator)
- {
- assert(allocator !is null);
- }
- body
- {
- if (allocator_ is null)
- {
- allocator_ = defaultAllocator;
- }
- return allocator_;
- }
-
- /// Ditto.
- @property shared(Allocator) allocator() const nothrow @trusted @nogc
- out (allocator)
- {
- assert(allocator !is null);
- }
- body
- {
- if (allocator_ is null)
- {
- return defaultAllocator;
- }
- return cast(shared Allocator) allocator_;
- }
-}
diff --git a/source/tanya/memory/package.d b/source/tanya/memory/package.d
index 3979fe0..9ecb45b 100644
--- a/source/tanya/memory/package.d
+++ b/source/tanya/memory/package.d
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
- * Copyright: Eugene Wissner 2016.
+ * Copyright: Eugene Wissner 2016-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)
@@ -14,7 +14,69 @@ import core.exception;
public import std.experimental.allocator : make, makeArray;
import std.traits;
public import tanya.memory.allocator;
-public import tanya.memory.types;
+
+/**
+ * The mixin generates common methods for classes and structs using
+ * allocators. It provides a protected member, constructor and a read-only property,
+ * that checks if an allocator was already set and sets it to the default
+ * one, if not (useful for structs which don't have a default constructor).
+ */
+mixin template DefaultAllocator()
+{
+ /// Allocator.
+ protected shared Allocator allocator_;
+
+ /**
+ * Params:
+ * allocator = The allocator should be used.
+ */
+ this(shared Allocator allocator)
+ in
+ {
+ assert(allocator !is null);
+ }
+ body
+ {
+ this.allocator_ = allocator;
+ }
+
+ /**
+ * This property checks if the allocator was set in the constructor
+ * and sets it to the default one, if not.
+ *
+ * Returns: Used allocator.
+ *
+ * Postcondition: $(D_INLINECODE allocator_ !is null)
+ */
+ protected @property shared(Allocator) allocator() nothrow @safe @nogc
+ out (allocator)
+ {
+ assert(allocator !is null);
+ }
+ body
+ {
+ if (allocator_ is null)
+ {
+ allocator_ = defaultAllocator;
+ }
+ return allocator_;
+ }
+
+ /// Ditto.
+ @property shared(Allocator) allocator() const nothrow @trusted @nogc
+ out (allocator)
+ {
+ assert(allocator !is null);
+ }
+ body
+ {
+ if (allocator_ is null)
+ {
+ return defaultAllocator;
+ }
+ return cast(shared Allocator) allocator_;
+ }
+}
// From druntime
private extern (C) void _d_monitordelete(Object h, bool det) nothrow @nogc;
@@ -28,11 +90,21 @@ shared static this() nothrow @trusted @nogc
}
@property ref shared(Allocator) defaultAllocator() nothrow @safe @nogc
+out (allocator)
+{
+ assert(allocator !is null);
+}
+body
{
return allocator;
}
@property void defaultAllocator(shared(Allocator) allocator) nothrow @safe @nogc
+in
+{
+ assert(allocator !is null);
+}
+body
{
.allocator = allocator;
}