internal static CultureTableRecord GetCultureTableRecord(string name, bool useUserOverride)
{
BCLDebug.Assert(name != null, "[CultureTableRecord::GetCultureTableRecord] name should be valid.");
// Make sure the cache is valid.
if (CultureTableRecordCache == null)
{
if (name.Length == 0) // Invariant culture
{
// First time Invariant culture get created we ignore creating the cache
return new CultureTableRecord(name, useUserOverride);
}
lock (InternalSyncObject)
{
if (CultureTableRecordCache == null)
CultureTableRecordCache = new Hashtable();
}
}
name = ValidateCulturePieceToLower(name, "name", MAXSIZE_FULLTAGNAME);
CultureTableRecord [] cultureRecordArray = (CultureTableRecord []) CultureTableRecordCache[name];
if (cultureRecordArray != null)
{
int index = useUserOverride ? 0 : 1;
if (cultureRecordArray[index] == null)
{
int filled = index == 0 ? 1 : 0;
cultureRecordArray[index] = (CultureTableRecord) cultureRecordArray[filled].CloneWithUserOverride(useUserOverride);
}
return cultureRecordArray[index];
}
CultureTableRecord cultureRecord = new CultureTableRecord(name, useUserOverride);
lock (InternalSyncObject)
{
if (CultureTableRecordCache[name] == null)
{
cultureRecordArray = new CultureTableRecord[2];
cultureRecordArray[useUserOverride ? 0 : 1] = cultureRecord;
CultureTableRecordCache[name] = cultureRecordArray;
}
}
return cultureRecord;
}