コード例 #1
0
        public override IOperation Apply()
        {
            var swarmBest = SwarmBestQualityParameter.ActualValue;

            if (swarmBest == null)
            {
                return(base.Apply());
            }

            var previousBest = PreviousBestQualityParameter.ActualValue;

            if (previousBest == null)
            {
                PreviousBestQualityParameter.ActualValue = new DoubleValue(swarmBest.Value);
                return(base.Apply());
            }
            ;

            var successor = new OperationCollection(new[] { base.Apply() });
            var max       = MaximizationParameter.ActualValue.Value;

            if (max && swarmBest.Value <= previousBest.Value ||
                !max && swarmBest.Value >= previousBest.Value)
            {
                successor.Insert(0, ExecutionContext.CreateOperation(TopologyInitializerParameter.ActualValue));
            }

            previousBest.Value = swarmBest.Value;
            return(successor);
        }
コード例 #2
0
        private void ApplyInnerSelector()
        {
            // necessary for inner GenderSpecificSelector to execute all operations in OperationCollection
            Stack <IOperation> executionStack = new Stack <IOperation>();

            executionStack.Push(ExecutionContext.CreateChildOperation(Selector));
            while (executionStack.Count > 0)
            {
                CancellationToken.ThrowIfCancellationRequested();
                IOperation next = executionStack.Pop();
                if (next is OperationCollection)
                {
                    OperationCollection coll = (OperationCollection)next;
                    for (int i = coll.Count - 1; i >= 0; i--)
                    {
                        if (coll[i] != null)
                        {
                            executionStack.Push(coll[i]);
                        }
                    }
                }
                else if (next is IAtomicOperation)
                {
                    IAtomicOperation operation = (IAtomicOperation)next;
                    next = operation.Operator.Execute((IExecutionContext)operation, CancellationToken);
                    if (next != null)
                    {
                        executionStack.Push(next);
                    }
                }
            }
        }
コード例 #3
0
        public void Commit()
        {
            OperationCollection oprs = new OperationCollection(StorageEngineClient.XIndexMIN, 1);

            oprs.Add(new StorageEngineCommitOperation());
            Execute(oprs);
        }
コード例 #4
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection(base.Apply());
   IOperator op = OperatorParameter.ActualValue;
   if (op != null)
     next.Insert(0, ExecutionContext.CreateOperation(op));
   return next;
 }
コード例 #5
0
        public override IOperation Apply()
        {
            var max = MaximizationParameter.ActualValue.Value;
            // Update of the personal bests
            var points    = RealVectorParameter.ActualValue;
            var qualities = QualityParameter.ActualValue;
            var particles = points.Select((p, i) => new { Particle = p, Index = i })
                            .Zip(qualities, (p, q) => Tuple.Create(p.Index, p.Particle, q.Value)).ToList();

            UpdatePersonalBest(max, particles);

            // SPSO: update of the neighbor bests from the personal bests
            var personalBestPoints    = PersonalBestParameter.ActualValue;
            var personalBestQualities = PersonalBestQualityParameter.ActualValue;

            particles = personalBestPoints.Select((p, i) => new { Particle = p, Index = i })
                        .Zip(personalBestQualities, (p, q) => Tuple.Create(p.Index, p.Particle, q.Value)).ToList();
            UpdateNeighborBest(max, particles);

            var next = new OperationCollection()
            {
                base.Apply()
            };

            next.Insert(0, ExecutionContext.CreateChildOperation(ResultsCollector));
            if (MaxVelocityScalingOperatorParameter.Value != null)
            {
                next.Insert(0, ExecutionContext.CreateChildOperation(MaxVelocityScalingOperatorParameter.Value));
            }
            else
            {
                CurrentMaxVelocityParameter.ActualValue = new DoubleValue(MaxVelocityParameter.ActualValue.Value);
            }
            return(next);
        }
コード例 #6
0
        public virtual IOperation InstrumentedApply()
        {
            if (!AfterExecutionOperators.Any())
            {
                if (Successor != null)
                {
                    return(ExecutionContext.CreateOperation(Successor));
                }
                return(null);
            }

            var opCol = new OperationCollection();

            foreach (var afterAction in AfterExecutionOperators)
            {
                var afterActionOperation = ExecutionContext.CreateChildOperation(afterAction);
                opCol.Add(afterActionOperation);
            }

            if (Successor != null)
            {
                opCol.Add(ExecutionContext.CreateOperation(Successor));
            }
            return(opCol);
        }
コード例 #7
0
        public override IOperation Apply()
        {
            var scopes = ExecutionContext.Scope.SubScopes;

            if (scopes.Count < 1)
            {
                throw new ArgumentException("At least one layer must exist.");
            }

            var newScope = (IScope)scopes.Last().Clone();

            int scopeNumber;

            if (int.TryParse(newScope.Name, out scopeNumber))
            {
                newScope.Name = (scopeNumber + 1).ToString();
            }

            scopes.Add(newScope);

            var next = new OperationCollection(base.Apply());

            if (NewLayerOperator != null)
            {
                next.Insert(0, ExecutionContext.CreateOperation(NewLayerOperator, newScope));
            }
            return(next);
        }
コード例 #8
0
ファイル: ParallelEngine.cs プロジェクト: lulzzz/HeuristicLab
        private static void RepairStack(Stack <IOperation> executionStack, Stack <IOperation>[] parallelExecutionStacks)
        {
            OperationCollection remaining = new OperationCollection()
            {
                Parallel = true
            };

            for (int i = 0; i < parallelExecutionStacks.Length; i++)
            {
                if (parallelExecutionStacks[i].Count == 1)
                {
                    remaining.Add(parallelExecutionStacks[i].Pop());
                }
                if (parallelExecutionStacks[i].Count > 1)
                {
                    OperationCollection ops = new OperationCollection();
                    while (parallelExecutionStacks[i].Count > 0)
                    {
                        ops.Add(parallelExecutionStacks[i].Pop());
                    }
                    remaining.Add(ops);
                }
            }
            if (remaining.Count > 0)
            {
                executionStack.Push(remaining);
            }
        }
