public static void AddItem(TestItem aTestItem, RCFileContent aRCFileContent, HeaderContent aHeaderContent) { var stringTableContent = aRCFileContent.StringTableContent; var stringTableIndexOrder = aRCFileContent.StringTableIndexOrder; var determinedStringTableIndex = StringTableIndexCalculator.CalculateIndex(aTestItem.ID); // Check if StringTable with index currentIdx exists if (!stringTableContent.ContainsKey(determinedStringTableIndex)) { stringTableContent.Add(determinedStringTableIndex, new List <RCFileItem>()); stringTableIndexOrder.Add(determinedStringTableIndex); } var printStyle = StringTablePrintStyleDeterminer.DeterminePrintStyle(aTestItem.Name, aTestItem.Value); bool notYetAdded = true; var startIndex = (stringTableContent[determinedStringTableIndex].Count / Constants.kStringTableCapacity) * Constants.kStringTableCapacity; int testItemID; if (aTestItem.ID.IsHexa) { testItemID = Convert.ToInt32(aTestItem.ID.Value, 16); } else { testItemID = Convert.ToInt32(aTestItem.ID.Value); } for (int i = startIndex; i < stringTableContent[determinedStringTableIndex].Count; ++i) { var currentName = stringTableContent[determinedStringTableIndex][i].Name; if (!aHeaderContent.NameToID.TryGetValue(currentName, out var currentIDString)) { continue; } if (!int.TryParse(currentIDString.Value, out var currentID)) { continue; } if (testItemID < currentID) { stringTableContent[determinedStringTableIndex].Insert(i, new RCFileItem { Name = aTestItem.Name, Value = aTestItem.Value, ID = aTestItem.ID, PrintStyle = printStyle }); notYetAdded = false; break; } } if (!notYetAdded) { return; } stringTableContent[determinedStringTableIndex].Add( new RCFileItem { Name = aTestItem.Name, Value = aTestItem.Value, ID = aTestItem.ID, PrintStyle = printStyle }); notYetAdded = false; }
public void WriteForAdd(string aWritePath, Encoding aCodePage, int aNumberOfElementsInHeader) { using (var writeFile = new StreamWriter(aWritePath, false, aCodePage)) { using (var lineParser = new LineParser(mHeaderPath, aCodePage)) { var lineCount = -1; var ignoreValue = 0; LineParserResult line = null; while (lineParser.HasNext()) { line = lineParser.GetNext(); var words = line.Name.Split(Constants.kSplitTokens, StringSplitOptions.RemoveEmptyEntries); if (words.Length == 0) { writeFile.WriteLine(line.Serialize()); continue; } if (words[0].StartsWith("#if")) { ++ignoreValue; } else if (words[0].StartsWith("#endif") && ignoreValue > 0) { --ignoreValue; } if (ignoreValue > 0 || words[0] != "#define") { writeFile.WriteLine(line.Serialize()); continue; } ++lineCount; if (lineCount == FoundIndex) { break; } writeFile.WriteLine(line.Serialize()); if (lineCount + 2 == aNumberOfElementsInHeader) { break; } } writeFile.WriteLine(TestItem.SerializeForHeader()); // Check for no extra writing if (lineCount == FoundIndex) { writeFile.WriteLine(line.Serialize()); } while (lineParser.HasNext()) { writeFile.WriteLine(lineParser.GetNext().Serialize()); } } } }