private SUTime.Temporal AddEndPoints(SUTime.Duration d, SUTime.Time beginTime, SUTime.Time endTime) { SUTime.Temporal t = d; if (d != null && (beginTime != null || endTime != null)) { SUTime.Time b = beginTime; SUTime.Time e = endTime; if (b == SUTime.TimeRefUnknown) { b = new SUTime.RefTime("UNKNOWN"); } else { if (b == SUTime.TimeUnknown) { b = new SUTime.SimpleTime("UNKNOWN"); } } if (e == SUTime.TimeRefUnknown) { e = new SUTime.RefTime("UNKNOWN"); } else { if (e == SUTime.TimeUnknown) { e = new SUTime.SimpleTime("UNKNOWN"); } } t = new SUTime.Range(b, e, d); } return(t); }
public override IValue Apply(Env env, IList <IValue> @in) { if (@in.Count >= 1) { SUTime.Temporal temporal = null; object t = @in[0].Get(); if (t is SUTime.Temporal) { temporal = (SUTime.Temporal)@in[0].Get(); } else { if (t is TimeExpression) { temporal = ((TimeExpression)t).GetTemporal(); } else { throw new ArgumentException("Type mismatch on arg0: Cannot apply " + this + " to " + @in); } } string quant = null; int scale = 1; if (@in.Count >= 2 && @in[1] != null) { object arg1 = @in[1].Get(); if (arg1 is string) { quant = (string)arg1; } else { if (arg1 is IList) { IList <ICoreMap> cms = (IList <ICoreMap>)arg1; quant = ChunkAnnotationUtils.GetTokenText(cms, typeof(CoreAnnotations.TextAnnotation)); if (quant != null) { quant = quant.ToLower(); } } else { throw new ArgumentException("Type mismatch on arg1: Cannot apply " + this + " to " + @in); } } } if (@in.Count >= 3 && @in[2] != null) { Number arg2 = (Number)@in[2].Get(); if (arg2 != null) { scale = arg2; } } SUTime.Duration period = temporal.GetPeriod(); if (period != null && scale != 1) { period = period.MultiplyBy(scale); } return(new Expressions.PrimitiveValue("PeriodicTemporalSet", new SUTime.PeriodicTemporalSet(temporal, period, quant, null))); } else { throw new ArgumentException("Invalid number of arguments to " + this.name); } }
public override IValue Apply(Env env, IList <IValue> @in) { if (@in.Count == 2) { SUTime.Duration d = (SUTime.Duration)@in[0].Get(); if (@in[1].Get() is Number) { int m = ((Number)@in[1].Get()); return(new Expressions.PrimitiveValue("DURATION", d.MultiplyBy(m))); } else { if (@in[1].Get() is string) { Number n = System.Convert.ToInt32((string)@in[1].Get()); if (n != null) { return(new Expressions.PrimitiveValue("DURATION", d.MultiplyBy(n))); } else { return(null); } } else { throw new ArgumentException("Invalid arguments to " + this.name); } } } else { if (@in.Count == 5 || @in.Count == 3) { IList <ICoreMap> durationStartTokens = (IList <ICoreMap>)@in[0].Get(); Number durationStartVal = (durationStartTokens != null) ? durationStartTokens[0].Get(typeof(CoreAnnotations.NumericCompositeValueAnnotation)) : null; IList <ICoreMap> durationEndTokens = (IList <ICoreMap>)@in[1].Get(); Number durationEndVal = (durationEndTokens != null) ? durationEndTokens[0].Get(typeof(CoreAnnotations.NumericCompositeValueAnnotation)) : null; IList <ICoreMap> durationUnitTokens = (IList <ICoreMap>)@in[2].Get(); TimeExpression te = (durationUnitTokens != null) ? durationUnitTokens[0].Get(typeof(TimeExpression.Annotation)) : null; SUTime.Duration durationUnit = (SUTime.Duration)te.GetTemporal(); SUTime.Duration durationStart = (durationStartVal != null) ? durationUnit.MultiplyBy(durationStartVal) : null; SUTime.Duration durationEnd = (durationEndVal != null) ? durationUnit.MultiplyBy(durationEndVal) : null; SUTime.Duration duration = durationStart; if (duration == null) { if (durationEnd != null) { duration = durationEnd; } else { duration = new SUTime.InexactDuration(durationUnit); } } else { if (durationEnd != null) { duration = new SUTime.DurationRange(durationStart, durationEnd); } } SUTime.Time beginTime = (@in.Count > 3) ? (SUTime.Time)@in[3].Get() : null; SUTime.Time endTime = (@in.Count > 4) ? (SUTime.Time)@in[4].Get() : null; SUTime.Temporal temporal = this.AddEndPoints(duration, beginTime, endTime); if (temporal is SUTime.Range) { return(new Expressions.PrimitiveValue("RANGE", temporal)); } else { return(new Expressions.PrimitiveValue("DURATION", temporal)); } } else { throw new ArgumentException("Invalid number of arguments to " + this.name); } } }
public override SUTime.Time Add(SUTime.Duration offset) { return(new SUTime.RelativeTime(this, SUTime.TemporalOp.OffsetExact, offset)); }
public override SUTime.Range GetRange(int flags, SUTime.Duration granularity) { return(new SUTime.Range(this, this)); }