Deprecate put() as an OutputRange primitive
This commit is contained in:
		| @@ -389,12 +389,9 @@ do | |||||||
|     static struct OutPutRange |     static struct OutPutRange | ||||||
|     { |     { | ||||||
|         int value; |         int value; | ||||||
|         void put(int value) @nogc nothrow pure @safe |  | ||||||
|         in |         void opCall(int value) @nogc nothrow pure @safe | ||||||
|         { |         in (this.value == 0) | ||||||
|             assert(this.value == 0); |  | ||||||
|         } |  | ||||||
|         do |  | ||||||
|         { |         { | ||||||
|             this.value = value; |             this.value = value; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| /** | /** | ||||||
|  * This module defines primitives for working with ranges. |  * This module defines primitives for working with ranges. | ||||||
|  * |  * | ||||||
|  * Copyright: Eugene Wissner 2017-2018. |  * Copyright: Eugene Wissner 2017-2019. | ||||||
|  * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/, |  * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/, | ||||||
|  *                  Mozilla Public License, v. 2.0). |  *                  Mozilla Public License, v. 2.0). | ||||||
|  * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner) |  * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner) | ||||||
| @@ -833,18 +833,19 @@ void put(R, E)(ref R range, auto ref E e) | |||||||
|     static if (__traits(hasMember, R, "put") |     static if (__traits(hasMember, R, "put") | ||||||
|             && is(typeof((R r, E e) => r.put(e)))) |             && is(typeof((R r, E e) => r.put(e)))) | ||||||
|     { |     { | ||||||
|  |         pragma(msg, "OutputRange.put()-primitive is deprecated. Define opCall() instead."); | ||||||
|         range.put(e); |         range.put(e); | ||||||
|     } |     } | ||||||
|  |     else static if (is(typeof((R r, E e) => r(e)))) | ||||||
|  |     { | ||||||
|  |         range(e); | ||||||
|  |     } | ||||||
|     else static if (isInputRange!R |     else static if (isInputRange!R | ||||||
|                  && is(typeof((R r, E e) => r.front = e))) |                  && is(typeof((R r, E e) => r.front = e))) | ||||||
|     { |     { | ||||||
|         range.front = e; |         range.front = e; | ||||||
|         range.popFront(); |         range.popFront(); | ||||||
|     } |     } | ||||||
|     else static if (is(typeof((R r, E e) => r(e)))) |  | ||||||
|     { |  | ||||||
|         range(e); |  | ||||||
|     } |  | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         static assert(false, R.stringof ~ " is not an output range for " |         static assert(false, R.stringof ~ " is not an output range for " | ||||||
| @@ -862,23 +863,6 @@ void put(R, E)(ref R range, auto ref E e) | |||||||
|     assert(actual == [2, 0]); |     assert(actual == [2, 0]); | ||||||
| } | } | ||||||
|  |  | ||||||
| /// |  | ||||||
| @nogc nothrow pure @safe unittest |  | ||||||
| { |  | ||||||
|     static struct Put |  | ||||||
|     { |  | ||||||
|         int e; |  | ||||||
|  |  | ||||||
|         void put(int e) |  | ||||||
|         { |  | ||||||
|             this.e = e; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     Put p; |  | ||||||
|     put(p, 2); |  | ||||||
|     assert(p.e == 2); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /// | /// | ||||||
| @nogc nothrow pure @safe unittest | @nogc nothrow pure @safe unittest | ||||||
| { | { | ||||||
| @@ -963,7 +947,7 @@ template isOutputRange(R, E) | |||||||
| { | { | ||||||
|     static struct R1 |     static struct R1 | ||||||
|     { |     { | ||||||
|         void put(int) @nogc nothrow pure @safe |         void opCall(int) @nogc nothrow pure @safe | ||||||
|         { |         { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -1002,17 +986,8 @@ template isOutputRange(R, E) | |||||||
|     } |     } | ||||||
|     static assert(!isOutputRange!(R3, int)); |     static assert(!isOutputRange!(R3, int)); | ||||||
|  |  | ||||||
|     static struct R4 |  | ||||||
|     { |  | ||||||
|         void opCall(int) @nogc nothrow pure @safe |  | ||||||
|         { |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     static assert(isOutputRange!(R4, int)); |  | ||||||
|  |  | ||||||
|     static assert(isOutputRange!(R1, R3)); |     static assert(isOutputRange!(R1, R3)); | ||||||
|     static assert(isOutputRange!(R2, R3)); |     static assert(isOutputRange!(R2, R3)); | ||||||
|     static assert(isOutputRange!(R4, R3)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user