コード例 #9
0
    public static void Main()
    {
        // Read the 'StockQuote.wsdl' file as input.
        ServiceDescription myServiceDescription = ServiceDescription.Read("StockQuote.wsdl");

        // Get the operation fault collection and remove the operation fault with the name 'ErrorString'.
        PortTypeCollection       myPortTypeCollection       = myServiceDescription.PortTypes;
        PortType                 myPortType                 = myPortTypeCollection[0];
        OperationCollection      myOperationCollection      = myPortType.Operations;
        Operation                myOperation                = myOperationCollection[0];
        OperationFaultCollection myOperationFaultCollection = myOperation.Faults;

        if (myOperationFaultCollection.Contains(myOperationFaultCollection["ErrorString"]))
        {
            myOperationFaultCollection.Remove(myOperationFaultCollection["ErrorString"]);
        }

        // Get the fault binding collection and remove the fault binding with the name 'ErrorString'.
// <Snippet1>
        BindingCollection          myBindingCollection          = myServiceDescription.Bindings;
        Binding                    myBinding                    = myBindingCollection[0];
        OperationBindingCollection myOperationBindingCollection = myBinding.Operations;
        OperationBinding           myOperationBinding           = myOperationBindingCollection[0];
        FaultBindingCollection     myFaultBindingCollection     = myOperationBinding.Faults;

        if (myFaultBindingCollection.Contains(myFaultBindingCollection["ErrorString"]))
        {
            myFaultBindingCollection.Remove(myFaultBindingCollection["ErrorString"]);
        }
// </Snippet1>

        myServiceDescription.Write(Console.Out);
    }
コード例 #10
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
        /// <summary>
        /// 获得数据列表
        /// </summary>
        /// <returns></returns>
        public static List <OperationInfo> GetList()
        {
            string cacheKey = GetCacheKey();

            //本实体已经注册成缓存实体,并且缓存存在的时候,直接从缓存取
            if (CachedEntityCommander.IsTypeRegistered(typeof(OperationInfo)) && CachedEntityCommander.GetCache(cacheKey) != null)
            {
                return(CachedEntityCommander.GetCache(cacheKey) as List <OperationInfo>);
            }
            else
            {
                List <OperationInfo> list       = new List <OperationInfo>();
                OperationCollection  collection = new  OperationCollection();
                Query qry = new Query(Operation.Schema);
                collection.LoadAndCloseReader(qry.ExecuteReader());
                foreach (Operation operation in collection)
                {
                    OperationInfo operationInfo = new OperationInfo();
                    LoadFromDAL(operationInfo, operation);
                    list.Add(operationInfo);
                }
                //生成缓存
                if (CachedEntityCommander.IsTypeRegistered(typeof(OperationInfo)))
                {
                    CachedEntityCommander.SetCache(cacheKey, list);
                }
                return(list);
            }
        }
コード例 #11
0
        private void LoadOperations(string resourceTypeCode)
        {
            try
            {
                OperationCategoryManager    opCatMan = new OperationCategoryManager();
                OperationCategoryCollection opCats   = opCatMan.GetAllOperationCategories();

                OperationManager    opMan = new OperationManager();
                OperationCollection ops   = opMan.FindOperationsByResourceType(resourceTypeCode);

                cbxListOperations.Items.Clear();
                foreach (OperationCategory opCat in opCats)
                {
                    ListItem cbxOperation = new ListItem(opCat.Name, opCat.OperationCode.ToString());
                    foreach (Operation op in ops)
                    {
                        if (op.OperationCode == opCat.OperationCode)
                        {
                            cbxOperation.Selected = true;
                        }
                    }
                    cbxListOperations.Items.Add(cbxOperation);
                }
            }
            catch (Exception ex)
            {
                ucErrorBox.Message = ex.Message;
                CurrentFormState   = FormState.ErrorState;
                this.SaveErrorLog(ex);
            }
        }
コード例 #12
0
        /// <summary>
        /// Deals with the next operation, if it is an <see cref="AtomicOperation"/> it is executed,
        /// if it is a <see cref="CompositeOperation"/> its single operations are pushed on the execution stack.
        /// </summary>
        /// <remarks>If an error occurs during the execution the operation is aborted and the operation
        /// is pushed on the stack again.<br/>
        /// If the execution was successful <see cref="EngineBase.OnOperationExecuted"/> is called.</remarks>
        protected virtual void ProcessNextOperation(bool logOperations, CancellationToken cancellationToken)
        {
            IAtomicOperation atomicOperation = CurrentOperation as IAtomicOperation;
              OperationCollection operations = CurrentOperation as OperationCollection;
              if (atomicOperation != null && operations != null)
            throw new InvalidOperationException("Current operation is both atomic and an operation collection");

              if (atomicOperation != null) {
            if (logOperations)
              Log.LogMessage(string.Format("Performing atomic operation {0}", Utils.Name(atomicOperation)));
            PerformAtomicOperation(atomicOperation, cancellationToken);
              } else if (operations != null) {
            if (logOperations)
              Log.LogMessage("Expanding operation collection");
            ExecutionStack.AddRange(operations.Reverse());
            CurrentOperation = null;
              } else if (ExecutionStack.Count > 0) {
            if (logOperations)
              Log.LogMessage("Popping execution stack");
            CurrentOperation = ExecutionStack.Last();
            ExecutionStack.RemoveAt(ExecutionStack.Count - 1);
              } else {
            if (logOperations)
              Log.LogMessage("Nothing to do");
              }
              OperatorTrace.Regenerate(CurrentAtomicOperation);
        }
コード例 #13
0
        private void GetOperations()
        {
            try
            {
                if (Request["id"] != null)
                {
                    int resourceID            = int.Parse(Request["id"]);
                    OperationManager    opMan = new OperationManager();
                    OperationCollection ops   = opMan.FindOperationsByResources(resourceID);

                    cbxListOperation.Items.Clear();
                    foreach (Operation op in ops)
                    {
                        OperationCategoryManager opCatMan = new OperationCategoryManager();
                        OperationCategory        opCat    = opCatMan.GetOperationCategory(op.OperationCode);
                        ListItem cbxOperation             = new ListItem(opCat.Name, op.OperationCode.ToString());
                        ListItem cbxDenyOperation         = new ListItem(opCat.Name, op.OperationCode.ToString());
                        cbxListOperation.Items.Add(cbxOperation);
                        cbxListDenyOperation.Items.Add(cbxDenyOperation);
                    }
                }
            }
            catch (Exception ex)
            {
                ucErrorBox.Message = ex.Message;
                CurrentFormState   = FormState.ErrorState;
            }
        }
