// ReSharper disable once TooManyDeclarations
        private Dictionary <string, object> GetPossibleValues(string setting, CTree[] trees, out bool isCustom)
        {
            isCustom = false;
            var possibleValues = trees
                                 .FirstOrDefault(tree =>
                                                 tree is CEnum e &&
                                                 e.Name.Equals($"EValues_{setting}", StringComparison.InvariantCultureIgnoreCase)
                                                 )
                                 ?.SubTrees
                                 .OfType <CEnumValue>()
                                 .Where(value => !value.Name.EndsWith("_NUM_VALUES", StringComparison.InvariantCultureIgnoreCase))
                                 .ToDictionary(value => value.Name, value => value.ResolveValue());

            if (possibleValues == null || possibleValues.Count == 0)
            {
                isCustom       = true;
                possibleValues = trees
                                 .Where(tree =>
                                        tree is CDefine d &&
                                        d.Name.StartsWith(setting, StringComparison.InvariantCultureIgnoreCase)
                                        )
                                 .OfType <CDefine>()
                                 .Where(value =>
                                        !value.Name.EndsWith("_NUM_VALUES", StringComparison.InvariantCultureIgnoreCase) &&
                                        !value.Name.EndsWith("_STRING", StringComparison.InvariantCultureIgnoreCase)
                                        )
                                 .ToDictionary(define => define.Name, define => define.ResolveValue());
            }

            return(possibleValues);
        }
Пример #2
0
            private void Internal_Insert(string[] path, int idx, T value)
            {
                if (idx >= path.Length)
                {
                    Value = value;
                    return;
                }

                if (!SubTrees.ContainsKey(path[idx])) SubTrees.Add(path[idx], new StringTree<T>());
                SubTrees[path[idx]].Internal_Insert(path, idx + 1, value);
            }
