rc_vec/lib.rs
1#![doc = include_str!("../README.md")]
2#![cfg_attr(docsrs, feature(doc_cfg))]
3#![cfg_attr(not(feature = "std"), no_std)]
4
5extern crate alloc;
6
7mod raw;
8mod is_zst;
9mod rc_vec;
10mod trait_impls;
11mod utils;
12
13pub use rc_vec::*;
14pub use unique_rc;
15
16#[cfg(test)]
17mod tests;
18
19/// Like `vec![]`, create a [`RcVec`]
20///
21/// # Examples
22///
23/// ```
24/// let vec = rc_vec::rc_vec![1, 2, 3];
25/// assert_eq!(vec, [1, 2, 3]);
26/// ```
27///
28/// ```
29/// let vec = rc_vec::rc_vec![3; 4];
30/// assert_eq!(vec, [3, 3, 3, 3]);
31/// ```
32///
33/// ```
34/// let vec = rc_vec::rc_vec![];
35/// assert_eq!(vec.len(), 0);
36/// # assert_ne!(vec, [1]);
37/// ```
38#[macro_export]
39macro_rules! rc_vec {
40 () => {
41 $crate::RcVec::new()
42 };
43 ($elem:expr; $n:expr) => {
44 $crate::RcVec::from_elem($elem, $n)
45 };
46 ($($t:tt)*) => {
47 $crate::RcVec::from_array([$($t)*])
48 };
49}
50
51/// Like `vec![]`, create a [`ArcVec`]
52///
53/// # Examples
54///
55/// ```
56/// let vec = rc_vec::arc_vec![1, 2, 3];
57/// assert_eq!(vec, [1, 2, 3]);
58/// ```
59///
60/// ```
61/// let vec = rc_vec::arc_vec![3; 4];
62/// assert_eq!(vec, [3, 3, 3, 3]);
63/// ```
64///
65/// ```
66/// let vec = rc_vec::arc_vec![];
67/// assert_eq!(vec.len(), 0);
68/// # assert_ne!(vec, [1]);
69/// ```
70#[macro_export]
71macro_rules! arc_vec {
72 () => {
73 $crate::ArcVec::new()
74 };
75 ($elem:expr; $n:expr) => {
76 $crate::ArcVec::from_elem($elem, $n)
77 };
78 ($($t:tt)*) => {
79 $crate::ArcVec::from_array([$($t)*])
80 };
81}