コード例 #14
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
        /// <summary>
        /// 获得分页列表,无论是否是缓存实体都从数据库直接拿取数据
        /// </summary>
        /// <param name="pPageIndex">页数</param>
        /// <param name="pPageSize">每页列表</param>
        /// <param name="pOrderBy">排序</param>
        /// <param name="pSortExpression">排序字段</param>
        /// <param name="pRecordCount">列表行数</param>
        /// <returns>数据分页</returns>
        public static List <OperationInfo> GetPagedList(int pPageIndex, int pPageSize, SortDirection pOrderBy, string pSortExpression, out int pRecordCount)
        {
            if (pPageIndex <= 1)
            {
                pPageIndex = 1;
            }
            List <OperationInfo> list = new List <OperationInfo>();

            Query q = Operation.CreateQuery();

            q.PageIndex = pPageIndex;
            q.PageSize  = pPageSize;
            q.ORDER_BY(pSortExpression, pOrderBy.ToString());
            OperationCollection collection = new  OperationCollection();

            collection.LoadAndCloseReader(q.ExecuteReader());

            foreach (Operation operation  in collection)
            {
                OperationInfo operationInfo = new OperationInfo();
                LoadFromDAL(operationInfo, operation);
                list.Add(operationInfo);
            }
            pRecordCount = q.GetRecordCount();

            return(list);
        }
コード例 #15
0
        public void InitializeOperations()
        {
            // workaround for internal constructor
            PortType portType = new PortType();

            operations = portType.Operations;
        }
コード例 #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="category"></param>
        /// <returns></returns>
        public OperationCollection FindOperationsByCategory(int operationCode)
        {
            try
            {
                OperationCollection collection = new OperationCollection();

                // create sql param
                SqlParameter prmOperationCode = new SqlParameter("@OperationCode", SqlDbType.Int, 4);
                prmOperationCode.Direction = ParameterDirection.Input;
                prmOperationCode.Value     = operationCode;

                // execute stored
                using (IDataReader dr = Database.ExecuteReader("UspFindOperationsByResource", CommandType.StoredProcedure, prmOperationCode))
                {
                    while (dr.Read())
                    {
                        Operation operation = Populate(dr);
                        collection.Add(operation);
                    }
                }

                return(collection);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #17
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection();
   next.Add(ExecutionContext.CreateOperation(StrategyVectorCrossover));
   if (Crossover != null)
     next.Add(ExecutionContext.CreateOperation(Crossover));
   next.Add(base.Apply());
   return next;
 }
コード例 #18
0
 protected override void RestoreFromSnapshot(AccountSnapshot snapshot)
 {
     Number      = snapshot.Number;
     Amount      = snapshot.Amount;
     Active      = snapshot.Active;
     ClientId    = snapshot.ClientId;
     _operations = new OperationCollection(snapshot.Operations);
 }
コード例 #19
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection(base.Apply());
   if (ConditionParameter.ActualValue != null && ConditionParameter.ActualValue.Value) {
     if (TrueBranch != null) next.Insert(0, ExecutionContext.CreateOperation(TrueBranch));
   } else {
     if (FalseBranch != null) next.Insert(0, ExecutionContext.CreateOperation(FalseBranch));
   }
   return next;
 }
コード例 #20
0
 public override IOperation InstrumentedApply() {
   var next = new OperationCollection(base.InstrumentedApply());
   if (TerminateParameter.ActualValue.Value) {
     if (TerminateBranch != null) next.Insert(0, ExecutionContext.CreateOperation(TerminateBranch));
   } else {
     if (ContinueBranch != null) next.Insert(0, ExecutionContext.CreateOperation(ContinueBranch));
   }
   return next;
 }
コード例 #21
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
 /// <summary>
 /// 批量装载
 /// </summary>
 internal static void LoadFromDALPatch(List <OperationInfo> pList, OperationCollection pCollection)
 {
     foreach (Operation operation in pCollection)
     {
         OperationInfo operationInfo = new OperationInfo();
         LoadFromDAL(operationInfo, operation);
         pList.Add(operationInfo);
     }
 }
コード例 #22
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection(base.Apply());
   if (RandomParameter.ActualValue.NextDouble() < ProbabilityParameter.ActualValue.Value) {
     if (FirstBranch != null) next.Insert(0, ExecutionContext.CreateOperation(FirstBranch));
   } else {
     if (SecondBranch != null) next.Insert(0, ExecutionContext.CreateOperation(SecondBranch));
   }
   return next;
 }
コード例 #23
0
    public static void Main()
    {
        try
        {
            // Read the 'MathService_Input_cs.wsdl' file.
            ServiceDescription myDescription =
                ServiceDescription.Read("MathService_Input_cs.wsdl");
            PortTypeCollection myPortTypeCollection = myDescription.PortTypes;
            // Get the 'OperationCollection' for 'SOAP' protocol.
            OperationCollection myOperationCollection =
                myPortTypeCollection[0].Operations;
            Operation myOperation = new Operation();
            myOperation.Name = "Add";
            OperationMessage myOperationMessageInput =
                (OperationMessage) new OperationInput();
            myOperationMessageInput.Message = new XmlQualifiedName
                                                  ("AddSoapIn", myDescription.TargetNamespace);
            OperationMessage myOperationMessageOutput =
                (OperationMessage) new OperationOutput();
            myOperationMessageOutput.Message = new XmlQualifiedName(
                "AddSoapOut", myDescription.TargetNamespace);
            myOperation.Messages.Add(myOperationMessageInput);
            myOperation.Messages.Add(myOperationMessageOutput);
            myOperationCollection.Add(myOperation);

            if (myOperationCollection.Contains(myOperation) == true)
            {
                Console.WriteLine("The index of the added 'myOperation' " +
                                  "operation is : " +
                                  myOperationCollection.IndexOf(myOperation));
            }

            myOperationCollection.Remove(myOperation);
            // Insert the 'myOpearation' operation at the index '0'.
            myOperationCollection.Insert(0, myOperation);
            Console.WriteLine("The operation at index '0' is : " +
                              myOperationCollection[0].Name);

            Operation[] myOperationArray = new Operation[
                myOperationCollection.Count];
            myOperationCollection.CopyTo(myOperationArray, 0);
            Console.WriteLine("The operation(s) in the collection are :");
            for (int i = 0; i < myOperationCollection.Count; i++)
            {
                Console.WriteLine(" " + myOperationArray[i].Name);
            }

            myDescription.Write("MathService_New_cs.wsdl");
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }
    }
