public IReadOnlyList <int> Get1SHealingList(ParsedEvtcLog log, long start, long end, AbstractSingleActor target, EXTHealingType healingType = EXTHealingType.All)
 {
     if (!_healing1S.TryGetValue(healingType, out CachingCollectionWithTarget <int[]> graphs))
     {
         graphs = new CachingCollectionWithTarget <int[]>(log);
         _healing1S[healingType] = graphs;
     }
     if (!graphs.TryGetValue(start, end, target, out int[] graph))
 internal IReadOnlyList <EXTAbstractHealingEvent> GetJustActorTypedOutgoingHealEvents(AbstractSingleActor target, ParsedEvtcLog log, long start, long end, EXTHealingType healingType)
 {
     if (!_typedSelfHealEvents.TryGetValue(healingType, out CachingCollectionWithTarget <List <EXTAbstractHealingEvent> > healEventsPerPhasePerTarget))
     {
         healEventsPerPhasePerTarget       = new CachingCollectionWithTarget <List <EXTAbstractHealingEvent> >(log);
         _typedSelfHealEvents[healingType] = healEventsPerPhasePerTarget;
     }
     if (!healEventsPerPhasePerTarget.TryGetValue(start, end, target, out List <EXTAbstractHealingEvent> dls))
     {
         dls = GetTypedOutgoingHealEvents(target, log, start, end, healingType).Where(x => x.From == _agentItem).ToList();
         healEventsPerPhasePerTarget.Set(start, end, target, dls);
     }
     return(dls);
 }
        public IReadOnlyList <EXTAbstractHealingEvent> GetTypedOutgoingHealEvents(AbstractSingleActor target, ParsedEvtcLog log, long start, long end, EXTHealingType healingType)
        {
            if (!_typedHealEvents.TryGetValue(healingType, out CachingCollectionWithTarget <List <EXTAbstractHealingEvent> > healEventsPerPhasePerTarget))
            {
                healEventsPerPhasePerTarget   = new CachingCollectionWithTarget <List <EXTAbstractHealingEvent> >(log);
                _typedHealEvents[healingType] = healEventsPerPhasePerTarget;
            }
            if (!healEventsPerPhasePerTarget.TryGetValue(start, end, target, out List <EXTAbstractHealingEvent> dls))
            {
                dls = GetOutgoingHealEvents(target, log, start, end).ToList();
                switch (healingType)
                {
                case EXTHealingType.HealingPower:
                    dls.RemoveAll(x => x.GetHealingType(log) != EXTHealingType.HealingPower);
                    break;

                case EXTHealingType.ConversionBased:
                    dls.RemoveAll(x => x.GetHealingType(log) != EXTHealingType.ConversionBased);
                    break;

                case EXTHealingType.Hybrid:
                    dls.RemoveAll(x => x.GetHealingType(log) != EXTHealingType.Hybrid);
                    break;

                case EXTHealingType.All:
                    break;

                default:
                    throw new NotImplementedException("Not implemented healing type " + healingType);
                }
                healEventsPerPhasePerTarget.Set(start, end, target, dls);
            }
            return(dls);
        }