コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
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);
        }
コード例 #5
0
        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;
        }