private WeightedInheritanceItem GetSelfWeightedInheritanceItem(StrongIdentifierValue subName) { var item = new WeightedInheritanceItem(); item.SuperName = subName; item.Rank = 1F; item.Distance = SelfDistance; item.IsSelf = true; return(item); }
private WeightedInheritanceItem GetTopTypeWeightedInheritanceItem(StrongIdentifierValue subName) { var topTypeName = _context.CommonNamesStorage.DefaultHolder; var item = new WeightedInheritanceItem(); item.SuperName = topTypeName; item.Rank = 0.1F; item.Distance = TopTypeDistance; return(item); }
private void GetWeightedInheritanceItemsBySubName(StrongIdentifierValue subName, LocalCodeExecutionContext localCodeExecutionContext, Dictionary <StrongIdentifierValue, WeightedInheritanceItem> result, float currentRank, uint currentDistance, List <StorageUsingOptions> storagesList) { #if DEBUG //Log($"subName = {subName}"); //Log($"localCodeExecutionContext = {localCodeExecutionContext}"); //Log($"currentRank = {currentRank}"); //Log($"currentDistance = {currentDistance}"); //Log($"result.Count = {result.Count}"); //foreach(var resultItem in result) //{ // Log($"resultItem.Key = {resultItem.Key}"); // Log($"resultItem.Value.Rank = {resultItem.Value.Rank}"); // Log($"resultItem.Value.Distance = {resultItem.Value.Distance}"); //} #endif currentDistance++; #if DEBUG //Log($"currentDistance (after) = {currentDistance}"); #endif var rawList = GetRawList(subName, storagesList); #if DEBUG //Log($"rawList = {rawList.WriteListToString()}"); #endif if (!rawList.Any()) { return; } var filteredList = Filter(rawList); #if DEBUG //Log($"filteredList = {filteredList.WriteListToString()}"); #endif if (!filteredList.Any()) { return; } var logicalValueLinearResolver = _context.DataResolversFactory.GetLogicalValueLinearResolver(); foreach (var filteredItem in filteredList) { var targetItem = filteredItem.ResultItem; #if DEBUG //Log($"targetItem = {targetItem}"); #endif var resolvedRankValue = logicalValueLinearResolver.Resolve(targetItem.Rank, localCodeExecutionContext, ResolverOptions.GetDefaultOptions(), true); #if DEBUG //Log($"resolvedRankValue = {resolvedRankValue}"); #endif var systemValue = resolvedRankValue.SystemValue; if (!systemValue.HasValue) { systemValue = 0.5f; } var calculatedRank = currentRank * systemValue.Value; #if DEBUG //Log($"calculatedRank = {calculatedRank}"); #endif if (calculatedRank == 0) { continue; } var superName = targetItem.SuperName; #if DEBUG //Log($"superName = {superName}"); #endif if (result.ContainsKey(superName)) { var item = result[superName]; if (item.Rank < calculatedRank) { item.Distance = currentDistance; item.Rank = calculatedRank; item.OriginalItem = targetItem; } #if DEBUG //Log($"item (w 1)= {item}"); #endif } else { var item = new WeightedInheritanceItem(); item.SuperName = superName; item.Distance = currentDistance; item.Rank = calculatedRank; item.OriginalItem = targetItem; #if DEBUG //Log($"item (w 2) = {item}"); #endif result[superName] = item; } GetWeightedInheritanceItemsBySubName(targetItem.SuperName, localCodeExecutionContext, result, calculatedRank, currentDistance, storagesList); } }