コード例 #24
0
        private DispatchRuntime(SharedRuntimeState shared)
        {
            _shared = shared;

            _operations                    = new OperationCollection(this);
            _synchronizationContext        = ThreadBehavior.GetCurrentSynchronizationContext();
            _automaticInputSessionShutdown = true;

            _unhandled = new DispatchOperation(this, "*", MessageHeaders.WildcardAction, MessageHeaders.WildcardAction);
        }
コード例 #25
0
        public override IOperation Apply()
        {
            OperationCollection next = new OperationCollection(base.Apply());

            if (operatorGraph.InitialOperator != null)
            {
                next.Insert(0, ExecutionContext.CreateChildOperation(operatorGraph.InitialOperator));
            }
            return(next);
        }
コード例 #26
0
        public override IOperation InstrumentedApply()
        {
            OperationCollection result = new OperationCollection();

            foreach (IOperator op in Operators.CheckedItems.OrderBy(x => x.Index).Select(x => x.Value))
            {
                result.Add(ExecutionContext.CreateOperation(op));
            }
            result.Add(base.InstrumentedApply());
            return(result);
        }
コード例 #27
0
    public override IOperation InstrumentedApply() {
      IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

      VRPMoveEvaluator moveEvaluator = move.GetMoveEvaluator();
      moveEvaluator.VRPMoveParameter.ActualName = VRPMoveParameter.Name;

      OperationCollection next = new OperationCollection(base.InstrumentedApply());
      next.Insert(0, ExecutionContext.CreateOperation(moveEvaluator));

      return next;
    }
コード例 #28
0
        public override IOperation Apply()
        {
            OperationCollection next = new OperationCollection(base.Apply());
            IOperator           op   = OperatorParameter.ActualValue;

            if (op != null)
            {
                next.Insert(0, ExecutionContext.CreateOperation(op));
            }
            return(next);
        }
コード例 #29
0
    public override IOperation InstrumentedApply() {
      var decoder = ScheduleDecoderParameter.ActualValue;
      var evaluator = ScheduleEvaluatorParameter.ActualValue;
      if (evaluator == null) throw new InvalidOperationException("A ScheduleEvaluator could not be found.");

      var operations = new OperationCollection(base.InstrumentedApply());
      operations.Insert(0, ExecutionContext.CreateChildOperation(evaluator));
      if (decoder != null) // decode before evaluating
        operations.Insert(0, ExecutionContext.CreateChildOperation(decoder));
      return operations;
    }
コード例 #30
0
    public override IOperation Apply() {
      int generations = GenerationsParameter.ActualValue.Value;
      int ageGap = AgeGapParameter.ActualValue.Value;

      var next = new OperationCollection(base.Apply());
      if (generations % ageGap == 0) {
        var layerZeroScope = ExecutionContext.Scope.SubScopes[0];
        if (FirstLayerOperator != null)
          next.Insert(0, ExecutionContext.CreateChildOperation(FirstLayerOperator, layerZeroScope));
      }
      return next;
    }
コード例 #31
0
    public static void Main()
    {
        try
        {
            // Read the 'StockQuote.wsdl' file as input.
            ServiceDescription myServiceDescription = ServiceDescription.
                                                      Read("StockQuote_cs.wsdl");
            // Remove the operation fault with the name 'ErrorString'.
            PortTypeCollection myPortTypeCollection = myServiceDescription.
                                                      PortTypes;
            PortType            myPortType            = myPortTypeCollection[0];
            OperationCollection myOperationCollection = myPortType.Operations;
            Operation           myOperation           = myOperationCollection[0];

// <Snippet1>
            OperationFaultCollection myOperationFaultCollection =
                myOperation.Faults;
            OperationFault myOperationFault =
                myOperationFaultCollection["ErrorString"];
            if (myOperationFault != null)
            {
                myOperationFaultCollection.Remove(myOperationFault);
            }
// </Snippet1>

            // Remove the fault binding with the name 'ErrorString'.
            BindingCollection myBindingCollection = myServiceDescription.
                                                    Bindings;
            Binding myBinding = myBindingCollection[0];
            OperationBindingCollection myOperationBindingCollection =
                myBinding.Operations;
            OperationBinding myOperationBinding =
                myOperationBindingCollection[0];
            FaultBindingCollection myFaultBindingCollection =
                myOperationBinding.Faults;
            if (myFaultBindingCollection.Contains(
                    myFaultBindingCollection["ErrorString"]))
            {
                myFaultBindingCollection.Remove(
                    myFaultBindingCollection["ErrorString"]);
            }

            myServiceDescription.Write("OperationFaultCollection_out.wsdl");
            Console.WriteLine("WSDL file with name 'OperationFaultCollection_out.wsdl'" +
                              " created Successfully");
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception caught!!!");
            Console.WriteLine("Source : " + e.Source);
            Console.WriteLine("Message : " + e.Message);
        }
    }
コード例 #32
0
        public override IOperation Apply()
        {
            OperationCollection next = new OperationCollection();

            next.Add(ExecutionContext.CreateOperation(StrategyVectorCrossover));
            if (Crossover != null)
            {
                next.Add(ExecutionContext.CreateOperation(Crossover));
            }
            next.Add(base.Apply());
            return(next);
        }
コード例 #33
0
 public override IOperation InstrumentedApply() {
   List<IScope> scopes = GetScopesOnLevel(ExecutionContext.Scope, Depth.Value).ToList();
   OperationCollection next = new OperationCollection(base.InstrumentedApply());
   if (scopes.Count != Operators.Count)
     throw new ArgumentException("The number of operators doesn't match the number of sub-scopes at depth " + Depth.Value);
   OperationCollection inner = new OperationCollection();
   inner.Parallel = Parallel == null ? false : Parallel.Value;
   for (int i = 0; i < scopes.Count(); i++) {
     inner.Add(ExecutionContext.CreateOperation(Operators[i], scopes[i]));
   }
   next.Insert(0, inner);
   return next;
 }
