55
66use std:: collections:: { vec_deque, VecDeque } ;
77use std:: mem;
8- use std:: rc:: Rc ;
98use std:: str;
9+ use std:: sync:: Arc ;
1010
1111use crate :: bam;
1212use crate :: bam:: Read ;
@@ -19,11 +19,11 @@ use crate::errors::{Error, Result};
1919#[ derive( Debug ) ]
2020pub struct RecordBuffer {
2121 reader : bam:: IndexedReader ,
22- inner : VecDeque < Rc < bam:: Record > > ,
23- overflow : Option < Rc < bam:: Record > > ,
22+ inner : VecDeque < Arc < bam:: Record > > ,
23+ overflow : Option < Arc < bam:: Record > > ,
2424 cache_cigar : bool ,
2525 min_refetch_distance : u64 ,
26- buffer_record : Rc < bam:: Record > ,
26+ buffer_record : Arc < bam:: Record > ,
2727 start_pos : Option < u64 > ,
2828}
2929
@@ -44,7 +44,7 @@ impl RecordBuffer {
4444 overflow : None ,
4545 cache_cigar,
4646 min_refetch_distance : 1 ,
47- buffer_record : Rc :: new ( bam:: Record :: new ( ) ) ,
47+ buffer_record : Arc :: new ( bam:: Record :: new ( ) ) ,
4848 start_pos : Some ( 0 ) ,
4949 }
5050 }
@@ -113,7 +113,7 @@ impl RecordBuffer {
113113 loop {
114114 match self
115115 . reader
116- . read ( Rc :: get_mut ( & mut self . buffer_record ) . unwrap ( ) )
116+ . read ( Arc :: get_mut ( & mut self . buffer_record ) . unwrap ( ) )
117117 {
118118 None => break ,
119119 Some ( res) => res?,
@@ -132,10 +132,11 @@ impl RecordBuffer {
132132
133133 // Record is kept, do not reuse it for next iteration
134134 // and thus create a new one.
135- let mut record = mem:: replace ( & mut self . buffer_record , Rc :: new ( bam:: Record :: new ( ) ) ) ;
135+ let mut record =
136+ mem:: replace ( & mut self . buffer_record , Arc :: new ( bam:: Record :: new ( ) ) ) ;
136137
137138 if self . cache_cigar {
138- Rc :: get_mut ( & mut record) . unwrap ( ) . cache_cigar ( ) ;
139+ Arc :: get_mut ( & mut record) . unwrap ( ) . cache_cigar ( ) ;
139140 }
140141
141142 if pos >= end as i64 {
@@ -157,12 +158,12 @@ impl RecordBuffer {
157158 }
158159
159160 /// Iterate over records that have been fetched with `fetch`.
160- pub fn iter ( & self ) -> vec_deque:: Iter < ' _ , Rc < bam:: Record > > {
161+ pub fn iter ( & self ) -> vec_deque:: Iter < ' _ , Arc < bam:: Record > > {
161162 self . inner . iter ( )
162163 }
163164
164165 /// Iterate over mutable references to records that have been fetched with `fetch`.
165- pub fn iter_mut ( & mut self ) -> vec_deque:: IterMut < ' _ , Rc < bam:: Record > > {
166+ pub fn iter_mut ( & mut self ) -> vec_deque:: IterMut < ' _ , Arc < bam:: Record > > {
166167 self . inner . iter_mut ( )
167168 }
168169
0 commit comments