internal void UpdateState(string directory, ref FileChangeList changes, ref FileSystemEntry file) { int index = _state.IndexOf(directory, file.FileName); if (index == -1) // file added { string path = file.FileName.ToString(); changes.AddAdded(directory, path.ToString()); var newFileState = new FileState(directory, path); newFileState.LastWriteTimeUtc = file.LastWriteTimeUtc; newFileState.Length = file.Length; newFileState._version = _version; _state.Add(directory, path, newFileState); return; } _state.Values[index]._version = _version; FileState previousState = _state.Values[index]; if (file.LastWriteTimeUtc != previousState.LastWriteTimeUtc || file.Length != previousState.Length) { changes.AddChanged(directory, previousState.Path); _state.Values[index].LastWriteTimeUtc = file.LastWriteTimeUtc; _state.Values[index].Length = file.Length; } }
private void Resize() { // this is because sometimes we just need to garbade collect instead of increase size int newSize = Math.Max(Count * 2, 4); PathToFileStateHashtable bigger = new PathToFileStateHashtable(newSize); foreach (FileState existingValue in this) { bigger.Add(existingValue.Directory, existingValue.Path, existingValue); } Values = bigger.Values; Buckets = bigger.Buckets; this._nextValuesIndex = bigger._nextValuesIndex; this.Count = bigger.Count; }