546{
547 using sequence_diagram::model::class_;
548 using sequence_diagram::model::function;
549 using sequence_diagram::model::method;
550 using sequence_diagram::model::participant;
551
552 auto is_lambda = [&d](
const method &m) {
553 auto class_participant =
554 dynamic_cast<const sequence_diagram::model::diagram &>(d)
555 .get_participant<class_>(m.class_id());
556 if (!class_participant)
557 return false;
558
559 return class_participant.value().is_lambda();
560 };
561
564 auto is_function = [](const participant *p) {
565 return dynamic_cast<const function *>(p) != nullptr;
566 };
567
568 auto is_cuda_kernel = [](const participant *p) {
569 const auto *f =
dynamic_cast<const function *
>(p);
570 return (f != nullptr) && (f->is_cuda_kernel());
571 };
572
573 auto is_cuda_device = [](const participant *p) {
574 const auto *f =
dynamic_cast<const function *
>(p);
575 return (f != nullptr) && (f->is_cuda_device());
576 };
577
578 switch (ct) {
580 return p.type_name() == "method";
582 return p.type_name() == "method" &&
583 ((
method &)p).is_constructor();
585 return p.type_name() == "method" &&
586 ((
method &)p).is_assignment();
588 return is_function(&p) && ((
function &)p).is_operator();
590 return p.type_name() == "method" &&
591 ((
method &)p).is_defaulted();
593 return is_function(&p) && ((
function &)p).is_static();
595 return p.type_name() == "function";
597 return p.type_name() == "function_template";
599 return p.type_name() == "method" && is_lambda((method &)p);
601 return is_cuda_kernel(&p);
603 return is_cuda_device(&p);
604 }
605
606 return false;
607 });
608
609 return res;
610}