diff options
| author | pravic <[email protected]> | 2016-04-12 17:44:24 +0300 |
|---|---|---|
| committer | pravic <[email protected]> | 2016-04-12 17:44:24 +0300 |
| commit | bcb1fb5ba7ecf8b208bd6053e689ad8e87b0654d (patch) | |
| tree | 8de2327e8f25394e7c30324fddb4b7bcbf9a9f56 /libcollections/range.rs | |
| parent | liballoc (diff) | |
| download | kmd-env-rs-bcb1fb5ba7ecf8b208bd6053e689ad8e87b0654d.tar.xz kmd-env-rs-bcb1fb5ba7ecf8b208bd6053e689ad8e87b0654d.zip | |
libcollections
Diffstat (limited to 'libcollections/range.rs')
| -rw-r--r-- | libcollections/range.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libcollections/range.rs b/libcollections/range.rs new file mode 100644 index 0000000..4e39191 --- /dev/null +++ b/libcollections/range.rs @@ -0,0 +1,61 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![unstable(feature = "collections_range", + reason = "waiting for dust to settle on inclusive ranges", + issue = "30877")] + +//! Range syntax. + +use core::option::Option::{self, None, Some}; +use core::ops::{RangeFull, Range, RangeTo, RangeFrom}; + +/// **RangeArgument** is implemented by Rust's built-in range types, produced +/// by range syntax like `..`, `a..`, `..b` or `c..d`. +pub trait RangeArgument<T> { + /// Start index (inclusive) + /// + /// Return start value if present, else `None`. + fn start(&self) -> Option<&T> { + None + } + + /// End index (exclusive) + /// + /// Return end value if present, else `None`. + fn end(&self) -> Option<&T> { + None + } +} + +// FIXME add inclusive ranges to RangeArgument + +impl<T> RangeArgument<T> for RangeFull {} + +impl<T> RangeArgument<T> for RangeFrom<T> { + fn start(&self) -> Option<&T> { + Some(&self.start) + } +} + +impl<T> RangeArgument<T> for RangeTo<T> { + fn end(&self) -> Option<&T> { + Some(&self.end) + } +} + +impl<T> RangeArgument<T> for Range<T> { + fn start(&self) -> Option<&T> { + Some(&self.start) + } + fn end(&self) -> Option<&T> { + Some(&self.end) + } +} |