+ if !self.refine {
+ self.masks.put_v1();
+ self.v1_idx.push(v1_idx);
+ } else {
+ self.cmode.push(CodingMode::V1);
+ self.v1_cand.push(*v1_entry);
+ }
+ }
+ }
+ if self.refine {
+ self.refine_vectors();
+ let mut v1_src = self.v1_cand.iter();
+ let mut v4_src = self.v4_cand.chunks_exact(4);
+ for &cmode in self.cmode.iter() {
+ match cmode {
+ CodingMode::Skip => {
+ self.masks.put_inter(true);
+ },
+ CodingMode::V1 => {
+ let v1_entry = v1_src.next().unwrap();
+ let (v1_idx, _) = Self::find_nearest(&self.v1_cur_cb[self.cur_strip][..self.v1_len], *v1_entry);
+ self.masks.put_inter(false);
+ self.masks.put_v1();
+ self.v1_idx.push(v1_idx);
+ },
+ CodingMode::V4 => {
+ let v4_entries = v4_src.next().unwrap();
+ let (v40_idx, _) = Self::find_nearest(&self.v4_cur_cb[self.cur_strip][..self.v4_len], v4_entries[0]);
+ let (v41_idx, _) = Self::find_nearest(&self.v4_cur_cb[self.cur_strip][..self.v4_len], v4_entries[1]);
+ let (v42_idx, _) = Self::find_nearest(&self.v4_cur_cb[self.cur_strip][..self.v4_len], v4_entries[2]);
+ let (v43_idx, _) = Self::find_nearest(&self.v4_cur_cb[self.cur_strip][..self.v4_len], v4_entries[3]);
+
+ self.masks.put_inter(false);
+ self.masks.put_v4();
+ self.v4_idx.push(v40_idx);
+ self.v4_idx.push(v41_idx);
+ self.v4_idx.push(v42_idx);
+ self.v4_idx.push(v43_idx);
+ },
+ };