Beispiel #1
0
 public ModelTime(int ticks, ModelTimeStep step, DateTimeOffset begin)
 {
     if (step == ModelTimeStep.Undefined)
     {
         throw new ArgumentException("Model time step couldn't be Undefined. (This exception can be triggered by using 0 as ModelTimeStep)");
     }
     Begin = begin;
     Ticks = ticks;
 }
Beispiel #2
0
        public void TimeSpansFromDateOperateCorrect(ModelTimeStep modelStep, ModelTimeStep spanStep, int res)
        {
            var now       = DateTimeOffset.Parse("2019-01-01");
            var scheduler = new ModelTimeScheduler(modelStep, now);

            var transform  = scheduler.GetType().GetMethod("FromModelTimeUnits", BindingFlags.NonPublic | BindingFlags.Instance);
            var multiplier = ModelTimeScheduler.GetTimeSpanMultiplier(modelStep, spanStep);

            Assert.Equal(multiplier, res);
        }
        public static DateTimeOffset AsOffset(this ModelTime time, ModelTimeStep step)
        {
            Func <int, TimeSpan> span;

            switch (step)
            {
            case ModelTimeStep.Millisecond:
                span = (t) => TimeSpan.FromMilliseconds(t);
                break;

            case ModelTimeStep.Second:
                span = (t) => TimeSpan.FromSeconds(t);
                break;

            case ModelTimeStep.Minute:
                span = (t) => TimeSpan.FromMinutes(t);
                break;

            case ModelTimeStep.Hour:
                span = (t) => TimeSpan.FromHours(t);
                break;

            case ModelTimeStep.Day:
                span = (t) => TimeSpan.FromDays(t);
                break;

            case ModelTimeStep.Month:
                span = (t) => TimeSpan.FromDays(t * 30);
                break;

            case ModelTimeStep.Year:
                span = (t) => TimeSpan.FromDays(360 * t);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(time.Begin + span(time.Ticks));
        }
Beispiel #4
0
        public static int GetTimeSpanMultiplier(ModelTimeStep modelTimeStep, ModelTimeStep spanStep)
        {
            if (modelTimeStep == spanStep || spanStep == ModelTimeStep.Undefined)
            {
                return(1);
            }
            if ((int)spanStep < (int)modelTimeStep)
            {
                throw new ArgumentException("Can't time afterSpan that smaller than model time");
            }

            var degrade = new Func <ModelTimeStep, ModelTimeStep>(a => (ModelTimeStep)((int)a - 1));

            switch (spanStep)
            {
            case ModelTimeStep.Millisecond:
                return(1000 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Second:
                return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Minute:
                return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Hour:
                return(60 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Day:
                return(24 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Month:
                return(30 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            case ModelTimeStep.Year:
                return(12 * GetTimeSpanMultiplier(modelTimeStep, degrade(spanStep)));

            default:
                throw new ArgumentOutOfRangeException(nameof(modelTimeStep), modelTimeStep, null);
            }
        }
Beispiel #5
0
 public EventLoop(ModelTimeStep step, DateTimeOffset beginning, IObservable <IRxModellingEvent> broker)
     : this(new ModelTimeScheduler(step, beginning), broker)
 {
 }
Beispiel #6
0
 public ModelTimeScheduler(ModelTimeStep step, DateTimeOffset beginning)
 {
     CurrentTime = new ModelTime(0, step, beginning);
     TimeStep    = step;
 }