Implement Caps::iter_mut()

This commit is contained in:
Sebastian Dröge 2017-07-25 01:33:14 +03:00
parent 9fdf422e9b
commit d1cf7d609f

View file

@ -122,9 +122,9 @@ impl CapsRef {
Iter::new(self) Iter::new(self)
} }
//pub fn iter_mut(&mut self) -> IterMut { pub fn iter_mut(&mut self) -> IterMut {
// IterMut::new(self) IterMut::new(self)
//} }
// TODO: All kinds of caps operations // TODO: All kinds of caps operations
} }
@ -136,7 +136,7 @@ impl glib::types::StaticType for GstRc<CapsRef> {
} }
macro_rules! define_iter( macro_rules! define_iter(
($name:ident, $typ:ty, $styp:ty, $getter:ident) => { ($name:ident, $typ:ty, $styp:ty) => {
pub struct $name<'a> { pub struct $name<'a> {
caps: $typ, caps: $typ,
@ -164,11 +164,16 @@ impl<'a> Iterator for $name<'a> {
return None; return None;
} }
if let Some(s) = self.caps.$getter(self.idx) { unsafe {
let structure = ffi::gst_caps_get_structure(self.caps.as_ptr(), self.idx);
if structure.is_null() {
return None;
}
self.idx += 1; self.idx += 1;
Some(s) Some(StructureRef::from_glib_borrow_mut(
} else { structure as *mut ffi::GstStructure,
None ))
} }
} }
@ -190,10 +195,16 @@ impl<'a> DoubleEndedIterator for $name<'a> {
} }
self.n_structures -= 1; self.n_structures -= 1;
if let Some(s) = self.caps.$getter(self.n_structures) {
Some(s) unsafe {
} else { let structure = ffi::gst_caps_get_structure(self.caps.as_ptr(), self.n_structures);
None if structure.is_null() {
return None;
}
Some(StructureRef::from_glib_borrow_mut(
structure as *mut ffi::GstStructure,
))
} }
} }
} }
@ -202,8 +213,8 @@ impl<'a> ExactSizeIterator for $name<'a> {}
} }
); );
define_iter!(Iter, &'a CapsRef, &'a StructureRef, get_structure); define_iter!(Iter, &'a CapsRef, &'a StructureRef);
//define_iter!(IterMut, &'a mut CapsRef, &'a mut Structure, get_mut_structure); define_iter!(IterMut, &'a mut CapsRef, &'a mut StructureRef);
impl fmt::Debug for CapsRef { impl fmt::Debug for CapsRef {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {