internal BasicMonthOfYearDateTimeField(BasicCalendarSystem calendarSystem, int leapMonth) : base(DateTimeFieldType.MonthOfYear, new BasicMonthDurationField(calendarSystem)) { this.calendarSystem = calendarSystem; max = calendarSystem.GetMaxMonth(); this.leapMonth = leapMonth; durationField = new BasicMonthDurationField(calendarSystem); }
protected DateTimeField(DateTimeFieldType fieldType, DurationField durationField, bool isLenient, bool isSupported) { this.fieldType = Preconditions.CheckNotNull(fieldType, "fieldType"); this.durationField = Preconditions.CheckNotNull(durationField, "durationField"); this.isLenient = isLenient; this.isSupported = isSupported; }
internal RemainderDateTimeField(DateTimeField field, DateTimeFieldType fieldType, int divisor) : base(field, fieldType) { if (divisor < 2) { throw new ArgumentOutOfRangeException("divisor", "The divisor must be at least 2"); } remainderRangeField = new ScaledDurationField(field.DurationField, fieldType.RangeDurationFieldType.Value, divisor); this.divisor = divisor; }
protected DecoratedDateTimeField(DateTimeField wrappedField, DateTimeFieldType fieldType, DurationField durationField) : base(fieldType, durationField, Preconditions.CheckNotNull(wrappedField, "wrappedField").IsLenient, true) { // Already checked for nullity by now if (!wrappedField.IsSupported) { throw new ArgumentException("The wrapped field must be supported"); } this.wrappedField = wrappedField; }
internal ScaledDurationField(DurationField wrappedField, DurationFieldType fieldType, int scale) : base(fieldType, Preconditions.CheckNotNull(wrappedField, "wrappedField").UnitTicks * scale, wrappedField.IsPrecise, true) { if (!wrappedField.IsSupported) { throw new ArgumentException("Wrapped field must be supported", "wrappedField"); } if (scale == 0 || scale == 1) { throw new ArgumentOutOfRangeException("scale", "The scale must not be 0 or 1"); } this.scale = scale; this.wrappedField = wrappedField; }
protected PreciseDurationDateTimeField(DateTimeFieldType fieldType, DurationField unitField) : base(fieldType, unitField) { if (!unitField.IsPrecise) { throw new ArgumentException("Unit duration field must be precise"); } unitTicks = unitField.UnitTicks; if (unitTicks < 1) { throw new ArgumentException("The unit ticks must be at least one"); } }
internal PreciseDateTimeField(DateTimeFieldType type, DurationField unit, DurationField rangeField) : base(type, unit) { if (rangeField == null) { throw new ArgumentNullException("rangeField"); } if (!rangeField.IsPrecise) { throw new ArgumentException("Range duration field must be precise"); } effectiveRange = rangeField.UnitTicks / unit.UnitTicks; if (effectiveRange < 2) { throw new ArgumentException("The effective range must be at least 2."); } this.rangeField = rangeField; }
/// <summary> /// Returns an instance for the specified field type and duration field. /// The returned value is cached. /// TODO: Potentially use ReaderWriterLockSlim? Assess performance of caching in the first place... /// </summary> public static UnsupportedDateTimeField GetInstance(DateTimeFieldType fieldType, DurationField durationField) { if (fieldType == null) { throw new ArgumentNullException("fieldType"); } if (durationField == null) { throw new ArgumentNullException("durationField"); } lock (cacheLock) { UnsupportedDateTimeField cached = cache[fieldType.Ordinal]; if (cached == null || !ReferenceEquals(cached.DurationField, durationField)) { cached = new UnsupportedDateTimeField(fieldType, durationField); cache[fieldType.Ordinal] = cached; } return cached; } }
internal BasicWeekOfWeekYearDateTimeField(BasicCalendarSystem calendarSystem, DurationField weeks) : base(DateTimeFieldType.WeekOfWeekYear, weeks) { this.calendarSystem = calendarSystem; }
internal StubPreciseDurationDateTimeField(DurationField unit) : base(DateTimeFieldType.SecondOfMinute, unit) { }
internal RemainderDateTimeField(DividedDateTimeField dividedField, DateTimeFieldType fieldType) : base(dividedField.WrappedField, fieldType) { divisor = dividedField.Divisor; remainderRangeField = dividedField.DurationField; }
protected DateTimeField(DateTimeFieldType fieldType, DurationField durationField) : this(fieldType, durationField, false, true) { }
internal BasicDayOfMonthDateTimeField(BasicCalendarSystem calendarSystem, DurationField days) : base(DateTimeFieldType.DayOfMonth, days) { this.calendarSystem = calendarSystem; }
private UnsupportedDateTimeField(DateTimeFieldType fieldType, DurationField durationField) : base(fieldType, durationField, false, false) { }
// TODO(jon): Do we *really* need this? public int CompareTo(DurationField other) { return UnitTicks.CompareTo(other.UnitTicks); }
internal BasicYearDateTimeField(BasicCalendarSystem calendarSystem) : base(DateTimeFieldType.Year, new BasicYearDurationField(calendarSystem)) { this.calendarSystem = calendarSystem; durationField = new BasicYearDurationField(calendarSystem); }
internal GJDayOfWeekDateTimeField(BasicCalendarSystem calendarSystem, DurationField days) : base(DateTimeFieldType.DayOfWeek, days) { this.calendarSystem = calendarSystem; }
private FieldSet(Builder builder) { ticks = builder.Ticks ?? UnsupportedDurationField.Ticks; milliseconds = builder.Milliseconds ?? UnsupportedDurationField.Milliseconds; seconds = builder.Seconds ?? UnsupportedDurationField.Seconds; minutes = builder.Minutes ?? UnsupportedDurationField.Minutes; hours = builder.Hours ?? UnsupportedDurationField.Hours; halfDays = builder.HalfDays ?? UnsupportedDurationField.HalfDays; days = builder.Days ?? UnsupportedDurationField.Days; weeks = builder.Weeks ?? UnsupportedDurationField.Weeks; weekYears = builder.WeekYears ?? UnsupportedDurationField.WeekYears; months = builder.Months ?? UnsupportedDurationField.Months; years = builder.Years ?? UnsupportedDurationField.Years; centuries = builder.Centuries ?? UnsupportedDurationField.Centuries; eras = builder.Eras ?? UnsupportedDurationField.Eras; tickOfSecond = builder.TickOfSecond ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.TickOfSecond, ticks); tickOfMillisecond = builder.TickOfMillisecond ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.TickOfMillisecond, ticks); tickOfDay = builder.TickOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.TickOfDay, ticks); millisecondOfSecond = builder.MillisecondOfSecond ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.MillisecondOfSecond, milliseconds); millisecondOfDay = builder.MillisecondOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.MillisecondOfDay, milliseconds); secondOfMinute = builder.SecondOfMinute ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.SecondOfMinute, seconds); secondOfDay = builder.SecondOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.SecondOfDay, seconds); minuteOfHour = builder.MinuteOfHour ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.MinuteOfHour, minutes); minuteOfDay = builder.MinuteOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.MinuteOfDay, minutes); hourOfDay = builder.HourOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.HourOfDay, hours); clockHourOfDay = builder.ClockHourOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.ClockHourOfDay, hours); hourOfHalfDay = builder.HourOfHalfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.HourOfHalfDay, hours); clockHourOfHalfDay = builder.ClockHourOfHalfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.ClockHourOfHalfDay, hours); halfDayOfDay = builder.HalfDayOfDay ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.HalfDayOfDay, halfDays); dayOfWeek = builder.DayOfWeek ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.DayOfWeek, days); dayOfMonth = builder.DayOfMonth ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.DayOfMonth, days); dayOfYear = builder.DayOfYear ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.DayOfYear, days); weekOfWeekYear = builder.WeekOfWeekYear ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.WeekOfWeekYear, weeks); weekYear = builder.WeekYear ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.WeekYear, years); weekYearOfCentury = builder.WeekYearOfCentury ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.WeekYearOfCentury, weekYears); monthOfYear = builder.MonthOfYear ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.MonthOfYear, months); year = builder.Year ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.Year, years); yearOfCentury = builder.YearOfCentury ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.YearOfCentury, years); yearOfEra = builder.YearOfEra ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.YearOfEra, years); centruryOfEra = builder.CenturyOfEra ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.CenturyOfEra, centuries); era = builder.Era ?? UnsupportedDateTimeField.GetInstance(DateTimeFieldType.Era, eras); }