Exemple #1
0
 void SetupDependecyMachinesRecursive(AbstractMachine machine)
 {
     machine.OnStateChanged += Con_OnStateChanged;
     foreach (AbstractMachine m in machine._dependentOnMachines)
     {
         SetupDependecyMachinesRecursive(m);
     }
 }
Exemple #2
0
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            Debug.WriteLine($"<ScheduleDebug> Created task '{machineInfo.Id}' for machine " +
                            $"'{machineInfo.Machine.Id}'.");
            this.TaskMap.TryAdd(id, machineInfo);
        }
Exemple #3
0
        /// <summary>
        /// Notify that the machine received an event that it was waiting for.
        /// </summary>
        /// <param name="machine">Machine</param>
        internal void NotifyTaskReceivedEvent(AbstractMachine machine)
        {
            var machineInfo = this.TaskMap.Values.First(mi => mi.Machine.Equals(machine) && !mi.IsCompleted);

            machineInfo.IsWaitingToReceive = false;

            Debug.WriteLine($"<ScheduleDebug> Task '{machineInfo.Id}' of machine " +
                            $"'{machineInfo.Machine.Id}' received an event and unblocked.");
        }
Exemple #4
0
        /// <summary>
        /// Creates a scheduling choice trace step.
        /// </summary>
        /// <param name="index">Index</param>
        /// <param name="scheduledMachine">Scheduled machine</param>
        /// <returns>TraceStep</returns>
        internal static TraceStep CreateSchedulingChoice(int index, AbstractMachine scheduledMachine)
        {
            var traceStep = new TraceStep();

            traceStep.Index = index;
            traceStep.Type = TraceStepType.SchedulingChoice;
            traceStep.ScheduledMachine = scheduledMachine;

            traceStep.Previous = null;
            traceStep.Next = null;

            return traceStep;
        }
Exemple #5
0
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal virtual void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug($"<ScheduleDebug> Created task '{machineInfo.Id}' for machine " +
                     $"'{machineInfo.Machine.Id}'.");

            if (this.TaskMap.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            this.TaskMap.TryAdd(id, machineInfo);
        }
Exemple #6
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal MachineInfo(int id, AbstractMachine machine)
        {
            this.Id                 = id;
            this.Machine            = machine;
            this.IsEnabled          = true;
            this.IsWaitingToReceive = false;
            this.IsActive           = false;
            this.HasStarted         = false;
            this.IsCompleted        = false;

            this.BlockingWrappedTasks   = new List <MachineInfo>();
            this.BlockingUnwrappedTasks = new List <Task>();
            this.WaitAll = false;
        }
Exemple #7
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal MachineInfo(int id, AbstractMachine machine)
        {
            this.Id = id;
            this.Machine = machine;
            this.IsEnabled = true;
            this.IsWaitingToReceive = false;
            this.IsBlocked = false;
            this.IsActive = false;
            this.HasStarted = false;
            this.IsCompleted = false;

            this.BlockingWrappedTasks = new List<MachineInfo>();
            this.BlockingUnwrappedTasks = new List<Task>();
            this.WaitAll = false;
        }
Exemple #8
0
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal override void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug($"<ScheduleDebug> Created task '{machineInfo.Id}' for machine " +
                     $"'{machineInfo.Machine.Id}'.");

            if (base.TaskMap.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            base.TaskMap.TryAdd(id, machineInfo);

            if (machine is TaskMachine)
            {
                this.WrappedTaskMap.TryAdd((machine as TaskMachine).WrappedTask.Id, machineInfo);
            }
        }
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal override void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug($"<ScheduleDebug> Created task '{machineInfo.Id}' for machine " +
                $"'{machineInfo.Machine.Id}'.");

            if (base.MachineInfos.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            base.MachineInfos.Add(machineInfo);
            base.TaskMap.TryAdd(id, machineInfo);

            if (machine is TaskMachine)
            {
                this.WrappedTaskMap.TryAdd((machine as TaskMachine).WrappedTask.Id, machineInfo);
            }
        }
