internal void UpdateFromIntermediate(Action <ICacheUpdater <TObject, TKey> > updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } lock (_locker) { ChangeSet <TObject, TKey> changes = null; _editLevel++; if (_editLevel == 1) { var previewHandler = _changesPreview.HasObservers ? (Action <ChangeSet <TObject, TKey> >)InvokePreview : null; changes = _readerWriter.Write(updateAction, previewHandler, _changes.HasObservers); } else { _readerWriter.WriteNested(updateAction); } _editLevel--; if (_editLevel == 0) { InvokeNext(changes); } } }
internal void UpdateFromIntermediate(Action <ICacheUpdater <TObject, TKey> > updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } lock (_writeLock) { InvokeNext(_readerWriter.Write(updateAction, _changes.HasObservers)); } }
private static void MultiThreaded(string[] args) { MPI.Environment.Run(ref args, communicator => { var sorter = new MPIQuickSort(communicator); var isMaster = communicator.Rank == 0; if (isMaster) { var inputFile = args[0]; var outputFile = args[1]; var array = ReaderWriter.Read(inputFile); IList <int> result = null; using (var performanceCounter = new PerformanceCounter($"Execution time: ")) { result = sorter.ParallelSort(array, 0, array.Count - 1); } ReaderWriter.Write(outputFile, result); //Console.WriteLine($"Verify result: {Verify(result, inputFile)}"); } else { sorter.WorkerLoop(); } }); }
private int _editLevel; // The level of recursion in editing. public ObservableCache(IObservable <IChangeSet <TObject, TKey> > source) { _readerWriter = new ReaderWriter <TObject, TKey>(); var loader = source.Synchronize(_locker) .Finally(() => { _changes.OnCompleted(); _changesPreview.OnCompleted(); }) .Subscribe(changeset => { var previewHandler = _changesPreview.HasObservers ? (Action <ChangeSet <TObject, TKey> >)InvokePreview : null; var changes = _readerWriter.Write(changeset, previewHandler, _changes.HasObservers); InvokeNext(changes); }, ex => { _changesPreview.OnError(ex); _changes.OnError(ex); }); _cleanUp = Disposable.Create(() => { loader.Dispose(); _changes.OnCompleted(); _changesPreview.OnCompleted(); if (_countChanged.IsValueCreated) { _countChanged.Value.OnCompleted(); } }); }
private static void SingleThreaded(string[] args) { var inputFile = args[0]; var outputFile = args[1]; var array = ReaderWriter.Read(inputFile); QuickSort.Sort(array, 0, array.Count - 1); ReaderWriter.Write(outputFile, array); }
/// <inheritdoc /> public void Edit([NotNull] Action <IExtendedList <T> > updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } lock (_writeLock) { InvokeNext(_readerWriter.Write(updateAction)); } }
private void _ClientHandlerStage2(Stream Stream) { using (ReaderWriter rw = new ReaderWriter(Stream)) { BooruUser user = _Booru.DefaultUser; while (_ThreadPool.IsRunning) { RequestCode requestCode = (RequestCode)rw.ReadUShort(); if (requestCode != RequestCode.Disconnect) { byte[] payload = rw.ReadBytes(); _Logger.LogLine("Client request: RQ = {0}, {1} bytes payload", Enum.GetName(typeof(RequestCode), requestCode), payload.Length); using (var inputMs = new MemoryStream(payload)) using (var outputMs = new MemoryStream()) { try { using (var rw2 = new ReaderWriter(inputMs, outputMs)) _ClientHandlerStage3((RequestCode)requestCode, rw2, ref user); rw.Write(true); rw.Write(outputMs.ToArray(), true); } catch (Exception ex) { _Logger.LogException("ClientRequest", ex); rw.Write(false); rw.Write(ex.Message, true); } rw.Flush(); } } else { _Logger.LogLine("Client disconnected gracefully"); break; } } } }
public ObservableCache(IObservable <IChangeSet <TObject, TKey> > source) { _readerWriter = new ReaderWriter <TObject, TKey>(); var loader = source .Synchronize(_locker) .Select(changes => _readerWriter.Write(changes, _changes.HasObservers)) .Finally(_changes.OnCompleted) .Subscribe(InvokeNext, _changes.OnError); _cleanUp = Disposable.Create(() => { loader.Dispose(); _changes.OnCompleted(); if (_countChanged.IsValueCreated) { _countChanged.Value.OnCompleted(); } }); }
/// <inheritdoc /> public void Edit([NotNull] Action <IExtendedList <T> > updateAction) { if (updateAction == null) { throw new ArgumentNullException(nameof(updateAction)); } lock (_writeLock) { IChangeSet <T> changes = null; _editLevel++; if (_editLevel == 1) { if (_changesPreview.HasObservers) { changes = _readerWriter.WriteWithPreview(updateAction, InvokeNextPreview); } else { changes = _readerWriter.Write(updateAction); } } else { _readerWriter.WriteNested(updateAction); } _editLevel--; if (_editLevel == 0) { InvokeNext(changes); } } }
private void _ClientHandlerStage3(RequestCode RQ, ReaderWriter RW, ref BooruUser User) { switch (RQ) { default: throw new NotSupportedException("Unknown request code"); case RequestCode.Get_Post: { ulong id = RW.ReadULong(); using (var post = _Booru.GetPost(User, id, false)) post.ToWriter(RW); } break; case RequestCode.Get_Thumb: { ulong id = RW.ReadULong(); using (var thumb = _Booru.GetThumbnail(User, id)) thumb.ToWriter(RW); } break; case RequestCode.Get_Image: { ulong id = RW.ReadULong(); using (var image = _Booru.GetImage(User, id)) image.ToWriter(RW); } break; case RequestCode.Get_Tag: { ulong id = RW.ReadULong(); _Booru.GetTag(User, id).ToWriter(RW); } break; case RequestCode.Get_Info: _Booru.BooruInfo.ToWriter(RW); break; case RequestCode.Get_AllTags: { List <string> tags = _Booru.GetAllTags(); RW.Write((uint)tags.Count); foreach (string tag in tags) { RW.Write(tag, true); } } break; case RequestCode.Get_PostTags: { ulong id = RW.ReadULong(); using (var post = _Booru.GetPost(User, id, false)) post.Tags.ToWriter(RW); } break; case RequestCode.Get_User: User.ToWriter(RW); break; case RequestCode.Get_PostCount: RW.Write(_Booru.GetPostCount()); break; case RequestCode.Search_String: //User limitations? { string pattern = RW.ReadString(); List <ulong> ids = _Booru.Search(User, pattern); RW.Write((uint)ids.Count); foreach (ulong id in ids) { RW.Write(id); } } break; case RequestCode.Search_Image: throw new NotImplementedException(); //TODO Implement case RequestCode.Login: { string username = RW.ReadString(); string password = RW.ReadString(); User = _Booru.Login(User, username, password); } break; case RequestCode.Logout: User = _Booru.DefaultUser; break; case RequestCode.Search_Tags: { string term = RW.ReadString(); byte limit = RW.ReadByte(); _Booru.SearchTags(term, limit).ToWriter(RW); } break; case RequestCode.Start_GC: if (!User.IsAdmin) { throw new BooruException(BooruException.ErrorCodes.NoPermission); } else { GC.Collect(); } break; case RequestCode.Add_Post: using (var post = BooruPost.FromReader(RW)) { post.Tags = BooruTagList.FromReader(RW); post.Image = BooruImage.FromReader(RW); ulong id = _Booru.AddPost(User, post); RW.Write(id); if (_MN != null) { using (var thumb = _Booru.GetThumbnail(null, id)) _MN.NotificatePostAdded(id, post, thumb); } } break; case RequestCode.Edit_Post: { using (var post = BooruPost.FromReader(RW)) { post.Tags = BooruTagList.FromReader(RW); _Booru.EditPost(User, post); } } break; case RequestCode.Edit_Image: { ulong id = RW.ReadULong(); using (var image = BooruImage.FromReader(RW)) _Booru.EditImage(User, id, image); } break; case RequestCode.Delete_Post: { ulong id = RW.ReadULong(); _Booru.DeletePost(User, id); } break; } }
public void Write(string cmd) { wr.Write(cmd); }
private IDisposable LoadFromSource(IObservable <IChangeSet <T> > source) { return(source .Subscribe(changes => _readerWriter.Write(changes) .Then(InvokeNext, _changes.OnError), () => _changes.OnCompleted())); }
private static void MultiThreadedVol2(string[] args) { MPI.Environment.Run(ref args, communicator => { //Initialize var inputFile = args[0]; var outputFile = args[1]; var sorter = new QSorter(communicator); var isManager = communicator.Rank == 0; int[] result = null; //Send array parts to workers if (isManager) { var array = ReaderWriter.Read(inputFile); var qsArray = new QSArray(array); sorter.InitializeWithData(qsArray); } else { sorter.InitializeWithData(null); } //Parallel QSort using (var performanceCounter = new PerformanceCounter($"Execution time [{communicator.Rank}]: ")) { while (true) { if (sorter.LastInGroup) { sorter.Sort(); break; } sorter.PivotBroadcast(); sorter.PartitionAndPartsExchange(); sorter.GroupHalfToSubGroup(); } sorter.SendWorkResult(); //Collect all parts together if (isManager) { result = sorter.MergeDataFromWorkers(); } } //Write to output file if (isManager) { var list = result.ToList(); ReaderWriter.Write(outputFile, list); //Console.WriteLine($"Verified: {Verify(list, inputFile)}"); } }); }
void ISynchronizer.WriteDataToStorage() { readerWriter.Write(model.GetData()); }