summaryrefslogtreecommitdiff
path: root/vendor/fixedbitset/src/range.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/fixedbitset/src/range.rs')
-rw-r--r--vendor/fixedbitset/src/range.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/vendor/fixedbitset/src/range.rs b/vendor/fixedbitset/src/range.rs
new file mode 100644
index 00000000..9b385c42
--- /dev/null
+++ b/vendor/fixedbitset/src/range.rs
@@ -0,0 +1,45 @@
+use core::ops::{Range, RangeFrom, RangeFull, RangeTo};
+
+// Taken from https://github.com/bluss/odds/blob/master/src/range.rs.
+
+/// **IndexRange** is implemented by Rust's built-in range types, produced
+/// by range syntax like `..`, `a..`, `..b` or `c..d`.
+pub trait IndexRange<T = usize> {
+ #[inline]
+ /// Start index (inclusive)
+ fn start(&self) -> Option<T> {
+ None
+ }
+ #[inline]
+ /// End index (exclusive)
+ fn end(&self) -> Option<T> {
+ None
+ }
+}
+
+impl<T> IndexRange<T> for RangeFull {}
+
+impl<T: Copy> IndexRange<T> for RangeFrom<T> {
+ #[inline]
+ fn start(&self) -> Option<T> {
+ Some(self.start)
+ }
+}
+
+impl<T: Copy> IndexRange<T> for RangeTo<T> {
+ #[inline]
+ fn end(&self) -> Option<T> {
+ Some(self.end)
+ }
+}
+
+impl<T: Copy> IndexRange<T> for Range<T> {
+ #[inline]
+ fn start(&self) -> Option<T> {
+ Some(self.start)
+ }
+ #[inline]
+ fn end(&self) -> Option<T> {
+ Some(self.end)
+ }
+}