コード例 #34
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection(base.Apply());
   if (Operator != null) {
     List<IScope> scopes = GetScopesOnLevel(ExecutionContext.Scope, Depth.Value).ToList();
     OperationCollection inner = new OperationCollection();
     inner.Parallel = Parallel == null ? false : Parallel.Value;
     for (int i = 0; i < scopes.Count; i++) {
       inner.Add(ExecutionContext.CreateOperation(Operator, scopes[i]));
     }
     next.Insert(0, inner);
   }
   return next;
 }
コード例 #35
0
ファイル: DispatchRuntime.cs プロジェクト: HongGit/wcf
        private DispatchRuntime(SharedRuntimeState shared)
        {
            _shared = shared;

            _operations                    = new OperationCollection(this);
            _messageInspectors             = NewBehaviorCollection <IDispatchMessageInspector>();
            _synchronizationContext        = ThreadBehavior.GetCurrentSynchronizationContext();
            _automaticInputSessionShutdown = true;

            _unhandled = new DispatchOperation(this, "*", MessageHeaders.WildcardAction, MessageHeaders.WildcardAction);
            _unhandled.InternalFormatter = MessageOperationFormatter.Instance;
            _unhandled.InternalInvoker   = new UnhandledActionInvoker(this);
        }
コード例 #36
0
        public override IOperation Apply()
        {
            IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

            ITabuMaker moveTabuMaker = move.GetTabuMaker();

            (moveTabuMaker as IVRPMoveOperator).VRPMoveParameter.ActualName = VRPMoveParameter.Name;

            OperationCollection next = new OperationCollection(base.Apply());

            next.Insert(0, ExecutionContext.CreateOperation(moveTabuMaker));

            return(next);
        }
コード例 #37
0
        public NXSessionInfo(Session session, UFSession ufsession)
        {
            theSession   = session;
            theUFSession = ufsession;

            workPart    = theSession.Parts.Work;
            displayPart = theSession.Parts.Display;

            part_tag = theUFSession.Part.AskDisplayPart();
            theUFSession.Part.AskPartName(part_tag, out part_name);

            OperationCollection opers = displayPart.CAMSetup.CAMOperationCollection;
            NCGroupCollection   ncgrc = displayPart.CAMSetup.CAMGroupCollection;

            MCSManager.Instance().McsListClear();

            foreach (CAMObject camobj in ncgrc.ToArray())
            {
                if (camobj is OrientGeometry)
                {
                    mcsobj   = camobj;
                    mcs_name = camobj.Name;
                    mcs_geometry.Add(mcs_name);
                    workpice_geometry.Add(mcs_name);

                    MillOrientGeomBuilder     millOrientGeom = displayPart.CAMSetup.CAMGroupCollection.CreateMillOrientGeomBuilder(mcsobj);
                    CartesianCoordinateSystem cartesianCoordinateSystem;
                    cartesianCoordinateSystem = millOrientGeom.Mcs;
                    nmx    = cartesianCoordinateSystem.Orientation;
                    origin = cartesianCoordinateSystem.Origin;
                    MCSManager.Instance().AddValue(nmx, mcs_name, origin);
                }
                if (camobj is FeatureGeometry)
                {
                    workpice_geometry.Add(camobj.Name);
                }

                if (camobj is NXOpen.CAM.Operation)
                {
                    opName.Add(camobj.Name);

                    //      NXSessionManager.Instance.OperationList.Add(camobj) ;
                    //  MessageBox.Show(camobj.Name);
                }
            }

            RaisePropertyChanged("GetMcsGeometry");
            RaisePropertyChanged("GetWorkPiceGeometry");
            RaisePropertyChanged("TheSession");
        }
コード例 #38
0
    public override IOperation InstrumentedApply() {
      IVRPEncoding solution = VRPToursParameter.ActualValue;
      if (!(solution is PotvinEncoding)) {
        VRPToursParameter.ActualValue = PotvinEncoding.ConvertFrom(solution, ProblemInstance);
      }

      OperationCollection next = new OperationCollection(base.InstrumentedApply());

      VehicleAssignmentParameter.ActualValue = (VRPToursParameter.ActualValue as PotvinEncoding).VehicleAssignment;
      VehicleAssignmentManipuator.Value.PermutationParameter.ActualName = VehicleAssignmentParameter.ActualName;
      next.Insert(0, ExecutionContext.CreateOperation(VehicleAssignmentManipuator.Value));

      return next;
    }
コード例 #39
0
        public override IOperation InstrumentedApply()
        {
            IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

            VRPMoveEvaluator moveEvaluator = move.GetMoveEvaluator();

            moveEvaluator.VRPMoveParameter.ActualName = VRPMoveParameter.Name;

            OperationCollection next = new OperationCollection(base.InstrumentedApply());

            next.Insert(0, ExecutionContext.CreateOperation(moveEvaluator));

            return(next);
        }
コード例 #40
0
        public override IOperation InstrumentedApply()
        {
            if (!Operators.CheckedItems.Any())
            {
                throw new InvalidOperationException(Name + ": Please add at least one termination criterion.");
            }

            var next = new OperationCollection(base.InstrumentedApply());

            foreach (var item in Operators.CheckedItems)
            {
                next.Add(ExecutionContext.CreateOperation(item.Value));
            }
            return(next);
        }
コード例 #41
0
    public override IOperation Apply() {
      var scopes = ExecutionContext.Scope.SubScopes;
      if (scopes.Count < 1)
        throw new ArgumentException("At least one layer must exist.");

      var newScope = (IScope)scopes.Last().Clone();

      int scopeNumber;
      if (int.TryParse(newScope.Name, out scopeNumber))
        newScope.Name = (scopeNumber + 1).ToString();

      scopes.Add(newScope);

      var next = new OperationCollection(base.Apply());
      if (NewLayerOperator != null)
        next.Insert(0, ExecutionContext.CreateOperation(NewLayerOperator, newScope));
      return next;
    }
    private IOperation CreatePruningOperation() {
      var operations = new OperationCollection { Parallel = true };
      var range = GetSliceBounds();
      var qualities = Quality.Select(x => x.Value).ToArray();
      var indices = Enumerable.Range(0, qualities.Length).ToArray();
      indices.StableSort((a, b) => qualities[a].CompareTo(qualities[b]));

      if (!Maximization.Value) Array.Reverse(indices);

      var subscopes = ExecutionContext.Scope.SubScopes;
      var random = RandomParameter.ActualValue;

      var empty = new EmptyOperator();

      for (int i = 0; i < indices.Length; ++i) {
        IOperator @operator;
        if (range.Start <= i && i < range.End && random.NextDouble() <= PruningProbability)
          @operator = PruningOperator;
        else @operator = empty;
        var index = indices[i];
        var subscope = subscopes[index];
        operations.Add(ExecutionContext.CreateChildOperation(@operator, subscope));
      }
      return operations;
    }
