Task INodeMemory.Access <T>(NodeMemoryAccessor <T> accessor) { var memoryAccess = accessor as NodeMemoryAccessor <IAlphaMemory <TFact> >; if (memoryAccess == null) { throw new ArgumentException($"The memory type is invalid: {typeof(IAlphaMemory<TFact>)}", nameof(memoryAccess)); } return(Task.Factory.StartNew(() => memoryAccess(this), CancellationToken.None, TaskCreationOptions.None, _scheduler)); }
Task IAlphaMemoryMap.Access <T>(IAlphaMemoryNode <T> node, NodeMemoryAccessor <IAlphaMemory <T> > accessor) { var memory = _memories.GetOrAdd(node, add => new AlphaMemory <T>(_loggerFactory)); return(memory.Access(accessor)); }
Task IBetaMemoryMap.Access <T>(IBetaMemoryNode <T> node, NodeMemoryAccessor <IBetaMemory <T> > accessor) { var memory = _memories.GetOrAdd(node, add => new BetaMemory <T>()); return(memory.Access(accessor)); }
Task IWorkingMemory.Access <TRight>(IBetaMemoryNode <TRight> node, NodeMemoryAccessor <IBetaMemory <TRight> > accessor) { return(_betaMemories.Access(node, accessor)); }
Task IWorkingMemory.Access <T>(IAlphaMemoryNode <T> node, NodeMemoryAccessor <IAlphaMemory <T> > accessor) { return(_alphaMemories.Access(node, accessor)); }