package sync import ( "fmt" "s1d3sw1ped/SteamCache2/vfs" "sync" ) // Ensure SyncFS implements VFS. var _ vfs.VFS = (*SyncFS)(nil) type SyncFS struct { vfs vfs.VFS mu sync.RWMutex } func New(vfs vfs.VFS) *SyncFS { return &SyncFS{ vfs: vfs, mu: sync.RWMutex{}, } } // Name returns the name of the file system. func (sfs *SyncFS) Name() string { return fmt.Sprintf("SyncFS(%s)", sfs.vfs.Name()) } // Size returns the total size of all files in the file system. func (sfs *SyncFS) Size() int64 { sfs.mu.RLock() defer sfs.mu.RUnlock() return sfs.vfs.Size() } // Set sets the value of key as src. // Setting the same key multiple times, the last set call takes effect. func (sfs *SyncFS) Set(key string, src []byte) error { sfs.mu.Lock() defer sfs.mu.Unlock() return sfs.vfs.Set(key, src) } // Delete deletes the value of key. func (sfs *SyncFS) Delete(key string) error { sfs.mu.Lock() defer sfs.mu.Unlock() return sfs.vfs.Delete(key) } // Get gets the value of key to dst, and returns dst no matter whether or not there is an error. func (sfs *SyncFS) Get(key string) ([]byte, error) { sfs.mu.RLock() defer sfs.mu.RUnlock() return sfs.vfs.Get(key) } // Stat returns the FileInfo of key. func (sfs *SyncFS) Stat(key string) (*vfs.FileInfo, error) { sfs.mu.RLock() defer sfs.mu.RUnlock() return sfs.vfs.Stat(key) } // StatAll returns the FileInfo of all keys. func (sfs *SyncFS) StatAll() []*vfs.FileInfo { sfs.mu.RLock() defer sfs.mu.RUnlock() return sfs.vfs.StatAll() }