コード例 #43
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
 /// <summary>
 /// 获得数据列表
 /// </summary>
 /// <returns></returns>
 public static List<OperationInfo> GetList()
 {
     string cacheKey = GetCacheKey();
     //本实体已经注册成缓存实体,并且缓存存在的时候,直接从缓存取
     if (CachedEntityCommander.IsTypeRegistered(typeof(OperationInfo)) && CachedEntityCommander.GetCache(cacheKey) != null)
     {
         return CachedEntityCommander.GetCache(cacheKey) as List< OperationInfo>;
     }
     else
     {
         List< OperationInfo>  list =new List< OperationInfo>();
         OperationCollection  collection=new  OperationCollection();
         Query qry = new Query(Operation.Schema);
         collection.LoadAndCloseReader(qry.ExecuteReader());
         foreach(Operation operation in collection)
         {
             OperationInfo operationInfo= new OperationInfo();
             LoadFromDAL(operationInfo,operation);
             list.Add(operationInfo);
         }
       	//生成缓存
         if (CachedEntityCommander.IsTypeRegistered(typeof(OperationInfo)))
         {
             CachedEntityCommander.SetCache(cacheKey, list);
         }
         return list;
     }
 }
コード例 #44
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
        /// <summary>
        /// 获得分页列表,无论是否是缓存实体都从数据库直接拿取数据
        /// </summary>
        /// <param name="pPageIndex">页数</param>
        /// <param name="pPageSize">每页列表</param>
        /// <param name="pOrderBy">排序</param>
        /// <param name="pSortExpression">排序字段</param>
        /// <param name="pRecordCount">列表行数</param>
        /// <returns>数据分页</returns>
        public static List<OperationInfo> GetPagedList(int pPageIndex,int pPageSize,SortDirection pOrderBy,string pSortExpression,out int pRecordCount)
        {
            if(pPageIndex<=1)
            pPageIndex=1;
            List< OperationInfo> list = new List< OperationInfo>();

            Query q = Operation .CreateQuery();
            q.PageIndex = pPageIndex;
            q.PageSize = pPageSize;
            q.ORDER_BY(pSortExpression,pOrderBy.ToString());
            OperationCollection  collection=new  OperationCollection();
             	collection.LoadAndCloseReader(q.ExecuteReader());

            foreach (Operation  operation  in collection)
            {
                OperationInfo operationInfo = new OperationInfo();
                LoadFromDAL(operationInfo,   operation);
                list.Add(operationInfo);
            }
            pRecordCount=q.GetRecordCount();

            return list;
        }
コード例 #45
0
    public override IOperation Apply() {
      //code executed in the first call of analyzer
      if (qualitiesBeforeCoOp == null) {
        double[] trainingQuality;
        // sort is ascending and we take the first n% => order so that best solutions are smallest
        // sort order is determined by maximization parameter
        if (Maximization.Value) {
          // largest values must be sorted first
          trainingQuality = Quality.Select(x => -x.Value).ToArray();
        } else {
          // smallest values must be sorted first
          trainingQuality = Quality.Select(x => x.Value).ToArray();
        }
        // sort trees by training qualities
        int topN = (int)Math.Max(trainingQuality.Length * PercentageOfBestSolutions, 1);
        scopeIndexes = Enumerable.Range(0, trainingQuality.Length).ToArray();
        Array.Sort(trainingQuality, scopeIndexes);
        scopeIndexes = scopeIndexes.Take(topN).ToArray();
        qualitiesBeforeCoOp = scopeIndexes.Select(x => Quality[x].Value).ToArray();

        OperationCollection operationCollection = new OperationCollection();
        operationCollection.Parallel = true;
        foreach (var scopeIndex in scopeIndexes) {
          var childOperation = ExecutionContext.CreateChildOperation(ConstantOptimizationEvaluator, ExecutionContext.Scope.SubScopes[scopeIndex]);
          operationCollection.Add(childOperation);
        }

        return new OperationCollection { operationCollection, ExecutionContext.CreateOperation(this) };
      }

      //code executed to analyze results of constant optimization
      double[] qualitiesAfterCoOp = scopeIndexes.Select(x => Quality[x].Value).ToArray();
      var qualityImprovement = qualitiesBeforeCoOp.Zip(qualitiesAfterCoOp, (b, a) => a - b).ToArray();

      if (!ResultCollection.ContainsKey(DataTableNameConstantOptimizationImprovement)) {
        var dataTable = new DataTable(DataTableNameConstantOptimizationImprovement);
        ResultCollection.Add(new Result(DataTableNameConstantOptimizationImprovement, dataTable));
        dataTable.VisualProperties.YAxisTitle = "R²";

        dataTable.Rows.Add(new DataRow(DataRowNameMinimumImprovement));
        MinimumImprovement.VisualProperties.StartIndexZero = true;

        dataTable.Rows.Add(new DataRow(DataRowNameMedianImprovement));
        MedianImprovement.VisualProperties.StartIndexZero = true;

        dataTable.Rows.Add(new DataRow(DataRowNameAverageImprovement));
        AverageImprovement.VisualProperties.StartIndexZero = true;

        dataTable.Rows.Add(new DataRow(DataRowNameMaximumImprovement));
        MaximumImprovement.VisualProperties.StartIndexZero = true;
      }

      MinimumImprovement.Values.Add(qualityImprovement.Min());
      MedianImprovement.Values.Add(qualityImprovement.Median());
      AverageImprovement.Values.Add(qualityImprovement.Average());
      MaximumImprovement.Values.Add(qualityImprovement.Max());

      qualitiesBeforeCoOp = null;
      scopeIndexes = null;
      return base.Apply();
    }
コード例 #46
0
    public override IOperation Apply() {
      IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

      ITabuChecker tabuChecker;
      if (UseAspirationCriterion.Value)
        tabuChecker = move.GetSoftTabuChecker();
      else
        tabuChecker = move.GetTabuChecker();

      (tabuChecker as IVRPMoveOperator).VRPMoveParameter.ActualName = VRPMoveParameter.Name;

      OperationCollection next = new OperationCollection(base.Apply());
      next.Insert(0, ExecutionContext.CreateOperation(tabuChecker));

      return next;
    }
