public void Run() { _logger.Info("Begin"); var context = TstEngineContextHelper.CreateAndInitContext().EngineContext; var defaultSettings = new DefaultSettingsOfCodeEntity(); defaultSettings.Holder = NameHelper.CreateName("Tor"); _logger.Info($"defaultSettings = {defaultSettings}"); var applicationInheritanceItem = new InheritanceItem() { IsSystemDefined = true }; applicationInheritanceItem.SubName = NameHelper.CreateName("PeaseKeeper"); applicationInheritanceItem.SuperName = context.CommonNamesStorage.AppName; applicationInheritanceItem.Rank = new LogicalValue(1.0F); _logger.Info($"applicationInheritanceItem (1) = {applicationInheritanceItem}"); DefaultSettingsOfCodeEntityHelper.SetUpInheritanceItem(applicationInheritanceItem, defaultSettings); _logger.Info($"applicationInheritanceItem (2) = {applicationInheritanceItem}"); _logger.Info("End"); }
protected InheritanceItem CreateInheritanceItem() { var result = new InheritanceItem(); DefaultSettingsOfCodeEntityHelper.SetUpInheritanceItem(result, CurrentDefaultSetings); return(result); }
private void TryCreateCurrentItem() { if (_currentItem == null) { _currentItem = CreateInheritanceItem(); Result.Add(_currentItem); _currentItem.SubName = _subName; } }
/// <inheritdoc/> public void RemoveInheritance(InheritanceItem inheritanceItem) { lock (_lockObj) { #if DEBUG //Log($"kind = {_kind}"); //Log($"subItem = {subItem}; superName = {inheritanceItem.SuperName}"); //Log($"inheritanceItem = {inheritanceItem}"); //Log($"isPrimary = {isPrimary}"); #endif //var indexedInheritanceItem = inheritanceItem.GetIndexed(_realStorageContext.MainStorageContext); #if DEBUG //Log($"indexedInheritanceItem = {indexedInheritanceItem}"); #endif var subName = inheritanceItem.SubName; var superName = inheritanceItem.SuperName; if (subName.IsEmpty || superName.IsEmpty) { return; } //var subNameNormalizedNameValue = subName.NormalizedNameValue; //var superNameNormalizedNameValue = superName.NormalizedNameValue; #if DEBUG //Log($"subNameNormalizedNameValue = {subNameNormalizedNameValue}"); //Log($"superNameNormalizedNameValue = {superNameNormalizedNameValue}"); #endif if (_nonIndexedInfo.ContainsKey(subName)) { var dict = _nonIndexedInfo[subName]; if (dict.ContainsKey(superName)) { //var indexedDict = _indexedInfo[subNameKey]; var targetList = dict[superName]; targetList.Remove(inheritanceItem); //var targetIndexedList = indexedDict[superNameKey]; //targetIndexedList.Remove(indexedInheritanceItem); NRemoveIngeritanceFact(inheritanceItem); } } } }
private void NRemoveIngeritanceFact(InheritanceItem inheritanceItem) { lock (_factsIdRegistryLockObj) { if (_factsIdRegistry.ContainsKey(inheritanceItem)) { var factId = _factsIdRegistry[inheritanceItem]; _realStorageContext.LogicalStorage.RemoveById(factId); _factsIdRegistry.Remove(inheritanceItem); } } }
public void Run() { _logger.Log("Begin"); var context = TstEngineContextHelper.CreateAndInitContext().EngineContext; //var dictionary = context.Dictionary; var inheritanceStorage = context.Storage.GlobalStorage.InheritanceStorage; var subName = NameHelper.CreateName("SubClass"); var superName = NameHelper.CreateName("SuperClass"); var inheritanceItem = new InheritanceItem(); inheritanceItem.SubName = subName; inheritanceItem.SuperName = superName; inheritanceItem.Rank = new LogicalValue(1); _logger.Log($"inheritanceItem = {inheritanceItem}"); inheritanceStorage.SetInheritance(inheritanceItem); inheritanceItem = new InheritanceItem(); inheritanceItem.SubName = subName; inheritanceItem.SuperName = superName; inheritanceItem.Rank = new LogicalValue(0.5F); _logger.Log($"inheritanceItem = {inheritanceItem}"); inheritanceStorage.SetInheritance(inheritanceItem); inheritanceItem = new InheritanceItem(); inheritanceItem.SubName = subName; inheritanceItem.SuperName = superName; inheritanceItem.Rank = new LogicalValue(0); _logger.Log($"inheritanceItem = {inheritanceItem}"); inheritanceStorage.SetInheritance(inheritanceItem); var list = inheritanceStorage.GetItemsDirectly(subName); _logger.Log($"list.Count = {list.Count}"); _logger.Log($"inheritanceItem = {list.WriteListToString()}"); _logger.Log("End"); }
private void ParseQueryStringAndGetInheritanceInformation(string queryStr) { _logger.Log($"queryStr = {queryStr}"); var result = new CodeFile(); result.IsMain = false; result.FileName = "Hi!"; var internalParserContext = new InternalParserContext(queryStr, result, _context); var globalStorage = _context.Storage.GlobalStorage; internalParserContext.SetCurrentDefaultSetings(globalStorage.DefaultSettingsOfCodeEntity); var parser = new LogicalQueryParser(internalParserContext); parser.Run(); var parsedQuery = parser.Result; _logger.Log($"parsedQuery = {parsedQuery}"); var inheritanceRelationsList = parsedQuery.GetInheritanceRelations(); //_logger.Log($"inheritanceRelationsList = {inheritanceRelationsList.WriteListToString()}"); var inheritanceItemsList = new List <InheritanceItem>(); var ruleInstanceName = parsedQuery.Name; foreach (var inheritanceRelation in inheritanceRelationsList) { _logger.Log($"inheritanceRelation = {inheritanceRelation}"); var inheritanceItem = new InheritanceItem(); inheritanceItem.SuperName = inheritanceRelation.Name; inheritanceItem.SubName = inheritanceRelation.ParamsList.Single().Name; inheritanceItem.Rank = new LogicalValue(1); inheritanceItem.KeysOfPrimaryRecords.Add(ruleInstanceName); inheritanceItemsList.Add(inheritanceItem); } _logger.Log($"inheritanceItemsList = {inheritanceItemsList.WriteListToString()}"); }
private void AddSystemDefinedSettingsToClass(CodeEntity codeEntity) { var inheritanceItem = new InheritanceItem() { IsSystemDefined = true }; inheritanceItem.SubName = codeEntity.Name; inheritanceItem.SuperName = _context.CommonNamesStorage.ClassName; inheritanceItem.Rank = new LogicalValue(1.0F); #if DEBUG //Log($"inheritanceItem = {inheritanceItem}"); #endif codeEntity.InheritanceItems.Add(inheritanceItem); }
private RuleInstance CreateInheritanceFact(InheritanceItem inheritanceItem) { var factName = NameHelper.CreateRuleOrFactName(); #if DEBUG //Log($"factName = {factName}"); #endif var fact = new RuleInstance(); fact.Kind = KindOfRuleInstance.Fact; fact.AppendAnnotations(inheritanceItem); fact.Name = factName; //fact.KeysOfPrimaryRecords.Add(inheritanceItem.Id); var primaryPart = new PrimaryRulePart(); fact.PrimaryPart = primaryPart; primaryPart.Parent = fact; var isRelation = new LogicalQueryNode(); isRelation.Name = NameHelper.CreateName("is"); isRelation.Kind = KindOfLogicalQueryNode.Relation; isRelation.ParamsList = new List <LogicalQueryNode>(); primaryPart.Expression = isRelation; var subItemNode = new LogicalQueryNode(); isRelation.ParamsList.Add(subItemNode); subItemNode.Kind = KindOfLogicalQueryNode.Concept; subItemNode.Name = inheritanceItem.SubName; var superItemNode = new LogicalQueryNode(); isRelation.ParamsList.Add(superItemNode); superItemNode.Kind = KindOfLogicalQueryNode.Concept; superItemNode.Name = inheritanceItem.SuperName; var rankNode = new LogicalQueryNode(); isRelation.ParamsList.Add(rankNode); rankNode.Kind = KindOfLogicalQueryNode.Value; rankNode.Value = inheritanceItem.Rank; return(fact); }
private void ProcessUseNotInheritance() { var paramsList = TakePositionedParameters(4); #if DEBUG //Log($"paramsList = {paramsList.WriteListToString()}"); //Log($"_currentCodeFrame = {_currentCodeFrame.ToDbgString()}"); #endif var inheritenceItem = new InheritanceItem(); DefaultSettingsOfCodeEntityHelper.SetUpInheritanceItem(inheritenceItem, _currentCodeFrame.LocalContext.Storage.DefaultSettingsOfCodeEntity); var subName = paramsList[0].AsStrongIdentifierValue; var superName = paramsList[1].AsStrongIdentifierValue; #if DEBUG //Log($"paramsList[2] = {paramsList[2]}"); #endif var rank = _logicalValueLinearResolver.Resolve(paramsList[2], _currentCodeFrame.LocalContext, ResolverOptions.GetDefaultOptions(), true).Inverse(); #if DEBUG //Log($"subName = {subName}"); //Log($"superName = {superName}"); //Log($"rank = {rank}"); #endif inheritenceItem.SubName = subName; inheritenceItem.SuperName = superName; inheritenceItem.Rank = rank; #if DEBUG //Log($"inheritenceItem = {inheritenceItem}"); #endif _globalStorage.InheritanceStorage.SetInheritance(inheritenceItem); _currentCodeFrame.CurrentPosition++; }
protected CodeEntity CreateAndSaveEntity(CodeEntity superCodeEntity) { var result = new CodeEntity(); result.Kind = KindOfCodeEntity.Instance; var newName = _context.CommonNamesStorage.SelfName; result.Name = newName; #if DEBUG //Log($"newName = {newName}"); #endif result.Holder = _context.CommonNamesStorage.DefaultHolder; var inheritanceItem = new InheritanceItem() { IsSystemDefined = true }; inheritanceItem.SubName = newName; inheritanceItem.SuperName = superCodeEntity.Name; inheritanceItem.Rank = new LogicalValue(1.0F); result.InheritanceItems.Add(inheritanceItem); #if DEBUG //Log($"result = {result}"); #endif var globalStorage = _context.Storage.GlobalStorage; globalStorage.MetadataStorage.Append(result); globalStorage.InheritanceStorage.SetInheritance(inheritanceItem); return(result); }
/// <inheritdoc/> protected override void OnEnter() { Result = new List <InheritanceItem>(); _currentItem = null; }
public static void SetUpInheritanceItem(InheritanceItem inheritanceItem, DefaultSettingsOfCodeEntity defaultSettings) { var context = new Dictionary <object, object>(); SetUpAnnotatedItem(inheritanceItem, defaultSettings, context); }
public void Run() { _logger.Log("Begin"); var context = TstEngineContextHelper.CreateAndInitContext().EngineContext; var applicationInheritanceItem = new InheritanceItem() { IsSystemDefined = true }; applicationInheritanceItem.SubName = NameHelper.CreateName("PeaseKeeper"); applicationInheritanceItem.SuperName = context.CommonNamesStorage.AppName; applicationInheritanceItem.Rank = new LogicalValue(1.0F); context.Storage.GlobalStorage.InheritanceStorage.SetInheritance(applicationInheritanceItem); var compiledFunctionBody = new CompiledFunctionBody(); var strVal = new StringValue("The beatles!"); var command = new ScriptCommand(); command.OperationCode = OperationCode.PushVal; command.Value = strVal; _logger.Log($"command = {command}"); compiledFunctionBody.Commands[0] = command; var identifier = NameHelper.CreateName("@>log"); command = new ScriptCommand(); command.OperationCode = OperationCode.PushVal; command.Value = identifier; command.Position = 1; _logger.Log($"command = {command}"); compiledFunctionBody.Commands[1] = command; command = new ScriptCommand(); command.OperationCode = OperationCode.CallBinOp; command.KindOfOperator = KindOfOperator.LeftRightStream; command.Position = 2; _logger.Log($"command = {command}"); compiledFunctionBody.Commands[2] = command; command = new ScriptCommand(); command.OperationCode = OperationCode.Return; command.Position = 3; _logger.Log($"command = {command}"); compiledFunctionBody.Commands[3] = command; _logger.Log($"compiledFunctionBody = {compiledFunctionBody}"); _logger.Log($"compiledFunctionBody = {compiledFunctionBody.ToDbgString()}"); var codeFrame = new CodeFrame(); codeFrame.CompiledFunctionBody = compiledFunctionBody; codeFrame.LocalContext = new LocalCodeExecutionContext(); codeFrame.LocalContext.Storage = context.Storage.GlobalStorage; codeFrame.LocalContext.Holder = NameHelper.CreateName("PixKeeper"); //codeFrame.LocalContext.Holder = new Name(); _logger.Log($"codeFrame = {codeFrame}"); _logger.Log($"codeFrame = {codeFrame.ToDbgString()}"); var threadExecutor = new SyncThreadExecutor(context); threadExecutor.SetCodeFrame(codeFrame); threadExecutor.Start(); _logger.Log("End"); }
private void NAppend(RuleInstance ruleInstance, bool isPrimary) { #if DEBUG //Log($"ruleInstance = {ruleInstance}"); //Log($"isPrimary = {isPrimary}"); //Log($"ruleInstance = {DebugHelperForRuleInstance.ToString(ruleInstance)}"); #endif if (_ruleInstancesList.Contains(ruleInstance)) { return; } var ruleInstanceId = ruleInstance.Name.NameValue; if (_ruleInstancesDictById.ContainsKey(ruleInstanceId)) { return; } //ruleInstance = ruleInstance.Clone(); #if DEBUG //Log($"ruleInstance (after) = {ruleInstance}"); #endif //var indexedRuleInstance = ruleInstance.GetIndexed(_realStorageContext.MainStorageContext); #if DEBUG //Log($"indexedRuleInstance = {indexedRuleInstance}"); #endif var ruleInstanceName = ruleInstance.Name; #if DEBUG //Log($"ruleInstanceName = {ruleInstanceName}"); #endif if (_ruleInstancesDict.ContainsKey(ruleInstanceName)) { return; } var longHashCode = ruleInstance.GetLongHashCode(); #if DEBUG //Log($"longHashCode = {longHashCode}"); #endif if (_ruleInstancesDictByHashCode.ContainsKey(longHashCode)) { return; } _ruleInstancesList.Add(ruleInstance); _ruleInstancesDict[ruleInstanceName] = ruleInstance; _ruleInstancesDictByHashCode[longHashCode] = ruleInstance; _ruleInstancesDictById[ruleInstanceId] = ruleInstance; #if DEBUG //Log($"ruleInstance = {DebugHelperForRuleInstance.ToString(ruleInstance)}"); //Log($"ruleInstance.Normalized = {DebugHelperForRuleInstance.ToString(ruleInstance.Normalized)}"); #endif _commonPersistIndexedLogicalData.NSetIndexedRuleInstanceToIndexData(ruleInstance.Normalized); if (isPrimary && _kind != KindOfStorage.PublicFacts && _kind != KindOfStorage.PerceptedFacts) { #if DEBUG //Log($"_kind = {_kind}"); #endif var inheritanceRelationsList = ruleInstance.GetInheritanceRelations(); //var ruleInstanceName = ruleInstance.Name.NameValue; if (inheritanceRelationsList.Any()) { var inheritanceStorage = _realStorageContext.InheritanceStorage; foreach (var inheritanceRelation in inheritanceRelationsList) { #if DEBUG //Log($"inheritanceRelation = {inheritanceRelation}"); #endif var inheritanceItem = new InheritanceItem(); if (inheritanceRelation.Name == NameHelper.CreateName("is")) { var paramsCount = inheritanceRelation.ParamsList.Count; switch (paramsCount) { case 2: inheritanceItem.SuperName = inheritanceRelation.ParamsList[1].Name; inheritanceItem.SubName = inheritanceRelation.ParamsList[0].Name; inheritanceItem.Rank = new LogicalValue(1); break; case 3: inheritanceItem.SuperName = inheritanceRelation.ParamsList[1].Name; inheritanceItem.SubName = inheritanceRelation.ParamsList[0].Name; var thirdParameter = inheritanceRelation.ParamsList[2]; var kindOfthirdParameter = thirdParameter.Kind; switch (kindOfthirdParameter) { case KindOfLogicalQueryNode.Concept: inheritanceItem.Rank = thirdParameter.Name; break; case KindOfLogicalQueryNode.FuzzyLogicNonNumericSequence: inheritanceItem.Rank = thirdParameter.FuzzyLogicNonNumericSequenceValue; break; case KindOfLogicalQueryNode.Value: inheritanceItem.Rank = thirdParameter.Value; break; default: throw new ArgumentOutOfRangeException(nameof(kindOfthirdParameter), kindOfthirdParameter, null); } break; default: throw new ArgumentOutOfRangeException(nameof(paramsCount), paramsCount, null); } } else { inheritanceItem.SuperName = inheritanceRelation.Name; inheritanceItem.SubName = inheritanceRelation.ParamsList.Single().Name; inheritanceItem.Rank = new LogicalValue(1); } inheritanceItem.KeysOfPrimaryRecords.Add(ruleInstanceName); #if DEBUG //Log($"inheritanceItem = {inheritanceItem}"); #endif inheritanceStorage.SetInheritance(inheritanceItem, false); } } } #if IMAGINE_WORKING //Log("End"); #else throw new NotImplementedException(); #endif }
/// <inheritdoc/> public void SetInheritance(InheritanceItem inheritanceItem) { SetInheritance(inheritanceItem, true); }
private void Recalculate() { #if DEBUG //Log($"_context.Id = {_context.Id}"); //Log($"_selfName.NameValue = {_selfName.NameValue}"); #endif if (_localCodeExecutionContext == null) { var commonNamesStorage = _context.CommonNamesStorage; _selfName = commonNamesStorage.SelfName; _selfNameForFacts = NameHelper.NormalizeNameStr(_selfName.NameValue); _logicQueryParseAndCache = _context.LogicQueryParseAndCache; _localCodeExecutionContext = new LocalCodeExecutionContext() { Storage = _context.Storage.GlobalStorage, Holder = commonNamesStorage.DefaultHolder }; } #if DEBUG //Log($"_selfName = {_selfName}"); //Log($"_selfNameForFacts = {_selfNameForFacts}"); #endif var weightedInheritanceItemsList = _inheritanceResolver.GetWeightedInheritanceItems(_selfName, _localCodeExecutionContext, _resolverOptions); #if DEBUG //Log($"weightedInheritanceItemsList = {weightedInheritanceItemsList.WriteListToString()}"); //Log($"_context.Id = {_context.Id}"); #endif if (!weightedInheritanceItemsList.Any()) { _foundInheritanceKeysList.Clear(); return; } var inheritanceItemsDict = weightedInheritanceItemsList.ToDictionary(p => p.SuperName, p => p.OriginalItem); var idsList = weightedInheritanceItemsList.Select(p => p.SuperName).Distinct().ToList(); #if DEBUG //Log($"idsList = {JsonConvert.SerializeObject(idsList.Select(p => p.NameValue))}"); #endif var newIdsList = idsList.Except(_foundInheritanceKeysList); #if DEBUG //Log($"newIdsList = {JsonConvert.SerializeObject(newIdsList.Select(p => p.NameValue))}"); #endif if (newIdsList.Any()) { foreach (var id in newIdsList) { #if DEBUG //Log($"id = {id}"); #endif var name = id.NameValue; #if DEBUG //Log($"name = {name}"); #endif var initialAddedInheritanceItem = inheritanceItemsDict[id]; #if DEBUG //Log($"initialAddedInheritanceItem = {initialAddedInheritanceItem}"); #endif var factStr = $"{{: >:{{ is({_selfNameForFacts}, {name}, 1) }} :}}"; #if DEBUG //Log($"factStr = {factStr}"); #endif var fact = _logicQueryParseAndCache.GetLogicRuleOrFact(factStr); #if DEBUG //Log($"fact = {fact}"); #endif _publicFactsStorage.Append(fact); _factsIdDict[name] = fact.Name.NameValue; var addedInheritanceItem = new InheritanceItem(); addedInheritanceItem.SuperName = initialAddedInheritanceItem.SuperName; addedInheritanceItem.SubName = _selfName; addedInheritanceItem.Rank = new LogicalValue(1); #if DEBUG //Log($"addedInheritanceItem = {addedInheritanceItem}"); #endif _inheritanceItemsDict[name] = addedInheritanceItem; _publicInheritanceStorage.SetInheritance(addedInheritanceItem); } } var oldIdList = _foundInheritanceKeysList.Except(idsList); #if DEBUG //Log($"oldIdList = {JsonConvert.SerializeObject(oldIdList)}"); #endif if (oldIdList.Any()) { foreach (var id in oldIdList) { var name = id.NameValue; _publicFactsStorage.RemoveById(_factsIdDict[name]); _factsIdDict.Remove(name); _publicInheritanceStorage.RemoveInheritance(_inheritanceItemsDict[name]); _inheritanceItemsDict.Remove(name); } } _foundInheritanceKeysList = idsList; }
/// <inheritdoc/> protected override void OnRun() { #if DEBUG //Log($"_state = {_state}"); //Log($"_currToken = {_currToken}"); //Log($"Result = {Result}"); //Log($"_currentItem = {_currentItem}"); #endif switch (_state) { case State.Init: switch (_currToken.TokenKind) { case TokenKind.Word: switch (_currToken.KeyWordTokenKind) { case KeyWordTokenKind.Is: _state = State.WaitForItem; break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForItem: switch (_currToken.TokenKind) { case TokenKind.Word: TryCreateCurrentItem(); _currentItem.Rank = new LogicalValue(1.0F); _currentItem.SuperName = ParseName(_currToken.Content); _state = State.GotSuperName; break; case TokenKind.OpenSquareBracket: _state = State.WaitForRank; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotSuperName: switch (_currToken.TokenKind) { case TokenKind.OpenFigureBracket: _context.Recovery(_currToken); Exit(); break; case TokenKind.Comma: _currentItem = null; _state = State.WaitForItem; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForRank: switch (_currToken.TokenKind) { case TokenKind.Number: { TryCreateCurrentItem(); _context.Recovery(_currToken); var parser = new NumberParser(_context, true); parser.Run(); _currentItem.Rank = parser.Result; _state = State.GotRankValue; } break; case TokenKind.Identifier: case TokenKind.Word: { TryCreateCurrentItem(); var nextToken = _context.GetToken(); #if DEBUG //Log($"nextToken = {nextToken}"); #endif switch (nextToken.TokenKind) { case TokenKind.Word: case TokenKind.Identifier: _context.Recovery(nextToken); _fuzzyLogicNonNumericSequenceValue = new FuzzyLogicNonNumericSequenceValue(); _fuzzyLogicNonNumericSequenceValue.AddIdentifier(ParseName(_currToken.Content)); _state = State.GotFuzzyLogicNonNumericSequenceItem; break; default: _context.Recovery(nextToken); _currentItem.Rank = ParseName(_currToken.Content); _state = State.GotRankValue; break; } } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotFuzzyLogicNonNumericSequenceItem: switch (_currToken.TokenKind) { case TokenKind.Word: case TokenKind.Identifier: _fuzzyLogicNonNumericSequenceValue.AddIdentifier(ParseName(_currToken.Content)); _state = State.GotFuzzyLogicNonNumericSequenceItem; break; case TokenKind.CloseSquareBracket: _currentItem.Rank = _fuzzyLogicNonNumericSequenceValue; _state = State.GotRank; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotRankValue: switch (_currToken.TokenKind) { case TokenKind.CloseSquareBracket: _state = State.GotRank; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotRank: switch (_currToken.TokenKind) { case TokenKind.Word: TryCreateCurrentItem(); _currentItem.SuperName = ParseName(_currToken.Content); _state = State.GotSuperName; break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new ArgumentOutOfRangeException(nameof(_state), _state, null); } }
/// <inheritdoc/> public void SetInheritance(InheritanceItem inheritanceItem, bool isPrimary) { var subItem = inheritanceItem.SubName; lock (_lockObj) { #if DEBUG //Log($"kind = {_kind}"); //Log($"subItem = {subItem}; superName = {inheritanceItem.SuperName}"); //Log($"inheritanceItem = {inheritanceItem}"); //Log($"isPrimary = {isPrimary}"); #endif //var indexedInheritanceItem = inheritanceItem.GetIndexed(_realStorageContext.MainStorageContext); #if DEBUG //Log($"indexedInheritanceItem = {indexedInheritanceItem}"); #endif var subName = inheritanceItem.SubName; var superName = inheritanceItem.SuperName; if (subName.IsEmpty || superName.IsEmpty) { return; } //var subNameNormalizedNameValue = subName.NormalizedNameValue; //var superNameNormalizedNameValue = superName.NormalizedNameValue; #if DEBUG //Log($"subNameNormalizedNameValue = {subNameNormalizedNameValue}"); //Log($"superNameNormalizedNameValue = {superNameNormalizedNameValue}"); #endif if (_nonIndexedInfo.ContainsKey(subName)) { var dict = _nonIndexedInfo[subName]; //var indexedDict = _indexedInfo[subNameKey]; if (dict.ContainsKey(superName)) { var targetList = dict[superName]; #if DEBUG //Log($"dict[superName].Count = {dict[superName].Count}"); //Log($"targetList = {targetList.WriteListToString()}"); #endif var targetLongConditionalHashCode = inheritanceItem.GetLongConditionalHashCode(); #if DEBUG //Log($"targetLongConditionalHashCode = {targetLongConditionalHashCode}"); #endif //var targetIndexedList = indexedDict[superNameKey]; var itemsWithTheSameLongConditionalHashCodeList = targetList.Where(p => p.GetLongConditionalHashCode() == targetLongConditionalHashCode).ToList(); foreach (var itemWithTheSameLongConditionalHashCode in itemsWithTheSameLongConditionalHashCodeList) { targetList.Remove(itemWithTheSameLongConditionalHashCode); NRemoveIngeritanceFact(itemWithTheSameLongConditionalHashCode); } //var itemsWithTheSameLongConditionalHashCodeList = indexedItemsWithTheSameLongConditionalHashCodeList.Select(p => p.OriginalInheritanceItem).ToList(); #if DEBUG //Log($"itemsWithTheSameLongConditionalHashCodeList = {itemsWithTheSameLongConditionalHashCodeList.WriteListToString()}"); #endif //foreach(var itemWithTheSameLongConditionalHashCode in itemsWithTheSameLongConditionalHashCodeList) //{ // targetList.Remove(itemWithTheSameLongConditionalHashCode); // NRemoveIngeritanceFact(itemWithTheSameLongConditionalHashCode); //} targetList.Add(inheritanceItem); //targetIndexedList.Add(indexedInheritanceItem); } else { dict[superName] = new List <InheritanceItem>() { inheritanceItem }; //indexedDict[superNameKey] = new List<IndexedInheritanceItem>() { indexedInheritanceItem }; } } else { var dict = new Dictionary <StrongIdentifierValue, List <InheritanceItem> >(); _nonIndexedInfo[subName] = dict; dict[superName] = new List <InheritanceItem>() { inheritanceItem }; //var indexedDict = new Dictionary<ulong, List<IndexedInheritanceItem>>(); //_indexedInfo[subNameKey] = indexedDict; //indexedDict[superNameKey] = new List<IndexedInheritanceItem>() { indexedInheritanceItem }; } } if (isPrimary && _kind != KindOfStorage.PublicFacts && _kind != KindOfStorage.PerceptedFacts) { var inheritanceFact = CreateInheritanceFact(inheritanceItem); #if DEBUG //Log($"inheritanceFact = {inheritanceFact}"); //inheritanceFact.CheckDirty(); //Log($"inheritanceFact = {DebugHelperForRuleInstance.ToString(inheritanceFact)}"); #endif lock (_factsIdRegistryLockObj) { _factsIdRegistry[inheritanceItem] = inheritanceFact.Name.NameValue; } _realStorageContext.LogicalStorage.Append(inheritanceFact, false); if (_kind == KindOfStorage.Global || _kind == KindOfStorage.Host) { _inheritancePublicFactsReplicator.ProcessChangeInheritance(inheritanceItem.SubName, inheritanceItem.SuperName); } } #if DEBUG //Log("End"); #endif }