You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							630 B
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							36 lines
						
					
					
						
							630 B
						
					
					
				
								package sequence
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"sync"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// just for testing
							 | 
						|
								type MemorySequencer struct {
							 | 
						|
									counter      uint64
							 | 
						|
									sequenceLock sync.Mutex
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func NewMemorySequencer() (m *MemorySequencer) {
							 | 
						|
									m = &MemorySequencer{counter: 1}
							 | 
						|
									return
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (m *MemorySequencer) NextFileId(count uint64) uint64 {
							 | 
						|
									m.sequenceLock.Lock()
							 | 
						|
									defer m.sequenceLock.Unlock()
							 | 
						|
									ret := m.counter
							 | 
						|
									m.counter += count
							 | 
						|
									return ret
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (m *MemorySequencer) SetMax(seenValue uint64) {
							 | 
						|
									m.sequenceLock.Lock()
							 | 
						|
									defer m.sequenceLock.Unlock()
							 | 
						|
									if m.counter <= seenValue {
							 | 
						|
										m.counter = seenValue + 1
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func (m *MemorySequencer) Peek() uint64 {
							 | 
						|
									return m.counter
							 | 
						|
								}
							 |