コード例 #47
0
    public virtual IOperation InstrumentedApply() {
      if (!AfterExecutionOperators.Any()) {
        if (Successor != null) return ExecutionContext.CreateOperation(Successor);
        return null;
      }

      var opCol = new OperationCollection();
      foreach (var afterAction in AfterExecutionOperators) {
        var afterActionOperation = ExecutionContext.CreateChildOperation(afterAction);
        opCol.Add(afterActionOperation);
      }

      if (Successor != null)
        opCol.Add(ExecutionContext.CreateOperation(Successor));
      return opCol;
    }
コード例 #48
0
    public override IOperation Apply() {
      int count = NumberOfSolutionsParameter.ActualValue.Value;
      IOperator creator = SolutionCreatorParameter.ActualValue;
      IOperator evaluator = EvaluatorParameter.ActualValue;
      bool parallel = ParallelParameter.ActualValue.Value;

      int current = CurrentScope.SubScopes.Count;
      for (int i = 0; i < count; i++)
        CurrentScope.SubScopes.Add(new Scope((current + i).ToString()));

      OperationCollection creation = new OperationCollection();
      OperationCollection evaluation = new OperationCollection() { Parallel = parallel };
      for (int i = 0; i < count; i++) {
        if (creator != null) creation.Add(ExecutionContext.CreateOperation(creator, CurrentScope.SubScopes[current + i]));
        if (evaluator != null) evaluation.Add(ExecutionContext.CreateOperation(evaluator, CurrentScope.SubScopes[current + i]));
      }
      OperationCollection next = new OperationCollection();
      next.Add(creation);
      next.Add(evaluation);
      next.Add(base.Apply());
      return next;
    }
コード例 #49
0
    public override IOperation InstrumentedApply() {
      IOperator successor = null;

      if (ActualProbabilitiesParameter.ActualValue == null) {
        ActualProbabilitiesParameter.Value = ProbabilitiesParameter.ActualValue.Clone() as DoubleArray;
      } else {
        String key = "SuccessfulOffspringAnalyzer Results";

        ResultCollection results = null;
        IScope scope = ExecutionContext.Parent.Scope;
        int depth = 1;
        while (scope != null && depth < DepthParameter.Value.Value) {
          scope = scope.Parent;
          depth++;
        }
        if (scope != null)
          results = scope.Variables["Results"].Value as ResultCollection;

        if (results != null && results.ContainsKey(key)) {
          ResultCollection successProgressAnalysisResult = results[key].Value as ResultCollection;
          key = SuccessProgressAnalyisis.Value.Value;

          if (successProgressAnalysisResult.ContainsKey(key)) {
            DataTable successProgressAnalysis = successProgressAnalysisResult[key].Value as DataTable;

            for (int i = 0; i < Operators.Count; i++) {
              IOperator current = Operators[i];

              if (successProgressAnalysis.Rows.ContainsKey(current.Name)) {
                DataRow row = successProgressAnalysis.Rows[current.Name];

                double sum = 0.0;
                ObservableList<double> usages = row.Values;

                sum += usages.Last();

                ActualProbabilitiesParameter.ActualValue[i] += (sum / ActualProbabilitiesParameter.ActualValue[i]) * Factor.Value.Value;
              }
            }
          }
        }

        //normalize
        double max = ActualProbabilitiesParameter.ActualValue.Max();
        for (int i = 0; i < ActualProbabilitiesParameter.ActualValue.Length; i++) {
          ActualProbabilitiesParameter.ActualValue[i] /= max;
          ActualProbabilitiesParameter.ActualValue[i] =
            Math.Max(LowerBoundParameter.Value.Value,
            ActualProbabilitiesParameter.ActualValue[i]);
        }
      }

      //////////////// code has to be duplicated since ActualProbabilitiesParameter.ActualValue are updated and used for operator selection
      IRandom random = RandomParameter.ActualValue;
      DoubleArray probabilities = ActualProbabilitiesParameter.ActualValue;
      if (probabilities.Length != Operators.Count) {
        throw new InvalidOperationException(Name + ": The list of probabilities has to match the number of operators");
      }
      var checkedOperators = Operators.CheckedItems;
      if (checkedOperators.Count() > 0) {
        // select a random operator from the checked operators
        successor =
          checkedOperators.SampleProportional(random, 1, checkedOperators.Select(x => probabilities[x.Index]), false, false).First().Value;
      }

      IOperation successorOp = null;
      if (Successor != null)
        successorOp = ExecutionContext.CreateOperation(Successor);
      OperationCollection next = new OperationCollection(successorOp);
      if (successor != null) {
        SelectedOperatorParameter.ActualValue = new StringValue(successor.Name);

        if (CreateChildOperation)
          next.Insert(0, ExecutionContext.CreateChildOperation(successor));
        else next.Insert(0, ExecutionContext.CreateOperation(successor));
      } else {
        SelectedOperatorParameter.ActualValue = new StringValue("");
      }

      return next;
    }
    public override IOperation Apply() {
      if (SimilarityParameter.ActualValue == null || SimilarityParameter.ActualValue.Value.IsAlmost(-1.0)) {
        UpdateCounter.Value++;
        if (UpdateCounter.Value != UpdateInterval.Value) return base.Apply();
        UpdateCounter.Value = 0;
        var trees = SymbolicExpressionTreeParameter.ActualValue.ToList();

        SimilarityParameter.ActualValue = new DoubleValue();

        var operations = new OperationCollection { Parallel = true };
        foreach (var tree in trees) {
          var op = new SymbolicDataAnalysisExpressionTreeSimilarityCalculator(DistanceCalculatorParameter.Value) {
            CurrentSymbolicExpressionTree = tree,
            MaximumTreeDepth = MaximumSymbolicExpressionTreeDepth.Value
          };
          var operation = ExecutionContext.CreateChildOperation(op, ExecutionContext.Scope);
          operations.Add(operation);
        }
        return new OperationCollection { operations, ExecutionContext.CreateOperation(this) };
      }

      var results = ResultsParameter.ActualValue;
      // population diversity
      DataTable populationDiversityTable;
      if (!results.ContainsKey("PopulationDiversity")) {
        populationDiversityTable = new DataTable("PopulationDiversity") { VisualProperties = { YAxisTitle = "Diversity" } };
        results.Add(new Result("PopulationDiversity", populationDiversityTable));
      }
      populationDiversityTable = (DataTable)results["PopulationDiversity"].Value;
      if (!populationDiversityTable.Rows.ContainsKey("Diversity"))
        populationDiversityTable.Rows.Add(new DataRow("Diversity") { VisualProperties = { StartIndexZero = true } });

      int length = SymbolicExpressionTreeParameter.ActualValue.Length;
      var similarity = SimilarityParameter.ActualValue.Value / (length * (length - 1) / 2.0);
      var diversity = 1 - similarity;
      SimilarityParameter.ActualValue.Value = -1.0;

      populationDiversityTable.Rows["Diversity"].Values.Add(diversity);

      return base.Apply();
    }
