// 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); }
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); }
/// <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)); }
/// <summary> /// 清除该节点及其子树节点 /// </summary> public void Clear() { SubTrees.Clear(); }