@@ -60,6 +60,33 @@ namespace Label_Tools
6060 }
6161 }
6262
63+ static std::string get_name (const Label::Aab &label)
64+ {
65+ switch (label)
66+ {
67+ case Label::Aab::a: return " a" ;
68+ case Label::Aab::b: return " b" ;
69+ case Label::Aab::a01b01: return " a01b01" ;
70+ case Label::Aab::a01b2: return " a01b2" ;
71+ case Label::Aab::a2b01: return " a2b01" ;
72+ case Label::Aab::a2b2: return " a2b2" ;
73+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
74+ }
75+ }
76+
77+ static std::string get_name (const Label::Aab_Aab &label)
78+ {
79+ switch (label)
80+ {
81+ case Label::Aab_Aab::a01b01_a01b01: return " a01b01_a01b01" ;
82+ case Label::Aab_Aab::a01b01_a01b2: return " a01b01_a01b2" ;
83+ case Label::Aab_Aab::a01b01_a2b01: return " a01b01_a2b01" ;
84+ case Label::Aab_Aab::a01b01_a2b2: return " a01b01_a2b2" ;
85+ case Label::Aab_Aab::a01b2_a2b01: return " a01b2_a2b01" ;
86+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
87+ }
88+ }
89+
6390 template <typename Tlabel>
6491 std::string get_name (const std::vector<Tlabel> &label_list)
6592 {
@@ -68,6 +95,106 @@ namespace Label_Tools
6895 name += Label_Tools::get_name (label) + " _" ;
6996 return name.substr (0 , name.size ()-1 );
7097 }
98+
99+ inline int get_a (const Label::ab &label)
100+ {
101+ switch (label)
102+ {
103+ case Label::ab::a0b0: case Label::ab::a0b1: case Label::ab::a0b2: return 0 ;
104+ case Label::ab::a1b0: case Label::ab::a1b1: case Label::ab::a1b2: return 1 ;
105+ case Label::ab::a2b0: case Label::ab::a2b1: case Label::ab::a2b2: return 2 ;
106+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
107+ }
108+ }
109+
110+ inline int get_b (const Label::ab &label)
111+ {
112+ switch (label)
113+ {
114+ case Label::ab::a0b0: case Label::ab::a1b0: case Label::ab::a2b0: return 0 ;
115+ case Label::ab::a0b1: case Label::ab::a1b1: case Label::ab::a2b1: return 1 ;
116+ case Label::ab::a0b2: case Label::ab::a1b2: case Label::ab::a2b2: return 2 ;
117+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
118+ }
119+ }
120+
121+ inline int get_unused_a (const Label::ab_ab &label)
122+ {
123+ switch (label)
124+ {
125+ case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a1b2_a2b1:
126+ case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a1b2_a2b0:
127+ case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0:
128+ return 0 ;
129+ case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a0b2_a2b1:
130+ case Label::ab_ab::a0b0_a2b2: case Label::ab_ab::a0b2_a2b0:
131+ case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
132+ return 1 ;
133+ case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1:
134+ case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
135+ case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
136+ return 2 ;
137+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
138+ }
139+ }
140+
141+ inline int get_unused_b (const Label::ab_ab &label)
142+ {
143+ switch (label)
144+ {
145+ case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a1b2_a2b1:
146+ case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a0b2_a2b1:
147+ case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1:
148+ return 0 ;
149+ case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a1b2_a2b0:
150+ case Label::ab_ab::a0b0_a2b2: case Label::ab_ab::a0b2_a2b0:
151+ case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
152+ return 1 ;
153+ case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0:
154+ case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
155+ case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
156+ return 2 ;
157+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
158+ }
159+ }
160+
161+ inline Label::Aab to_Aab (const Label::ab &label)
162+ {
163+ switch (label)
164+ {
165+ case Label::ab::a:
166+ return Label::Aab::a;
167+ case Label::ab::b:
168+ return Label::Aab::b;
169+ case Label::ab::a0b0: case Label::ab::a0b1: case Label::ab::a1b0: case Label::ab::a1b1:
170+ return Label::Aab::a01b01;
171+ case Label::ab::a0b2: case Label::ab::a1b2:
172+ return Label::Aab::a01b2;
173+ case Label::ab::a2b0: case Label::ab::a2b1:
174+ return Label::Aab::a2b01;
175+ case Label::ab::a2b2:
176+ return Label::Aab::a2b2;
177+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
178+ }
179+ }
180+
181+ inline Label::Aab_Aab to_Aab_Aab (const Label::ab_ab &label)
182+ {
183+ switch (label)
184+ {
185+ case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
186+ return Label::Aab_Aab::a01b01_a01b01;
187+ case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1: case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
188+ return Label::Aab_Aab::a01b01_a01b2;
189+ case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0: case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
190+ return Label::Aab_Aab::a01b01_a2b01;
191+ case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a0b0_a2b2:
192+ return Label::Aab_Aab::a01b01_a2b2;
193+ case Label::ab_ab::a1b2_a2b1: case Label::ab_ab::a0b2_a2b1: case Label::ab_ab::a1b2_a2b0: case Label::ab_ab::a0b2_a2b0:
194+ return Label::Aab_Aab::a01b2_a2b01;
195+ default : throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
196+ }
197+ }
71198}
72199
73200}
0 commit comments