Exemple #10
0
 protected void Con_OnStateChanged(AbstractMachine obj)
 {
     UpdateIsWorkingState();
 }
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal virtual void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug($"<ScheduleDebug> Created task '{machineInfo.Id}' for machine " +
                $"'{machineInfo.Machine.Id}'.");

            if (this.MachineInfos.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            this.MachineInfos.Add(machineInfo);
            this.TaskMap.TryAdd(id, machineInfo);
        }
Exemple #12
0
        /// <summary>
        /// Returns the info of the given machine.
        /// </summary>
        /// <param name="machine">Machine</param>
        /// <returns>TaskId</returns>
        protected MachineInfo GetInfoFromMachine(AbstractMachine machine)
        {
            MachineInfo machineInfo = null;
            foreach (var mi in this.MachineInfos)
            {
                if (mi.Machine.Equals(machine))
                {
                    machineInfo = mi;
                    break;
                }
            }

            return machineInfo;
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="sender"></param>
 public AbstractMessage(AbstractMachine sender)
 {
     this.sender = sender;
 }
 public SegmentRequestMessage(AbstractMachine from) : base(from)
 {
 }
Exemple #15
0
        /// <summary>
        /// Creates a schedule step.
        /// </summary>
        /// <param name="index">Index</param>
        /// <param name="scheduledMachine">Scheduled machine</param>
        /// <returns>ScheduleStep</returns>
        internal static ScheduleStep CreateSchedulingChoice(int index, AbstractMachine scheduledMachine)
        {
            var scheduleStep = new ScheduleStep();

            scheduleStep.Index = index;
            scheduleStep.Type = ScheduleStepType.SchedulingChoice;

            scheduleStep.ScheduledMachine = scheduledMachine;
            scheduleStep.ScheduledMachineType = scheduledMachine.Id.Type;
            scheduleStep.ScheduledMachineId = scheduledMachine.Id.Value;

            scheduleStep.BooleanChoice = null;
            scheduleStep.IntegerChoice = null;

            scheduleStep.Previous = null;
            scheduleStep.Next = null;

            return scheduleStep;
        }
 protected internal override Task <bool> SendEventAndExecute(MachineId mid, Event e, AbstractMachine sender, SendOptions options)
 {
     throw new NotImplementedException();
 }
 protected internal override void Monitor(Type type, AbstractMachine sender, Event e)
 {
     throw new NotImplementedException();
 }
 protected internal override int GetNondeterministicIntegerChoice(AbstractMachine machine, int maxValue)
 {
     throw new NotImplementedException();
 }
 protected internal override bool GetFairNondeterministicBooleanChoice(AbstractMachine machine, string uniqueId)
 {
     throw new NotImplementedException();
 }
Exemple #20
0
 public CountMessage(AbstractMachine from) : base(from)
 {
 }
Exemple #21
0
 public RemapPartitionMessage(AbstractMachine from, IEnumerable <KeyValuePair <int, int> > map)
     : base(from)
 {
     this.map = map.ToArray();
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="from"></param>
 /// <param name="pairs"></param>
 public SegmentResponseMessage(AbstractMachine from, IEnumerable <KeyValuePair <TNode, int> > pairs)
     : base(from)
 {
     this.pairs = pairs.ToArray();
 }
 public EstimateRefinedMessage(AbstractMachine from) : base(from)
 {
 }
 protected internal override void SendEventRemotely(MachineId mid, Event e, AbstractMachine sender, SendOptions options)
 {
     throw new NotImplementedException();
 }
Exemple #25
0
 public StopMessage(AbstractMachine from) : base(from)
 {
 }
 public ExactRefinedMessage(AbstractMachine from, IEnumerable <KeyValuePair <Tuple <TLabel, HashSet <Tuple <TLabel, int> > >, int> > partitionMap)
     : base(from)
 {
     this.partitionMap = partitionMap.ToArray();
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="from"></param>
 /// <param name="workers"></param>
 public CoordinatorMessage(AbstractMachine from, IEnumerable <AbstractMachine> workers)
     : base(from)
 {
     this.workers = workers.ToArray();
 }
Exemple #28
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="from"></param>
 /// <param name="changes"></param>
 /// <param name="signatureSize"></param>
 public UpdatePartitionMessage(AbstractMachine from, IEnumerable <KeyValuePair <TNode, int> > changes)
     : base(from)
 {
     this.changes = changes.ToArray();
 }
Exemple #29
0
        /// <summary>
        /// Notify that the machine received an event that it was waiting for.
        /// </summary>
        /// <param name="machine">Machine</param>
        internal void NotifyTaskReceivedEvent(AbstractMachine machine)
        {
            var machineInfo = this.GetInfoFromMachine(machine);

            IO.Debug("<ScheduleDebug> Task {0} of machine {1}({2}) " +
                "received an event and unblocked.", machineInfo.Id, machineInfo.Machine.GetType(),
                machineInfo.Machine.Id.MVal);

            machineInfo.IsWaiting = false;
        }
        /// <summary>
        /// Notify that the machine received an event that it was waiting for.
        /// </summary>
        /// <param name="machine">Machine</param>
        internal void NotifyTaskReceivedEvent(AbstractMachine machine)
        {
            var machineInfo = this.MachineInfos.First(mi => mi.Machine.Equals(machine) && !mi.IsCompleted);
            machineInfo.IsWaitingToReceive = false;

            IO.Debug($"<ScheduleDebug> Task '{machineInfo.Id}' of machine " +
                $"'{machineInfo.Machine.Id}' received an event and unblocked.");
        }
Exemple #31
0
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal virtual void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug("<ScheduleDebug> Created task {0} for machine {1}({2}).",
                machineInfo.Id, machineInfo.Machine.GetType(), machineInfo.Machine.Id.MVal);

            if (this.MachineInfos.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            this.MachineInfos.Add(machineInfo);
            this.TaskMap.Add(id, machineInfo);
        }
Exemple #32
0
        /// <summary>
        /// Checks if there is already an enabled task for the given machine.
        /// </summary>
        /// <param name="machine">Machine</param>
        /// <returns>Boolean</returns>
        internal bool HasEnabledTaskForMachine(AbstractMachine machine)
        {
            var enabledTasks = this.TaskMap.Values.Where(machineInfo => machineInfo.IsEnabled).ToList();

            return(enabledTasks.Any(machineInfo => machineInfo.Machine.Equals(machine)));
        }
Exemple #33
0
 /// <summary>
 /// Checks if there is already an enabled task for the given machine.
 /// </summary>
 /// <param name="machine">Machine</param>
 /// <returns>Boolean</returns>
 internal bool HasEnabledTaskForMachine(AbstractMachine machine)
 {
     var enabledTasks = this.MachineInfos.Where(machineInfo => machineInfo.IsEnabled).ToList();
     return enabledTasks.Any(machineInfo => machineInfo.Machine.Equals(machine));
 }
Exemple #34
0
 public ClearMessage(AbstractMachine from) : base(from)
 {
 }
        /// <summary>
        /// Notify that a new task has been created for the given machine.
        /// </summary>
        /// <param name="id">TaskId</param>
        /// <param name="machine">Machine</param>
        internal override void NotifyNewTaskCreated(int id, AbstractMachine machine)
        {
            var machineInfo = new MachineInfo(id, machine);

            IO.Debug("<ScheduleDebug> Created task {0} for machine {1}({2}).",
                machineInfo.Id, machineInfo.Machine.GetType(), machineInfo.Machine.Id.MVal);

            if (base.MachineInfos.Count == 0)
            {
                machineInfo.IsActive = true;
            }

            base.MachineInfos.Add(machineInfo);
            base.TaskMap.Add(id, machineInfo);
            
            if (machine is TaskMachine)
            {
                this.WrappedTaskMap.Add((machine as TaskMachine).WrappedTask.Id, machineInfo);
            }
        }
 public RefineMessage(AbstractMachine from) : base(from)
 {
 }
Exemple #37
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="from"></param>
 /// <param name="count"></param>
 public CountedMessage(AbstractMachine from, IEnumerable <int> blocks)
     : base(from)
 {
     this.blocks = blocks.ToArray();
 }
Exemple #38
0
 public ShareMessage(AbstractMachine from) : base(from)
 {
 }