mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	 441dc3640a
			
		
	
	
		441dc3640a
		
	
	
	
	
		
			
			Found with https://github.com/est31/warnalyzer. Dubious changes: - Is anyone else using rustc_apfloat? I feel weird completely deleting x87 support. - Maybe some of the dead code in rustc_data_structures, in case someone wants to use it in the future? - Don't change rustc_serialize I plan to scrap most of the json module in the near future (see https://github.com/rust-lang/compiler-team/issues/418) and fixing the tests needed more work than I expected. TODO: check if any of the comments on the deleted code should be kept.
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use rustc_index::bit_set::BitSet;
 | |
| use rustc_index::vec::Idx;
 | |
| use std::collections::VecDeque;
 | |
| 
 | |
| /// A work queue is a handy data structure for tracking work left to
 | |
| /// do. (For example, basic blocks left to process.) It is basically a
 | |
| /// de-duplicating queue; so attempting to insert X if X is already
 | |
| /// enqueued has no effect. This implementation assumes that the
 | |
| /// elements are dense indices, so it can allocate the queue to size
 | |
| /// and also use a bit set to track occupancy.
 | |
| pub struct WorkQueue<T: Idx> {
 | |
|     deque: VecDeque<T>,
 | |
|     set: BitSet<T>,
 | |
| }
 | |
| 
 | |
| impl<T: Idx> WorkQueue<T> {
 | |
|     /// Creates a new work queue that starts empty, where elements range from (0..len).
 | |
|     #[inline]
 | |
|     pub fn with_none(len: usize) -> Self {
 | |
|         WorkQueue { deque: VecDeque::with_capacity(len), set: BitSet::new_empty(len) }
 | |
|     }
 | |
| 
 | |
|     /// Attempt to enqueue `element` in the work queue. Returns false if it was already present.
 | |
|     #[inline]
 | |
|     pub fn insert(&mut self, element: T) -> bool {
 | |
|         if self.set.insert(element) {
 | |
|             self.deque.push_back(element);
 | |
|             true
 | |
|         } else {
 | |
|             false
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /// Attempt to pop an element from the work queue.
 | |
|     #[inline]
 | |
|     pub fn pop(&mut self) -> Option<T> {
 | |
|         if let Some(element) = self.deque.pop_front() {
 | |
|             self.set.remove(element);
 | |
|             Some(element)
 | |
|         } else {
 | |
|             None
 | |
|         }
 | |
|     }
 | |
| }
 |