protected WrappedCalendarSystem(string name, CalendarSystem baseCalendar, FieldAssembler assembler, IEnumerable<Era> eras) : base(name, (builder, @this) => AssembleFields(builder, @this, baseCalendar, assembler), eras) { // Quick sanity check - the point of separating out this class is to only use it in // situations where we really have a calendar to wrap. if (baseCalendar == null) { throw new ArgumentNullException("baseCalendar"); } this.baseCalendar = baseCalendar; // Work out which fields from the base are still valid, so we can // optimize by calling directly to the base calendar sometimes. FieldSet baseFields = baseCalendar.Fields; useBaseTimeOfDayFields = baseFields.HourOfDay == Fields.HourOfDay && baseFields.MinuteOfHour == Fields.MinuteOfHour && baseFields.SecondOfMinute == Fields.SecondOfMinute && baseFields.MillisecondOfSecond == Fields.MillisecondOfSecond && baseFields.TickOfMillisecond == Fields.TickOfMillisecond && baseFields.TickOfSecond == Fields.TickOfSecond; useBaseTickOfDayFields = baseFields.TickOfDay == Fields.TickOfDay; useBaseYearMonthDayFields = baseFields.Year == Fields.Year && baseFields.MonthOfYear == Fields.MonthOfYear && baseFields.DayOfMonth == Fields.DayOfMonth; }
/// <summary> /// Initializes a new instance of the <see cref="CalendarSystem"/> class. /// </summary> /// <param name="name">The name of the calendar</param> /// <param name="fieldAssembler">Delegate to invoke in order to assemble fields for this calendar.</param> /// <param name="eras">The eras within this calendar, which need not be unique to the calendar.</param> internal CalendarSystem(string name, FieldAssembler fieldAssembler, IEnumerable<Era> eras) { this.name = name; this.eras = new List<Era>(eras).AsReadOnly(); FieldSet.Builder builder = new FieldSet.Builder(); fieldAssembler(builder, this); this.fields = builder.Build(); }
protected BasicFixedMonthCalendarSystem(string name, int minDaysInFirstWeek, FieldAssembler fieldAssembler, IEnumerable<Era> eras) : base(name, minDaysInFirstWeek, fieldAssembler, eras) { }
protected BasicCalendarSystem(string name, int minDaysInFirstWeek, FieldAssembler assembler, IEnumerable<Era> eras) : base(name, AssembleFields + assembler, eras) { if (minDaysInFirstWeek < 1 || minDaysInFirstWeek > 7) { throw new ArgumentOutOfRangeException("minDaysInFirstWeek", "Minimum days in first week must be between 1 and 7 inclusive"); } this.minDaysInFirstWeek = minDaysInFirstWeek; // Effectively invalidate the first cache entry. // Every other cache entry will automatically be invalid, // by having year 0. yearCache[0] = new YearInfo(1, LocalInstant.LocalUnixEpoch.Ticks); }
private GregorianCalendarSystem(string name, int minDaysInFirstWeek, FieldAssembler fieldAssembler) : base(name, minDaysInFirstWeek, fieldAssembler) { }
protected BasicGJCalendarSystem(string name, int minDaysInFirstWeek, FieldAssembler fieldAssembler) : base(name, minDaysInFirstWeek, fieldAssembler, new[] { Era.BeforeCommon, Era.Common }) { }
private static void AssembleFields(FieldSet.Builder builder, CalendarSystem @this, CalendarSystem baseCalendar, FieldAssembler assembler) { builder.WithSupportedFieldsFrom(baseCalendar.Fields); assembler(builder, @this); }