diff options
| author | Eugen Wissner <belka@caraus.de> | 2018-11-04 06:31:38 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2018-11-04 06:31:38 +0100 |
| commit | 184d307e40832c1c69c14729a3dc7d559614abc1 (patch) | |
| tree | a0f5d2c6679284600f5868c030bd7b4aefbe0d80 /source | |
| parent | 8aec781e2a43b9ffecd16e4bc7f807bb7cdf5b40 (diff) | |
| download | tanya-184d307e40832c1c69c14729a3dc7d559614abc1.tar.gz | |
Add range primitive sameHead
Diffstat (limited to 'source')
| -rw-r--r-- | source/tanya/range/primitive.d | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/source/tanya/range/primitive.d b/source/tanya/range/primitive.d index 5dc9efc..934ff31 100644 --- a/source/tanya/range/primitive.d +++ b/source/tanya/range/primitive.d @@ -2051,3 +2051,41 @@ template hasSwappableElements(R) } static assert(!hasSwappableElements!R2); } + +/** + * Determines whether `r1.front` and `r2.front` point to the same element. + * + * Params: + * r1 = First range. + * r2 = Second range. + * + * Returns: $(D_KEYWORD true) if $(D_PARAM r1) and $(D_PARAM r2) have the same + * head, $(D_KEYWORD false) otherwise. + */ +bool sameHead(Range)(Range r1, Range r2) @trusted +if (isInputRange!Range && hasLvalueElements!Range) +{ + return &r1.front is &r2.front; +} + +/// +@nogc nothrow pure @safe unittest +{ + const int[2] array; + + auto r1 = array[]; + auto r2 = array[]; + + assert(sameHead(r1, r2)); +} + +/// +@nogc nothrow pure @safe unittest +{ + const int[2] array; + + auto r1 = array[]; + auto r2 = array[1 .. $]; + + assert(!sameHead(r1, r2)); +} |
