Skip to content
Snippets Groups Projects
job_map.go 745 B
Newer Older
  • Learn to ignore specific revisions
  • package core
    
    import "sync"
    
    // A wrapper around sync.Map for *Job.
    type JobMap struct {
    	wrapped sync.Map
    }
    
    func (m *JobMap) Store(key JobId, value *Job) {
    	m.wrapped.Store(key, value)
    }
    
    func (m *JobMap) Load(key JobId) (value *Job, ok bool) {
    	if value, ok := m.wrapped.Load(key); !ok {
    		return nil, false
    	} else {
    		return value.(*Job), true
    	}
    }
    
    func (m *JobMap) LoadOrStore(key JobId, value *Job) (actual *Job, loaded bool) {
    	if iactual, iloaded := m.wrapped.LoadOrStore(key, value); iactual != nil {
    		return iactual.(*Job), iloaded
    	} else {
    		return nil, iloaded
    	}
    }
    
    func (m *JobMap) Range(f func(key JobId, value *Job) bool) {
    	m.wrapped.Range(func(ikey, ivalue interface{}) bool {
    		return f(ikey.(JobId), ivalue.(*Job))
    	})
    }