internal CalendarData GetCalendar(int calendarId) { Contract.Assert(calendarId > 0 && calendarId <= CalendarData.MAX_CALENDARS, "[CultureData.GetCalendar] Expect calendarId to be in a valid range"); // arrays are 0 based, calendarIds are 1 based int calendarIndex = calendarId - 1; // Have to have calendars if (calendars == null) { calendars = new CalendarData[CalendarData.MAX_CALENDARS]; } // we need the following local variable to avoid returning null // when another thread creates a new array of CalendarData (above) // right after we insert the newly created CalendarData (below) CalendarData calendarData = calendars[calendarIndex]; // Make sure that calendar has data if (calendarData == null || UseUserOverride) { Contract.Assert(this.sWindowsName != null, "[CultureData.GetCalendar] Expected this.sWindowsName to be populated by COMNlsInfo::nativeInitCultureData already"); calendarData = new CalendarData(this.sWindowsName, calendarId, this.UseUserOverride); #if !FEATURE_CORECLR //Work around issue where Win7 data for MonthDay contains invalid two sets of data separated by semicolon //even though MonthDay is not enumerated if (IsOsWin7OrPrior() && !IsSupplementalCustomCulture && !IsReplacementCulture) { calendarData.FixupWin7MonthDaySemicolonBug(); } #endif calendars[calendarIndex] = calendarData; } return calendarData; }
internal CalendarData GetCalendar(int calendarId) { int index = calendarId - 1; if (this.calendars == null) { this.calendars = new CalendarData[0x17]; } CalendarData data = this.calendars[index]; if ((data == null) || this.UseUserOverride) { data = new CalendarData(this.sWindowsName, calendarId, this.UseUserOverride); if ((IsOsWin7OrPrior() && !this.IsUserCustomCulture) && !this.IsReplacementCulture) { data.FixupWin7MonthDaySemicolonBug(); } this.calendars[index] = data; } return data; }