private IDataContainer ProcessInternal(IDataContainer dataContainer) { var allData = dataContainer.ToArray(); // Set new data to keep data container's meta information. dataContainer.Clear(); //Parallel.ForEach(allData, data => //{ // IData processedData = null; // try // { // processedData = Process(data); // } // catch (Exception e) // { // Log("Processing error {0}", e.ToString()); // } // if (processedData == null) // return; // dataContainer.Add(processedData); //}); foreach (var data in allData) { IData processedData = null; try { processedData = Process(data); } catch (Exception e) { LogFormat("Processing error {0}", e.ToString()); } if (processedData == null) { continue; } dataContainer.Add(processedData); } ; return(dataContainer.Any() ? dataContainer : null); }
public void IDataContainer_RaisesCollectionChangedOnClear() { IDataContainer A = DataContainerBuilder.Create() .Data("A", 1) .Data("B", 2) .Build(); var listener = new CollectionChangedListener(A); Assert.Null(listener.LastChange); A.Clear(); Assert.NotNull(listener.LastChange); Assert.Equal(NotifyCollectionChangedAction.Reset, listener.LastChange.Action); }
private bool CommonApply(IOperationCollection operations, IDataContainer data) { int commonAction = operations.CommonAction; int changes = 0; switch (commonAction) { case OperationCode.REPLACE: { foreach (var opr in operations) { data[opr.FromKey] = ((ReplaceOperation)opr).Record; changes++; } } break; case OperationCode.INSERT_OR_IGNORE: { foreach (var opr in operations) { if (data.ContainsKey(opr.FromKey)) { continue; } data[opr.FromKey] = ((InsertOrIgnoreOperation)opr).Record; changes++; } } break; case OperationCode.DELETE: { foreach (var opr in operations) { if (data.Remove(opr.FromKey)) { changes++; } } } break; case OperationCode.DELETE_RANGE: { foreach (var opr in operations) { if (data.Remove(opr.FromKey, true, opr.ToKey, true)) { changes++; } } } break; case OperationCode.CLEAR: { foreach (var opr in operations) { data.Clear(); changes++; break; } } break; default: throw new NotImplementedException(); } return(changes > 0); }
public bool Leaf(IOperationCollection operations, IDataContainer data) { //sequential optimization if (operations.AreAllMonotoneAndPoint && data.IsInternallyOrdered && (data.Count == 0 || operations.Locator.KeyComparer.Compare(data.Last.Key, operations[0].FromKey) < 0)) { return(SequentialApply(operations, data)); } //common action optimization if (operations.CommonAction != OperationCode.UNDEFINED) { return(CommonApply(operations, data)); } //standart apply bool isModified = false; foreach (var opr in operations) { switch (opr.Code) { case OperationCode.REPLACE: { data[opr.FromKey] = ((ReplaceOperation)opr).Record; isModified = true; } break; case OperationCode.INSERT_OR_IGNORE: { if (data.ContainsKey(opr.FromKey)) { continue; } data[opr.FromKey] = ((InsertOrIgnoreOperation)opr).Record; isModified = true; } break; case OperationCode.DELETE: { if (data.Remove(opr.FromKey)) { isModified = true; } } break; case OperationCode.DELETE_RANGE: { if (data.Remove(opr.FromKey, true, opr.ToKey, true)) { isModified = true; } } break; case OperationCode.CLEAR: { data.Clear(); isModified = true; } break; default: throw new NotImplementedException(); } } return(isModified); }
private IDataContainer ProcessInternal(IDataContainer dataContainer) { var allData = dataContainer.ToArray(); // Set new data to keep data container's meta information. dataContainer.Clear(); //Parallel.ForEach(allData, data => //{ // IData processedData = null; // try // { // processedData = Process(data); // } // catch (Exception e) // { // Log("Processing error {0}", e.ToString()); // } // if (processedData == null) // return; // dataContainer.Add(processedData); //}); foreach (var data in allData) { IData processedData = null; try { processedData = Process(data); } catch (Exception e) { LogFormat("Processing error {0}", e.ToString()); } if (processedData == null) continue; dataContainer.Add(processedData); }; return dataContainer.Any() ? dataContainer : null; }