1+ // ===================
2+ // Author: Peize Lin
3+ // date: 2024.08.17
4+ // ===================
5+
6+ #pragma once
7+
8+ #include " Label.h"
9+
10+ namespace RI
11+ {
12+
13+ template <typename TA, typename TAC>
14+ class Filter_Atom
15+ {
16+ public:
17+ virtual bool filter_for1 (const Label::ab_ab &label, const TA &A1) const { return false ; }
18+ // a01b01_a2b01: Aa01
19+ // a01b01_a2b2: Aa01
20+ // a01b2_a2b01: Aa01
21+ virtual bool filter_for1 (const Label::ab_ab &label, const TAC &A1) const { return false ; }
22+ // a01b01_a01b01: Aa2
23+ // a01b01_a01b2: Ab01
24+
25+
26+
27+ virtual bool filter_for2 (const Label::ab_ab &label, const TA &A1, const TAC &A2) const { return false ; }
28+ // a01b01_a2b01: Aa01, Ab01
29+ // a01b01_a2b2: Aa01, Ab2
30+ // a01b2_a2b01: Aa01, Ab01
31+ virtual bool filter_for2 (const Label::ab_ab &label, const TAC &A1, const TA &A2) const { return false ; }
32+ // a01b01_a01b2: Ab01, Aa01
33+ virtual bool filter_for2 (const Label::ab_ab &label, const TAC &A1, const TAC &A2) const { return false ; }
34+ // a01b01_a01b01: Aa2, Ab01
35+
36+
37+
38+ virtual bool filter_for31 (const Label::ab_ab &label, const TA &A1, const TAC &A2, const TAC &A3) const { return false ; }
39+ // a01b01_a2b01: Aa01, Ab01, Aa2
40+ // a01b01_a2b2: Aa01, Ab2, Aa2
41+ // a01b2_a2b01: Aa01, Ab01, Ab2
42+ virtual bool filter_for31 (const Label::ab_ab &label, const TAC &A1, const TA &A2, const TAC &A3) const { return false ; }
43+ // a01b01_a01b2: Ab01, Aa01, Ab2
44+ virtual bool filter_for31 (const Label::ab_ab &label, const TAC &A1, const TAC &A2, const TA &A3) const { return false ; }
45+ // a01b01_a01b01: Aa2, Ab01, Aa01
46+
47+
48+
49+ virtual bool filter_for32 (const Label::ab_ab &label, const TA &A1, const TAC &A2, const TAC &A3) const { return false ; }
50+ // a01b01_a2b01: Aa01, Ab01, Ab2
51+ // a01b01_a2b2: Aa01, Ab2, Ab01
52+ // a01b2_a2b01: Aa01, Ab01, Aa2
53+ virtual bool filter_for32 (const Label::ab_ab &label, const TAC &A1, const TA &A2, const TAC &A3) const { return false ; }
54+ // a01b01_a01b2: Ab01, Aa01, Aa2
55+ virtual bool filter_for32 (const Label::ab_ab &label, const TAC &A1, const TAC &A2, const TAC &A3) const { return false ; }
56+ // a01b01_a01b01: Aa2, Ab01, Ab2
57+
58+
59+
60+ virtual ~Filter_Atom ()=default ;
61+ };
62+
63+ }
0 commit comments