コード例 #51
0
 public override IOperation Apply() {
   OperationCollection next = new OperationCollection(base.Apply());
   if (operatorGraph.InitialOperator != null)
     next.Insert(0, ExecutionContext.CreateChildOperation(operatorGraph.InitialOperator));
   return next;
 }
コード例 #52
0
    public override IOperation Apply() {
      IScope currentScope = ExecutionContext.Scope;

      Scope localScope = new Scope();
      Scope individual = new Scope();

      foreach (IVariable var in currentScope.Variables)
        individual.Variables.Add(var); // add reference to variable otherwise the analyzer fails (it's looking down the tree)

      localScope.SubScopes.Add(individual);
      currentScope.SubScopes.Add(localScope);
      int index = currentScope.SubScopes.Count - 1;

      SubScopesProcessor processor = new SubScopesProcessor();
      SubScopesRemover remover = new SubScopesRemover();

      remover.RemoveAllSubScopes = false;
      remover.SubScopeIndexParameter.Value = new IntValue(index);

      if (index > 0) {
        EmptyOperator eo = new EmptyOperator();
        for (int i = 0; i < index - 1; i++) {
          processor.Operators.Add(eo);
        }
      }

      VariableCreator variableCreator = new VariableCreator();
      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>(loop.IterationsParameter.ActualName, new IntValue(0)));
      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>(loop.BestLocalQualityParameter.ActualName, new DoubleValue(0)));

      variableCreator.Successor = loop;

      processor.Operators.Add(variableCreator);
      processor.Successor = remover;

      OperationCollection next = new OperationCollection(base.Apply());
      next.Insert(0, ExecutionContext.CreateChildOperation(processor));

      return next;
    }
コード例 #53
0
ファイル: OperationInfo.cs プロジェクト: xingfudaiyan/OA
 /// <summary>
 /// 批量装载
 /// </summary>
 internal static void LoadFromDALPatch(List< OperationInfo> pList, OperationCollection pCollection)
 {
     foreach (Operation operation in pCollection)
     {
         OperationInfo operationInfo = new OperationInfo();
         LoadFromDAL(operationInfo, operation );
         pList.Add(operationInfo);
     }
 }
コード例 #54
0
 public static void SetOperations(DependencyObject obj, OperationCollection value)
 {
     obj.SetValue(OperationsProperty, value);
 }
コード例 #55
0
    public override IOperation Apply() {
      IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

      ITabuMaker moveTabuMaker = move.GetTabuMaker();
      (moveTabuMaker as IVRPMoveOperator).VRPMoveParameter.ActualName = VRPMoveParameter.Name;

      OperationCollection next = new OperationCollection(base.Apply());
      next.Insert(0, ExecutionContext.CreateOperation(moveTabuMaker));

      return next;
    }
コード例 #56
0
    private void Run(object state) {
      Stack<IOperation> executionStack = (Stack<IOperation>)state;
      IOperation next;
      OperationCollection coll;
      IAtomicOperation operation;

      while (executionStack.Count > 0) {
        cancellationToken.ThrowIfCancellationRequested();

        next = executionStack.Pop();
        if (next is OperationCollection) {
          coll = (OperationCollection)next;
          if (coll.Parallel) {
            Stack<IOperation>[] stacks = new Stack<IOperation>[coll.Count];
            for (int i = 0; i < coll.Count; i++) {
              stacks[i] = new Stack<IOperation>();
              stacks[i].Push(coll[i]);
            }
            try {
              Parallel.ForEach(stacks, parallelOptions, Run);
            }
            catch (OperationCanceledException ex) {
              OperationCollection remaining = new OperationCollection() { Parallel = true };
              for (int i = 0; i < stacks.Length; i++) {
                if (stacks[i].Count == 1)
                  remaining.Add(stacks[i].Pop());
                if (stacks[i].Count > 1) {
                  OperationCollection ops = new OperationCollection();
                  while (stacks[i].Count > 0)
                    ops.Add(stacks[i].Pop());
                  remaining.Add(ops);
                }
              }
              if (remaining.Count > 0) executionStack.Push(remaining);
              throw ex;
            }
          } else {
            for (int i = coll.Count - 1; i >= 0; i--)
              if (coll[i] != null) executionStack.Push(coll[i]);
          }
        } else if (next is IAtomicOperation) {
          operation = (IAtomicOperation)next;
          try {
            next = operation.Operator.Execute((IExecutionContext)operation, cancellationToken);
          }
          catch (Exception ex) {
            executionStack.Push(operation);
            if (ex is OperationCanceledException) throw ex;
            else throw new OperatorExecutionException(operation.Operator, ex);
          }
          if (next != null) executionStack.Push(next);

          if (operation.Operator.Breakpoint) {
            string message = string.Format("Breakpoint: {0}", operation.Operator.Name != string.Empty ? operation.Operator.Name : operation.Operator.ItemName);
            Log.LogMessage(message);
            throw new OperationCanceledException(message);
          }
        }
      }
    }
コード例 #57
0
    public sealed override IOperation Apply() {
      //to speed up the execution call instrumented apply directly if no before operators exists
      if (!BeforeExecutionOperators.Any())
        return InstrumentedApply();

      //build before operations
      var opCol = new OperationCollection();
      foreach (var beforeAction in BeforeExecutionOperators) {
        var beforeActionOperation = ExecutionContext.CreateChildOperation(beforeAction);
        opCol.Add(beforeActionOperation);
      }
      //build operation for the instrumented apply
      opCol.Add(CreateInstrumentedOperation(this));
      return opCol;
    }