1use ::rdll::*;
2use ::storage::*;
3use ::traits::*;
4use ::rtype::*;
5use ::protect::stackp::*;
6use error::*;
7use error::REKind::NotCompatible;
8use std::ops::Range;
9use std::os::raw::c_int;
10
11pub type IntVec = IntVecM<Preserve>;
12
13gen_traits_sexp!(IntVecM);
14gen_named_vec!(IntVecM, INTSXP, IntVecIter, INTEGER, c_int);
15
16
17#[macro_export]
20macro_rules! intvec {
21 ($($tts:expr),*) => {
22 {let size = <[()]>::len(&[$(replace_expr!($tts, ())),*]);
24
25 let mut res = IntVec::alloc(size as usize);
27 unsafe{
28 let mut x = 0;
29 $(
30 x += 1;
32 res.uset(x-1 as usize, $tts);
33
34 )*
35 }
36 res
37 }
38 };
39
40 ($($id:ident ~ $tts:expr),*) => {
41 {let size = <[()]>::len(&[$(replace_expr!($tts, ())),*]);
43
44 let mut res = IntVec::alloc(size as usize);
46 let mut name = CharVec::alloc(size as usize);
47 unsafe{
48 let mut x = 0;
49 $(
50 x += 1;
52 res.uset(x-1 as usize , $tts);
53 name.uset(x-1, stringify!($id));
54 )*
55 }
56 unsafe{Rf_setAttrib(res.s(), R_NamesSymbol,name.s());}
57 res
58 }
59 }
60}