diff options
| author | Sebastian Thiel <byronimo@gmail.com> | 2016-04-30 16:37:44 +0200 |
|---|---|---|
| committer | Sebastian Thiel <byronimo@gmail.com> | 2016-07-26 12:12:43 +0200 |
| commit | 1aa8dad854155221db7cec19b6105c673e4a871e (patch) | |
| tree | 5705dc9fad2932e1cd947030bc1da241051e701d /src/libstd/env.rs | |
| parent | 728eea7dc1973558c12b7018d904147c8224e879 (diff) | |
| download | rust-1aa8dad854155221db7cec19b6105c673e4a871e.tar.gz rust-1aa8dad854155221db7cec19b6105c673e4a871e.zip | |
DoubleEndedIterator for Args
The number of arguments given to a process is always known, which makes implementing DoubleEndedIterator possible. That way, the Iterator::rev() method becomes usable, among others. Signed-off-by: Sebastian Thiel <byronimo@gmail.com> Tidy for DoubleEndedIterator I chose to not create a new feature for it, even though technically, this makes me lie about the original availability of the implementation. Verify with @alexchrichton Setup feature flag for new std::env::Args iterators Add test for Args reverse iterator It's somewhat depending on the input of the test program, but made in such a way that should be somewhat flexible to changes to the way it is called. Deduplicate windows ArgsOS code for DEI DEI = DoubleEndedIterator Move env::args().rev() test to run-pass It must be controlling it's arguments for full isolation. Remove superfluous feature name Assert all arguments returned by env::args().rev() Let's be very sure it works as we expect, why take chances. Fix rval of os_string_from_ptr A trait cannot be returned, but only the corresponding object. Deref pointers to actually operate on the argument Put unsafe to correct location
Diffstat (limited to 'src/libstd/env.rs')
| -rw-r--r-- | src/libstd/env.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libstd/env.rs b/src/libstd/env.rs index 6956dc0d901..01bc733d440 100644 --- a/src/libstd/env.rs +++ b/src/libstd/env.rs @@ -587,6 +587,13 @@ impl ExactSizeIterator for Args { fn len(&self) -> usize { self.inner.len() } } +#[stable(feature = "env_iterators", since = "1.11.0")] +impl DoubleEndedIterator for Args { + fn next_back(&mut self) -> Option<String> { + self.inner.next_back().map(|s| s.into_string().unwrap()) + } +} + #[stable(feature = "env", since = "1.0.0")] impl Iterator for ArgsOs { type Item = OsString; @@ -599,6 +606,10 @@ impl ExactSizeIterator for ArgsOs { fn len(&self) -> usize { self.inner.len() } } +#[stable(feature = "env_iterators", since = "1.11.0")] +impl DoubleEndedIterator for ArgsOs { + fn next_back(&mut self) -> Option<OsString> { self.inner.next_back() } +} /// Constants associated with the current target #[stable(feature = "env", since = "1.0.0")] pub mod consts { |