Пример #3
0
        /// <summary>
        ///  interview questions for string problems
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            String[] words = { "abcde", "hello", "apple", "kite", "padle" };
            foreach (string w in words)
            {
                Console.WriteLine(w + " : " + RandomStringProblem.isUniqueChars(w));
            }

            String s = "helloiloveyou";

            Console.WriteLine(s + " -> " + RandomStringProblem.RemoveDuplicateCharacters(s));
            Console.WriteLine(s + " -> " + RandomStringProblem.RemoveDuplicateCharacters(s.ToCharArray()));

            Console.WriteLine("apple, papel : " + RandomStringProblem.anagram("apple", "papel"));
            Console.WriteLine("carrot, tarroc : " + RandomStringProblem.anagram("carrot", "tarroc"));
            Console.WriteLine("hello, llloh : " + RandomStringProblem.anagram("hello", "llloh"));

            s = "A quick brown fox jumped over the log";
            var sarr  = s.ToArray();
            var saar2 = s.ToArray();

            RandomStringProblem.ReplaceFun(ref sarr, sarr.Length);
            RandomStringProblem.ReplaceFun(ref saar2, sarr.Length);
            Console.WriteLine(string.Concat(sarr));
            Console.WriteLine(string.Concat(saar2));

            Console.WriteLine("aabcccaa => " + RandomStringProblem.compress("aabcccaa"));
            Console.WriteLine("aaaaaaab => " + RandomStringProblem.compress("aaaaaaab"));
            Console.WriteLine("ababababab => " + RandomStringProblem.compress("ababababab"));
            Console.WriteLine("avfffff => " + RandomStringProblem.compress("avfffff"));

            FindFirstNonRepeatingChar.Test();

            /// Linked List Problems

            LinkedListNode head = AssortedMethods.randomLinkedList(10, 0, 3);

            Console.WriteLine(head.printForward());
            LinkedListProblems.deleteDups(head);
            Console.WriteLine(head.printForward());

            // wordbreak problems
            TestWordBreak.Run();

            //MedianOfMedians.TestMedianOfMedians();

            LongestCommonSubsequence.Test();

            SumOfMaxRunningSequence.Test();

            TestRankNode.Test();

            NextInorderSuccessor.Test();

            CircularArrayTest.Test();

            LongestPalindrome.Test();

            IsomorphicStrings.Test();

            FindMinAbsFrom2Arrays.Test();

            ValidateIsBST.Test();

            CoinPuzzle.Test();

            BinarySearch.Test();

            RansomNote.Test();

            atoi.Test();

            TrieTest.Test();

            IsTreeBalanced.Test();

            //TestProducerConsumer.Test();

            ShuffleDeck.Test();

            //QuickRankSearch.Test();

            ParenthesisCombo.Test();

            Permutations.Test();

            Combinations.Test();

            CompressString.Test();

            BuildTreeFromMatrixInput.Test();

            FindAllRepeatingSubstrings.Test();

            PrintTreePaths.Test();

            FindLowestCommonAncestor.Test();

            PrintLevelsOfABinaryTree.Test();

            FindPathBetween2NodesInTree.Test();

            FindPathExistsInGraph.Test();

            FindPathBetween2GraphNodes.Test();

            // RealTimeCounterTest.Test();

            DistanceBetweenWordsInASentence.Test();

            SearchingForNextCharInSearch.Test();

            HashMapTester.Test();

            FindElementInRotatedArray.Test();

            SubTrees.Test();

            LongestCommonSubstring.Test();

            LongestIncreasingSequenceQuestion.Test();

            ConvertTreeIntoDoublyLinkedList.Test();

            Count2sBetween0andN.Test();

            TestSuffixTrees.Test();

            TransformWordIntoOtherWord.Test();

            IsNumberAPalindrome.Test();

            ConvertNumberToPhrase.Test();

            CountBinary1sInStream.Test();

            ReverseBitsInUnsignedInt.Test();

            ReverseLinkedList.Test();

            DeleteDups.Test();

            _3SUM.Test();

            ArraySequencesThatAddUpToSum.Tests();

            FindBSTNodesThatSumUpToValue.Test();

            LengthOfLongestSubstringProblem.Test();

            //BuildTreeFromInorderAndPreorderTraversal.Test();

            ConvertTreeToDLL.Test();

            FindMissingNumberInString.Test();

            SortStackWithAnotherStack.Test();

            QueueFrom2Stacks.Test();

            Sort2Queues.Test();

            ConvertRomanNumeralToInt.Test();

            MergeAllLists.Test();

            DivideWithoutSlash.Test();

            //RegularExpression.Test();

            IsNumberValid.Test();

            Console.ReadKey();
        }
        // ReSharper disable once ExcessiveIndentation
        public CodeGeneratorResult Generate()
        {
            var driverSettingsDefinitions = _readDirectory
                                            .GetFiles("NvApiDriverSettings.h", SearchOption.TopDirectoryOnly)
                                            .FirstOrDefault();
            var filesDeleted = new List <FileInfo>();
            var filesAdded   = new List <FileInfo>();

            if (driverSettingsDefinitions?.Exists != true)
            {
                throw new FileNotFoundException("NvApiDriverSettings.h file not found.");
            }

            var parser = new CHeaderFileParser(driverSettingsDefinitions);

            parser.Parse();

            var settings = parser.Root.SubTrees
                           .FirstOrDefault(tree =>
                                           tree is CEnum e &&
                                           e.Name.Equals("ESetting", StringComparison.InvariantCultureIgnoreCase)
                                           )
                           ?.SubTrees
                           .Where(value => value.Name.EndsWith("_ID", StringComparison.InvariantCultureIgnoreCase))
                           .OfType <CEnumValue>()
                           .Select(
                value =>
            {
                var stringId       = value.Name.Substring(0, value.Name.Length - "_ID".Length);
                var description    = GetDescription(stringId, parser.Root.SubTrees);
                var possibleValues = GetPossibleValues(
                    stringId,
                    parser.Root.SubTrees,
                    out var isCustomPossibleValues
                    );
                var integerId = value.ResolveValue() as long?;

                return(new
                {
                    StringId = stringId,
                    Description = description,
                    IntegerId = integerId.HasValue ? (uint)integerId.Value : (uint?)null,
                    PossibleValues = possibleValues,
                    IsCustomPossibleValues = isCustomPossibleValues
                });
            }
                )
                           .ToArray();

            if (settings == null || settings.Length == 0)
            {
                throw new InvalidOperationException(
                          "ESetting enum is not supported with the NvApiDriverSettings.h file.");
            }

            var _valuesWriteDirectory = new DirectoryInfo(Path.Combine(_writeDirectory.FullName, "SettingValues"));

            if (!_valuesWriteDirectory.Exists)
            {
                _valuesWriteDirectory.Create();
            }
            else
            {
                foreach (var file in _valuesWriteDirectory.EnumerateFiles())
                {
                    file.Delete();
                    filesDeleted.Add(file);
                }
            }

            var settingsEnumValues       = new Dictionary <string, uint>();
            var settingsEnumDescriptions = new Dictionary <string, string>();

            foreach (var setting in settings)
            {
                var friendlyName = _nameRuleSet.Apply(setting.StringId);

                var possibleValues = setting.PossibleValues
                                     .ToDictionary(pair =>
                {
                    var name = pair.Key;

                    if (name.StartsWith(setting.StringId + "_"))
                    {
                        name = name.Substring(setting.StringId.Length + 1);
                    }

                    return(name.Trim().Trim('_'));
                }, pair => pair.Value).ToArray();

                if (setting.IntegerId != null)
                {
                    settingsEnumValues.Add(setting.StringId, setting.IntegerId.Value);

                    if (!string.IsNullOrWhiteSpace(setting.Description))
                    {
                        settingsEnumDescriptions.Add(setting.StringId, setting.Description);
                    }
                }

                if (possibleValues.Any())
                {
                    CodeGeneratorBase generator;

                    if (setting.IsCustomPossibleValues)
                    {
                        generator = new ConstEnumGenerator(
                            _valuesWriteDirectory,
                            friendlyName,
                            possibleValues.ToDictionary(pair => pair.Key, pair => pair.Value),
                            _nameRuleSet,
                            _nameSpace + ".SettingValues"
                            );
                    }
                    else
                    {
                        generator = new EnumGenerator <uint>(
                            _valuesWriteDirectory,
                            friendlyName,
                            possibleValues
                            .Where(pair => pair.Value is long)
                            .ToDictionary(pair => pair.Key, pair => (uint)(long)pair.Value),
                            _nameRuleSet,
                            _nameSpace + ".SettingValues"
                            );
                    }

                    var possibleValuesEnumGeneratorResult = generator.Generate();

                    foreach (var fileInfo in possibleValuesEnumGeneratorResult.FilesRemoved)
                    {
                        filesDeleted.Add(fileInfo);
                    }

                    foreach (var fileInfo in possibleValuesEnumGeneratorResult.FilesAdded)
                    {
                        filesAdded.Add(fileInfo);
                    }
                }
            }


            var enumGenerator = new EnumGenerator <uint>(
                _writeDirectory,
                "KnownSettingId",
                settingsEnumValues,
                _nameRuleSet,
                _nameSpace,
                settingsEnumDescriptions
                );
            var enumGeneratorResult = enumGenerator.Generate();

            foreach (var fileInfo in enumGeneratorResult.FilesRemoved)
            {
                filesDeleted.Add(fileInfo);
            }

            foreach (var fileInfo in enumGeneratorResult.FilesAdded)
            {
                filesAdded.Add(fileInfo);
            }

            return(new CodeGeneratorResult(filesAdded.ToArray(), filesDeleted.ToArray(), _writeDirectory));
        }
Пример #5
0
 /// <summary>
 /// 清除该节点及其子树节点
 /// </summary>
 public void Clear()
 {
     SubTrees.Clear();
 }