/// <summary>
            /// Revokes the given computation and deletes it from the trace
            /// </summary>
            /// <param name="traceEntry">The computation that is to be revoked</param>
            public override void RevokeEntry(ITraceEntry traceEntry)
            {
                if (traceEntry == null)
                {
                    throw new ArgumentNullException("traceEntry");
                }

                if (published.Contains(traceEntry))
                {
                    published.Remove(traceEntry);
                }
                else
                {
                    revoked.Add(traceEntry);
                }

                List <ITraceEntry> comps;

                if (computationsMade.TryGetValue(traceEntry.CreateInputArray(), out comps))
                {
                    comps.Remove(traceEntry);
                }
                if (computationsByTransformationRule.TryGetValue(traceEntry.TransformationRule, out comps))
                {
                    comps.Remove(traceEntry);
                }
            }
Пример #2
0
        /// <summary>
        /// Publishes the given computation to the trace
        /// </summary>
        /// <param name="traceEntry">The computation that should be added to the trace</param>
        public override void PublishEntry(ITraceEntry traceEntry)
        {
            if (traceEntry == null) throw new ArgumentNullException("traceEntry");

            if (!computations.Contains(traceEntry))
            computations.Add(traceEntry);
        }
Пример #3
0
        /// <summary>
        /// Revokes the given computation and deletes it from the trace
        /// </summary>
        /// <param name="traceEntry">The computation that is to be revoked</param>
        public override void RevokeEntry(ITraceEntry traceEntry)
        {
            if (traceEntry == null)
            {
                throw new ArgumentNullException("traceEntry");
            }

            computations.Remove(traceEntry);
        }
Пример #4
0
 private static bool IsInputArray(ITraceEntry c, object[] input)
 {
     for (int i = 0; i < input.Length; i++)
     {
         if (!object.Equals(input[i], c.GetInput(i)))
         {
             return(false);
         }
     }
     return(true);
 }
Пример #5
0
        /// <summary>
        /// Publishes the given computation to the trace
        /// </summary>
        /// <param name="traceEntry">The computation that should be added to the trace</param>
        public override void PublishEntry(ITraceEntry traceEntry)
        {
            if (traceEntry == null)
            {
                throw new ArgumentNullException("traceEntry");
            }

            if (!computations.Contains(traceEntry))
            {
                computations.Add(traceEntry);
            }
        }
Пример #6
0
            /// <summary>
            /// Publishes the given computation to the trace
            /// </summary>
            /// <param name="traceEntry">The computation that should be added to the trace</param>
            public override void PublishEntry(ITraceEntry traceEntry)
            {
                if (traceEntry == null)
                {
                    throw new ArgumentNullException("traceEntry");
                }

                if (revoked.Contains(traceEntry))
                {
                    revoked.Remove(traceEntry);
                }
                else
                {
                    var success = published.Add(traceEntry);
                    if (!success)
                    {
                        return;
                    }
                }

                var box = traceEntry.CreateInputArray();
                List <ITraceEntry> comps;

                if (!computationsMade.TryGetValue(box, out comps))
                {
                    comps = new List <ITraceEntry>();
                    if (!computationsMade.TryAdd(box, comps))
                    {
                        comps = computationsMade[box];
                    }
                }
                if (!comps.Contains(traceEntry))
                {
                    comps.Add(traceEntry);
                    var rule = traceEntry.TransformationRule;
                    if (!computationsByTransformationRule.TryGetValue(rule, out comps))
                    {
                        comps = new List <ITraceEntry>();
                        if (!computationsByTransformationRule.TryAdd(rule, comps))
                        {
                            comps = computationsByTransformationRule[rule];
                        }
                    }
                    comps.Add(traceEntry);
                }
                else
                {
                    published.Remove(traceEntry);
                }
            }
Пример #7
0
        /// <summary>
        /// Creates a new array of input elements for the given trace entry
        /// </summary>
        /// <param name="traceEntry">The current trace entry</param>
        /// <returns>A new object array containing all trace entries for this trace entry</returns>
        public static object[] CreateInputArray(this ITraceEntry traceEntry)
        {
            if (traceEntry == null)
            {
                throw new ArgumentNullException("traceEntry");
            }

            var inputTypes = traceEntry.TransformationRule.InputType;
            var array      = new object[inputTypes.Length];

            for (int i = 0; i < inputTypes.Length; i++)
            {
                array[i] = traceEntry.GetInput(i);
            }
            return(array);
        }
