3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 namespace System.Globalization {
8 using System.Runtime.Remoting;
10 using System.Security;
13 // Data item for EncodingTable. Along with EncodingTable, they are used by
14 // System.Text.Encoding.
16 // This class stores a pointer to the internal data and the index into that data
17 // where our required information is found. We load the code page, flags and uiFamilyCodePage
18 // immediately because they don't require creating an object. Creating any of the string
19 // names is delayed until somebody actually asks for them and the names are then cached.
22 internal class CodePageDataItem
24 internal int m_dataIndex;
25 internal int m_uiFamilyCodePage;
26 internal String m_webName;
27 internal String m_headerName;
28 internal String m_bodyName;
29 internal uint m_flags;
32 unsafe internal CodePageDataItem(int dataIndex) {
33 m_dataIndex = dataIndex;
34 m_uiFamilyCodePage = EncodingTable.codePageDataPtr[dataIndex].uiFamilyCodePage;
35 m_flags = EncodingTable.codePageDataPtr[dataIndex].flags;
38 static readonly char [] sep = {'|'};
40 [System.Security.SecurityCritical]
41 unsafe internal static String CreateString(string pStrings, uint index)
43 if (pStrings[0] == '|') // |str1|str2|str3
45 return pStrings.Split (sep, StringSplitOptions.RemoveEmptyEntries) [index];
49 for (int i = 1; true; i ++)
51 sbyte ch = pStrings[i];
53 if ((ch == '|') || (ch == 0))
57 return new String(pStrings, start, i - start);
70 throw new ArgumentException("pStrings");
76 //return new String(pStrings);
80 unsafe public String WebName {
81 [System.Security.SecuritySafeCritical] // auto-generated
83 if (m_webName==null) {
84 m_webName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 0);
90 public virtual int UIFamilyCodePage {
92 return m_uiFamilyCodePage;
96 unsafe public String HeaderName {
97 [System.Security.SecuritySafeCritical] // auto-generated
99 if (m_headerName==null) {
100 m_headerName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 1);
106 unsafe public String BodyName {
107 [System.Security.SecuritySafeCritical] // auto-generated
109 if (m_bodyName==null) {
110 m_bodyName = CreateString(EncodingTable.codePageDataPtr[m_dataIndex].Names, 2);
116 unsafe public uint Flags {