Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TraceLoggingMetadataCollector.cs
Go to the documentation of this file.
2
4
5internal sealed class TraceLoggingMetadataCollector
6{
7 private sealed class Impl
8 {
10
11 internal short scratchSize;
12
13 internal sbyte dataCount;
14
15 internal sbyte pinCount;
16
17 private int bufferNesting;
18
19 private bool scalar;
20
21 public void AddScalar(int size)
22 {
24 {
25 if (bufferNesting == 0)
26 {
27 if (!scalar)
28 {
29 dataCount++;
30 }
31 scalar = true;
32 scratchSize = (short)(scratchSize + size);
33 }
34 }
35 }
36
37 public void AddNonscalar()
38 {
40 {
41 if (bufferNesting == 0)
42 {
43 scalar = false;
44 pinCount++;
45 dataCount++;
46 }
47 }
48 }
49
50 public void BeginBuffered()
51 {
52 if (bufferNesting == 0)
53 {
55 }
57 }
58
59 public void EndBuffered()
60 {
62 }
63
64 public int Encode(byte[] metadata)
65 {
66 int pos = 0;
67 foreach (FieldMetadata field in fields)
68 {
69 field.Encode(ref pos, metadata);
70 }
71 return pos;
72 }
73 }
74
75 private readonly Impl impl;
76
77 private readonly FieldMetadata currentGroup;
78
79 private int bufferedArrayFieldCount = int.MinValue;
80
81 internal EventFieldTags Tags { get; set; }
82
83 internal int ScratchSize => impl.scratchSize;
84
85 internal int DataCount => impl.dataCount;
86
87 internal int PinCount => impl.pinCount;
88
90
92 {
93 impl = new Impl();
94 }
95
101
103 {
104 TraceLoggingMetadataCollector result = this;
105 if (name != null || BeginningBufferedArray)
106 {
110 }
111 return result;
112 }
113
114 public void AddScalar(string name, TraceLoggingDataType type)
115 {
116 int size;
117 switch (type & (TraceLoggingDataType)31)
118 {
119 case TraceLoggingDataType.Int8:
120 case TraceLoggingDataType.UInt8:
121 case TraceLoggingDataType.Char8:
122 size = 1;
123 break;
124 case TraceLoggingDataType.Int16:
125 case TraceLoggingDataType.UInt16:
126 case TraceLoggingDataType.Char16:
127 size = 2;
128 break;
129 case TraceLoggingDataType.Int32:
130 case TraceLoggingDataType.UInt32:
131 case TraceLoggingDataType.Float:
132 case TraceLoggingDataType.Boolean32:
133 case TraceLoggingDataType.HexInt32:
134 size = 4;
135 break;
136 case TraceLoggingDataType.Int64:
137 case TraceLoggingDataType.UInt64:
138 case TraceLoggingDataType.Double:
139 case TraceLoggingDataType.FileTime:
140 case TraceLoggingDataType.HexInt64:
141 size = 8;
142 break;
143 case TraceLoggingDataType.Guid:
144 case TraceLoggingDataType.SystemTime:
145 size = 16;
146 break;
147 default:
148 throw new ArgumentOutOfRangeException("type");
149 }
150 impl.AddScalar(size);
152 }
153
164
165 public void AddArray(string name, TraceLoggingDataType type)
166 {
167 switch (type & (TraceLoggingDataType)31)
168 {
169 default:
170 throw new ArgumentOutOfRangeException("type");
171 case TraceLoggingDataType.Int8:
172 case TraceLoggingDataType.UInt8:
173 case TraceLoggingDataType.Int16:
174 case TraceLoggingDataType.UInt16:
175 case TraceLoggingDataType.Int32:
176 case TraceLoggingDataType.UInt32:
177 case TraceLoggingDataType.Int64:
178 case TraceLoggingDataType.UInt64:
179 case TraceLoggingDataType.Float:
180 case TraceLoggingDataType.Double:
181 case TraceLoggingDataType.Boolean32:
182 case TraceLoggingDataType.Guid:
183 case TraceLoggingDataType.FileTime:
184 case TraceLoggingDataType.HexInt32:
185 case TraceLoggingDataType.HexInt64:
186 case TraceLoggingDataType.Char8:
187 case TraceLoggingDataType.Char16:
189 {
191 }
192 impl.AddScalar(2);
194 AddField(new FieldMetadata(name, type, Tags, variableCount: true));
195 break;
196 }
197 }
198
208
209 public void EndBufferedArray()
210 {
212 {
214 }
215 bufferedArrayFieldCount = int.MinValue;
217 }
218
219 internal byte[] GetMetadata()
220 {
221 int num = impl.Encode(null);
222 byte[] array = new byte[num];
224 return array;
225 }
226
237}
void Add(TKey key, TValue value)
void AddNullTerminatedString(string name, TraceLoggingDataType type)
TraceLoggingMetadataCollector(TraceLoggingMetadataCollector other, FieldMetadata group)
static string EventSource_NotSupportedNestedArraysEnums
Definition SR.cs:1264
static string EventSource_IncorrentlyAuthoredTypeInfo
Definition SR.cs:1226
Definition SR.cs:7