Пример #8
0
 /// <summary>
 /// Publishes the given computation to the trace
 /// </summary>
 /// <param name="traceEntry">The computation that should be added to the trace</param>
 public abstract void PublishEntry(ITraceEntry traceEntry);
Пример #9
0
 /// <summary>
 /// Revokes the given computation and deletes it from the trace
 /// </summary>
 /// <param name="traceEntry">The computation that is to be revoked</param>
 public abstract void RevokeEntry(ITraceEntry traceEntry);
Пример #10
0
            /// <summary>
            /// Publishes the given computation to the trace
            /// </summary>
            /// <param name="traceEntry">The computation that should be added to the trace</param>
            public override void PublishEntry(ITraceEntry traceEntry)
            {
                if (traceEntry == null) throw new ArgumentNullException("traceEntry");

                if (revoked.Contains(traceEntry))
                {
                    revoked.Remove(traceEntry);
                }
                else
                {
                    var success = published.Add(traceEntry);
                    if (!success) return;
                }

                var box = traceEntry.CreateInputArray();
                List<ITraceEntry> comps;
                if (!computationsMade.TryGetValue(box, out comps))
                {
                    comps = new List<ITraceEntry>();
                    if (!computationsMade.TryAdd(box, comps))
                    {
                        comps = computationsMade[box];
                    }
                }
                if (!comps.Contains(traceEntry))
                {
                    comps.Add(traceEntry);
                    var rule = traceEntry.TransformationRule;
                    if (!computationsByTransformationRule.TryGetValue(rule, out comps))
                    {
                        comps = new List<ITraceEntry>();
                        if (!computationsByTransformationRule.TryAdd(rule, comps))
                        {
                            comps = computationsByTransformationRule[rule];
                        }
                    }
                    comps.Add(traceEntry);
                }
                else
                {
                    published.Remove(traceEntry);
                }
            }
Пример #11
0
            /// <summary>
            /// Revokes the given computation and deletes it from the trace
            /// </summary>
            /// <param name="traceEntry">The computation that is to be revoked</param>
            public override void RevokeEntry(ITraceEntry traceEntry)
            {
                if (traceEntry == null) throw new ArgumentNullException("traceEntry");

                if (published.Contains(traceEntry))
                {
                    published.Remove(traceEntry);
                }
                else
                {
                    revoked.Add(traceEntry);
                }

                List<ITraceEntry> comps;
                if (computationsMade.TryGetValue(traceEntry.CreateInputArray(), out comps))
                {
                    comps.Remove(traceEntry);
                }
                if (computationsByTransformationRule.TryGetValue(traceEntry.TransformationRule, out comps))
                {
                    comps.Remove(traceEntry);
                }
            }
Пример #12
0
 private static bool IsInputArray(ITraceEntry c, object[] input)
 {
     for (int i = 0; i < input.Length; i++)
     {
         if (!object.Equals(input[i], c.GetInput(i))) return false;
     }
     return true;
 }
Пример #13
0
        /// <summary>
        /// Revokes the given computation and deletes it from the trace
        /// </summary>
        /// <param name="traceEntry">The computation that is to be revoked</param>
        public override void RevokeEntry(ITraceEntry traceEntry)
        {
            if (traceEntry == null) throw new ArgumentNullException("traceEntry");

            computations.Remove(traceEntry);
        }
Пример #14
0
 /// <summary>
 /// Publishes the given computation to the trace
 /// </summary>
 /// <param name="traceEntry">The computation that should be added to the trace</param>
 public abstract void PublishEntry(ITraceEntry traceEntry);
Пример #15
0
 /// <summary>
 /// Revokes the given computation and deletes it from the trace
 /// </summary>
 /// <param name="traceEntry">The computation that is to be revoked</param>
 public abstract void RevokeEntry(ITraceEntry traceEntry);