Beispiel #1
0
        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;
        }
Beispiel #2
0
        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());
                    }
                }
            }
        }