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 | |
| }
 |