+/// Frame manager for codecs with I-, P- and B-frames.
+///
+/// This frame manager simplifies frame management for the case when codec uses I/P/B frame scheme.
+///
+/// # Examples
+///
+/// ````norun
+/// let mut frame = allocate_video_frame();
+/// for mb in all_macroblocks {
+/// // decode macroblock type
+/// match mb_type {
+/// MBType::Inter => {
+/// do_mc(&mut frame, shuffler.get_lastref().unwrap());
+/// },
+/// MBType::BForward => {
+/// do_mc(&mut frame, shuffler.get_b_fwdref().unwrap());
+/// },
+/// MBType::BBackward => {
+/// do_mc(&mut frame, shuffler.get_b_bwdref().unwrap());
+/// },
+/// // handle the rest of cases
+/// };
+/// if is_random_access_frame {
+/// shuffler.clear(); // remove all saved references
+/// }
+/// if is_intra_frame || is_p_frame {
+/// shuffler.add_frame(frame.clone()); // tells frame manager to use the frame as the next reference
+/// }
+/// ````