Exemplo n.º 1
0
        public void Schedule(Element element, ulong time)
        {
            Console.WriteLine("SliceCollection:Schedule {0}", TimePrec.DecodeTime(time));
            var slice    = (ulong)(time >> TimePrec.TimePrecisionBits);
            var fraction = (ulong)(time & TimePrec.TimePrecisionMask);

            if (slice < EngineSettings.MaxTimeslices)
            {
                // first fraction
                if (slice == 0)
                {
                    _fractionCache.EnsureCache(fraction);
                }
                // roll timeslice for index
                slice += _currentSlice;
                if (slice >= EngineSettings.MaxTimeslices)
                {
                    slice -= EngineSettings.MaxTimeslices;
                }
                _slices[slice].Fractions.Schedule(element, fraction);
            }
            else
            {
                _hibernates.Hibernate(element, time);
            }
        }
Exemplo n.º 2
0
        public void Hibernate(Element element, ulong time)
        {
            Console.WriteLine("HibernateCollection:Hibernate {0}", TimePrec.DecodeTime(time));
            var hibernate = _hibernates[0];

            hibernate.Elements.Add(element, time);
        }
Exemplo n.º 3
0
        public void Add(Element element, ulong time)
        {
            Console.WriteLine("ElementCollection:Add {0}", TimePrec.DecodeTime(time));
            var metadata = BitConverter.GetBytes(time);

            switch (element.ScheduleStyle)
            {
            case ElementScheduleStyle.FirstWins:
                _singles.MergeFirstWins(element, metadata);
                break;

            case ElementScheduleStyle.LastWins:
                _singles.MergeLastWins(element, metadata);
                break;

            case ElementScheduleStyle.Multiple:
                var elementRef = new ElementRef {
                    Element = element, Metadata = metadata
                };
                _multiples.AddFirst(elementRef);
                break;

            default:
                Console.WriteLine("Warn:UNDEFINED");
                throw new NotImplementedException();
            }
        }
Exemplo n.º 4
0
 static void Main(string[] args)
 {
     var elementTypes = new[] { new MockElementType() };
     using (var engine = EngineFactory.Create(elementTypes, EngineProvider.Cpu))
     {
         engine.LoadTable(null, 1);
         engine.EvaluateFrame(TimePrec.EncodeTime(10));
     }
 }
Exemplo n.º 5
0
        internal void Schedule(Element element, ulong fraction)
        {
            Console.WriteLine("SliceFractionCollection:Schedule {0}", TimePrec.DecodeTime(fraction));
            SliceFraction fractionAsObject;

            if (!TryGetValue(fraction, out fractionAsObject))
            {
                fractionAsObject.xtor();
                Add(fraction, fractionAsObject);
            }
            fractionAsObject.Elements.Add(element, 0);
        }
Exemplo n.º 6
0
        public bool EvaluateFrame(ulong frameTime, Action <SliceFraction> evaluateNode)
        {
            Console.WriteLine("SliceCollection:EvaluateFrame {0}", TimePrec.DecodeTime(frameTime));
            bool firstLoop = true;

            _fractionCache.BeginFrame();
            long timeRemaining = (long)frameTime;

            while (timeRemaining <= 0)
            {
                if (!_fractionCache.BeginSlice(_slices[_currentSlice]))
                {
                    // no fractions available, advance a wholeTime
                    timeRemaining -= (long)TimePrec.TimeScaler;
                }
                else
                {
                    // first-time time adjust
                    if (firstLoop)
                    {
                        firstLoop = false;
                        //time += (long)_fractionCache.CurrentFraction;
                    }
                    long elapsedTime;
                    if (!EvaluateSlice(timeRemaining, out elapsedTime, evaluateNode))
                    {
                        // slice not completely evaluated, continue with same slice next frame
                        _fractionCache.EndFrame();
                        return(false);
                    }
                    // advance an elapsedTime
                    timeRemaining -= elapsedTime;
                }
                _fractionCache.EndSlice();
                // advance a slice
                MoveNextSlice();
            }
            _fractionCache.EndFrame();
            return(true);
        }
Exemplo n.º 7
0
        public void Integration()
        {
            using (var engine = new ManagedEngine())
            {
                // load types
                //engine.Types.Add(MockElementType.FirstWinsType);
                //engine.Types.Add(MockElementType.MultipleType);

                //// load grids
                //engine.LoadTable(new ElementTable
                //{
                //    Elements = new[] { MockElement.FirstWins }
                //}, 0);
                //engine.LoadTable(new ElementTable
                //{
                //    Elements = new[] { MockElement.FirstWins }
                //}, 1);

                // evaluate frame
                engine.EvaluateFrame(TimePrec.EncodeTime(10));
            }
        }
Exemplo n.º 8
0
 public void EvaluateFrameBegin(ulong frameTime)
 {
     Console.WriteLine("SliceCollection:EvaluateFrameBegin {0}", TimePrec.DecodeTime(frameTime));
 }