Support generic-array as arrayvec backend
This commit is contained in:
+2
-1
@@ -5,6 +5,7 @@ matrix:
|
|||||||
- rust: 1.2.0
|
- rust: 1.2.0
|
||||||
- rust: stable
|
- rust: stable
|
||||||
env:
|
env:
|
||||||
|
- FEATURES="use_generic_array"
|
||||||
- NODEFAULT=1
|
- NODEFAULT=1
|
||||||
- rust: beta
|
- rust: beta
|
||||||
- rust: nightly
|
- rust: nightly
|
||||||
@@ -15,7 +16,7 @@ matrix:
|
|||||||
- NODROP_FEATURES='use_needs_drop'
|
- NODROP_FEATURES='use_needs_drop'
|
||||||
- rust: nightly
|
- rust: nightly
|
||||||
env:
|
env:
|
||||||
- FEATURES='use_union'
|
- FEATURES='use_union use_generic_array'
|
||||||
- NODROP_FEATURES='use_union'
|
- NODROP_FEATURES='use_union'
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
|
|||||||
@@ -19,7 +19,12 @@ version = "0.1.8"
|
|||||||
path = "nodrop"
|
path = "nodrop"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
|
[dependencies.generic-array]
|
||||||
|
version = "0.5.1"
|
||||||
|
optional = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std"]
|
default = ["std"]
|
||||||
std = ["odds/std", "nodrop/std"]
|
std = ["odds/std", "nodrop/std"]
|
||||||
use_union = ["nodrop/use_union"]
|
use_union = ["nodrop/use_union"]
|
||||||
|
use_generic_array = ["generic-array"]
|
||||||
|
|||||||
@@ -19,6 +19,24 @@ pub trait Index : PartialEq + Copy {
|
|||||||
fn from(usize) -> Self;
|
fn from(usize) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "use_generic_array")]
|
||||||
|
unsafe impl<T, U> Array for ::generic_array::GenericArray<T, U>
|
||||||
|
where U: ::generic_array::ArrayLength<T>
|
||||||
|
{
|
||||||
|
type Item = T;
|
||||||
|
type Index = usize;
|
||||||
|
fn as_ptr(&self) -> *const Self::Item {
|
||||||
|
(**self).as_ptr()
|
||||||
|
}
|
||||||
|
fn as_mut_ptr(&mut self) -> *mut Self::Item {
|
||||||
|
(**self).as_mut_ptr()
|
||||||
|
}
|
||||||
|
fn capacity() -> usize {
|
||||||
|
U::to_usize()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
impl Index for u8 {
|
impl Index for u8 {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn to_usize(self) -> usize { self as usize }
|
fn to_usize(self) -> usize { self as usize }
|
||||||
@@ -33,6 +51,13 @@ impl Index for u16 {
|
|||||||
fn from(ix: usize) -> Self { ix as u16 }
|
fn from(ix: usize) -> Self { ix as u16 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Index for usize {
|
||||||
|
#[inline(always)]
|
||||||
|
fn to_usize(self) -> usize { self }
|
||||||
|
#[inline(always)]
|
||||||
|
fn from(ix: usize) -> Self { ix }
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! fix_array_impl {
|
macro_rules! fix_array_impl {
|
||||||
($index_type:ty, $len:expr ) => (
|
($index_type:ty, $len:expr ) => (
|
||||||
unsafe impl<T> Array for [T; $len] {
|
unsafe impl<T> Array for [T; $len] {
|
||||||
|
|||||||
@@ -13,10 +13,18 @@
|
|||||||
//! - Requires Rust nightly channel
|
//! - Requires Rust nightly channel
|
||||||
//! - Use the unstable feature untagged unions for the internal implementation,
|
//! - Use the unstable feature untagged unions for the internal implementation,
|
||||||
//! which has reduced space overhead
|
//! which has reduced space overhead
|
||||||
|
//!
|
||||||
|
//! - `use_generic_array`
|
||||||
|
//! - Optional
|
||||||
|
//! - Depend on generic-array and allow using it just like a fixed
|
||||||
|
//! size array for ArrayVec storage.
|
||||||
#![cfg_attr(not(feature="std"), no_std)]
|
#![cfg_attr(not(feature="std"), no_std)]
|
||||||
extern crate odds;
|
extern crate odds;
|
||||||
extern crate nodrop;
|
extern crate nodrop;
|
||||||
|
|
||||||
|
#[cfg(feature = "use_generic_array")]
|
||||||
|
extern crate generic_array;
|
||||||
|
|
||||||
#[cfg(not(feature="std"))]
|
#[cfg(not(feature="std"))]
|
||||||
extern crate core as std;
|
extern crate core as std;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#![cfg(feature = "use_generic_array")]
|
||||||
|
|
||||||
|
extern crate arrayvec;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate generic_array;
|
||||||
|
|
||||||
|
use arrayvec::ArrayVec;
|
||||||
|
|
||||||
|
use generic_array::GenericArray;
|
||||||
|
|
||||||
|
use generic_array::typenum::U41;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_simple() {
|
||||||
|
let mut vec: ArrayVec<GenericArray<i32, U41>> = ArrayVec::new();
|
||||||
|
|
||||||
|
assert_eq!(vec.len(), 0);
|
||||||
|
assert_eq!(vec.capacity(), 41);
|
||||||
|
vec.extend(0..20);
|
||||||
|
assert_eq!(vec.len(), 20);
|
||||||
|
assert_eq!(&vec[..5], &[0, 1, 2, 3, 4]);
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user