@@ -568,6 +568,73 @@ void DemuxFlowFilter::receiveSignal(cResultFilter *prev, simtime_t_cref t, cObje
568568 });
569569}
570570
571+ Register_ResultFilter (" demuxRegex" , DemuxRegexFilter);
572+
573+ void DemuxRegexFilter::init (Context *ctx)
574+ {
575+ DemuxFilter::init (ctx);
576+ std::string fullPath = ctx->component ->getFullPath () + " ." + ctx->attrsProperty ->getIndex () + " .demuxRegex" ;
577+ auto config = getEnvir ()->getConfig ();
578+ search = cConfiguration::parseString (config->getPerObjectConfigValue (fullPath.c_str (), " search" ), getDefaultSearch ());
579+ replace = cConfiguration::parseString (config->getPerObjectConfigValue (fullPath.c_str (), " replace" ), getDefaultReplace ());
580+ }
581+
582+ const char *DemuxRegexFilter::CategoryFinder::getFullName () const
583+ {
584+ if (object == nullptr )
585+ return " " ;
586+ else {
587+ if (!std::regex_search (object->getFullName (), filter->search ))
588+ return " " ;
589+ else {
590+ result = std::regex_replace (object->getFullName (), filter->search , filter->replace );
591+ return result.c_str ();
592+ }
593+ }
594+ }
595+
596+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, bool b, cObject *details)
597+ {
598+ CategoryFinder c (this , details);
599+ DemuxFilter::receiveSignal (prev, t, b, &c);
600+ }
601+
602+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, intval_t l, cObject *details)
603+ {
604+ CategoryFinder c (this , details);
605+ DemuxFilter::receiveSignal (prev, t, l, &c);
606+ }
607+
608+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, uintval_t l, cObject *details)
609+ {
610+ CategoryFinder c (this , details);
611+ DemuxFilter::receiveSignal (prev, t, l, &c);
612+ }
613+
614+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, double d, cObject *details)
615+ {
616+ CategoryFinder c (this , details);
617+ DemuxFilter::receiveSignal (prev, t, d, &c);
618+ }
619+
620+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, const SimTime& v, cObject *details)
621+ {
622+ CategoryFinder c (this , details);
623+ DemuxFilter::receiveSignal (prev, t, v, &c);
624+ }
625+
626+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, const char *s, cObject *details)
627+ {
628+ CategoryFinder c (this , details);
629+ DemuxFilter::receiveSignal (prev, t, s, &c);
630+ }
631+
632+ void DemuxRegexFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, cObject *object, cObject *details)
633+ {
634+ CategoryFinder c (this , details != nullptr ? details : object);
635+ DemuxFilter::receiveSignal (prev, t, object, &c);
636+ }
637+
571638Register_ResultFilter (" residenceTimePerRegion" , ResidenceTimePerRegionFilter);
572639
573640void ResidenceTimePerRegionFilter::receiveSignal (cResultFilter *prev, simtime_t_cref t, cObject *object, cObject *details)
0 commit comments