unsafe internal CultureInfo [] GetCultures(CultureTypes types)
{
if ((int)types <= 0 || ((int) types & (int)CultureTypesMask) != 0)
{
throw new ArgumentOutOfRangeException(
"types",
String.Format(
CultureInfo.CurrentCulture,
Environment.GetResourceString("ArgumentOutOfRange_Range"), CultureTypes.NeutralCultures, CultureTypes.FrameworkCultures));
}
ArrayList cultures = new ArrayList();
bool isAddSpecific = ((types & CultureTypes.SpecificCultures) != 0);
bool isAddNeutral = ((types & CultureTypes.NeutralCultures) != 0);
bool isAddInstalled = ((types & CultureTypes.InstalledWin32Cultures) != 0);
bool isAddUserCustom = ((types & CultureTypes.UserCustomCulture) != 0);
bool isAddReplacement = ((types & CultureTypes.ReplacementCultures) != 0);
bool isAddFramework = ((types & CultureTypes.FrameworkCultures) != 0);
bool isAddWindowsOnly = ((types & CultureTypes.WindowsOnlyCultures) != 0);
if (isAddNeutral || isAddSpecific || isAddFramework || isAddInstalled)
{
for (int i = 0; i < m_pCultureHeader->numCultureNames; i++)
{
int cultureID = this.m_pCultureIDIndex[i].actualCultureID;
if (CultureInfo.GetSortID(cultureID) != 0 || cultureID == CultureTableRecord.SPANISH_TRADITIONAL_SORT)
{
//
// This is an alternate sort culture. For now, do nothing.
// Eventually we may add a new CultureTypes flag.
//
}
else
{
CultureInfo ci = new CultureInfo(cultureID);
CultureTypes ciTypes = ci.CultureTypes;
//
// Invariant culture (ci.Name.Length = 0) will be returned with the Neutral cultures enumeration.
// and will not be returned from specific cultures enumeration.
//
if (((ciTypes & CultureTypes.ReplacementCultures) == 0) &&
( isAddFramework ||
(isAddSpecific && ci.Name.Length>0 && ((ciTypes & CultureTypes.SpecificCultures) != 0)) ||
(isAddNeutral && (((ciTypes & CultureTypes.NeutralCultures) != 0) || ci.Name.Length==0)) ||
(isAddInstalled && ((ciTypes & CultureTypes.InstalledWin32Cultures) != 0))))
cultures.Add(ci);
}
}
}
CultureInfo [] result = new CultureInfo[cultures.Count];
cultures.CopyTo(result, 0);
return (result);
}
} // CultureTable class