public void Init(IEnumerable <CLogEncodingCLogTypeSearch> savedTypes) { _traceEmittorX = new CLogCustomTraceEmittorFactory(); _parent = new CLogTypeSearchNode(); foreach (var e in savedTypes.ToArray()) { AddType(e); } }
private void AddType(CLogTypeSearchNode searchNode, CLogTypeSearchNode parentNode, CLogEncodingCLogTypeSearch fileNode, ref bool isNew, int index = 0) { if (index == fileNode.DefinationEncoding.Length) { searchNode.UserNode = fileNode; return; } CLogTypeSearchNode n; if (!searchNode.Nodes.TryGetValue(fileNode.DefinationEncoding[index], out n)) { searchNode.Nodes[fileNode.DefinationEncoding[index]] = n = new CLogTypeSearchNode(); isNew = true; } AddType(n, searchNode, fileNode, ref isNew, index + 1); }
public CLogEncodingCLogTypeSearch FindTypeAndAdvance(string encoded, CLogLineMatch traceLineMatch, ref int index) { CLogTypeSearchNode start = _parent; string type = ""; CLogTypeSearchNode prev = null; int?prevIdx = null; for (; ;) { type += encoded[index]; if (!start.Nodes.TryGetValue(encoded[index], out start)) { if (null != prev && null != prev.UserNode) { if (null != traceLineMatch) { prev.UserNode.UsedBySourceFile.Add(traceLineMatch.SourceFile); } index = prevIdx.Value; return(prev.UserNode); } return(null); } if (index == encoded.Length - 1) { if (null != traceLineMatch) { start.UserNode.UsedBySourceFile.Add(traceLineMatch.SourceFile); } return(start.UserNode); } prev = start; prevIdx = index; ++index; } }