summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2016-12-02 14:12:12 +0100
committerEugen Wissner <belka@caraus.de>2016-12-02 14:12:12 +0100
commitc53d319337d2941aff2b0cfecd36949f9087fbce (patch)
tree8ac8389f43d71a7fd5c24883e44c68614ddacb0c
parent7c36dbb8f0055632d6846e827ec6ef899c711a76 (diff)
downloadtanya-c53d319337d2941aff2b0cfecd36949f9087fbce.tar.gz
Implement foreach_reverse for the vector
-rw-r--r--source/tanya/container/vector.d64
1 files changed, 58 insertions, 6 deletions
diff --git a/source/tanya/container/vector.d b/source/tanya/container/vector.d
index 668a931..eb7c28e 100644
--- a/source/tanya/container/vector.d
+++ b/source/tanya/container/vector.d
@@ -469,9 +469,7 @@ class Vector(T)
foreach (e; vector)
{
- result = dg(e);
-
- if (result != 0)
+ if ((result = dg(e)) != 0)
{
return result;
}
@@ -486,9 +484,7 @@ class Vector(T)
foreach (i, e; vector)
{
- result = dg(i, e);
-
- if (result != 0)
+ if ((result = dg(i, e)) != 0)
{
return result;
}
@@ -518,6 +514,62 @@ class Vector(T)
}
/**
+ * $(D_KEYWORD foreach) iteration.
+ *
+ * Params:
+ * dg = $(D_KEYWORD foreach) body.
+ */
+ int opApplyReverse(scope int delegate(ref T) dg)
+ {
+ int result;
+
+ foreach_reverse (e; vector)
+ {
+ if ((result = dg(e)) != 0)
+ {
+ return result;
+ }
+ }
+ return result;
+ }
+
+ /// Ditto.
+ int opApplyReverse(scope int delegate(ref size_t i, ref T) dg)
+ {
+ int result;
+
+ foreach_reverse (i, e; vector)
+ {
+ if ((result = dg(i, e)) != 0)
+ {
+ return result;
+ }
+ }
+ return result;
+ }
+
+ ///
+ unittest
+ {
+ auto v = theAllocator.make!(Vector!int)(5, 15, 8);
+ size_t i;
+
+ foreach_reverse (j, ref e; v)
+ {
+ i = j;
+ }
+ assert(i == 0);
+
+ foreach_reverse (j, e; v)
+ {
+ assert(j != 2 || e == 8);
+ assert(j != 1 || e == 15);
+ assert(j != 0 || e == 5);
+ }
+ theAllocator.dispose(v);
+ }
+
+ /**
* Returns: The first element.
*
* Precondition: $(D_INLINECODE length > 0)