rustr/traits/
name.rs

1use ::rdll::*;
2use traits::*;
3use error::*;
4use vectorx::*;
5
6pub trait RName: ToSEXP + RSize {
7    fn get_name<D: RNew>(&self) -> RResult<D> {
8        D::rnew(unsafe { Rf_getAttrib(self.s(), R_NamesSymbol) })
9    }
10    fn name(&self) -> CharVec {
11        unsafe { CharVec::urnew(Rf_getAttrib(self.s(), R_NamesSymbol) )}
12    }
13    unsafe fn namesexp(&self) -> SEXP {
14        Rf_getAttrib(self.s(), R_NamesSymbol) 
15    }
16    fn set_name(&self, attr: &CharVec) -> RResult<()> {
17        unsafe {
18            if self.rsize() == Rf_xlength(self.s()) {
19                Rf_setAttrib(self.s(), R_NamesSymbol, attr.s());
20                return Ok(());
21            }
22             rraise("CharVec length is not the same as the vector.")
23        }
24    }
25    unsafe fn uset_name(&self, attr: &CharVec) {
26        Rf_setAttrib(self.s(), R_NamesSymbol, attr.s());
27    }
28}