Embedded Template Library  1.0
 All Classes Files Functions Variables Typedefs Friends Modules Pages
visitor.h
Go to the documentation of this file.
1 
3 /******************************************************************************
4 The MIT License(MIT)
5 
6 Embedded Template Library.
7 
8 Copyright(c) 2014 jwellbelove
9 
10 Permission is hereby granted, free of charge, to any person obtaining a copy
11 of this software and associated documentation files(the "Software"), to deal
12 in the Software without restriction, including without limitation the rights
13 to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
14 copies of the Software, and to permit persons to whom the Software is
15 furnished to do so, subject to the following conditions :
16 
17 The above copyright notice and this permission notice shall be included in all
18 copies or substantial portions of the Software.
19 
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
23 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 SOFTWARE.
27 ******************************************************************************/
28 
29 #ifndef __ETL_VISITOR__
30 #define __ETL_VISITOR__
31 
32 //*****************************************************************************
45 //*****************************************************************************
46 
47 namespace etl
48 {
49  //*****************************************************************
53  //*****************************************************************
54  template <typename T1, typename T2 = void, typename T3 = void, typename T4 = void>
55  class visitable
56  {
57  public:
58 
59  virtual void accept(T1&) = 0;
60  virtual void accept(T2&) = 0;
61  virtual void accept(T3&) = 0;
62  virtual void accept(T4&) = 0;
63  };
64 
65  //*****************************************************************
69  //*****************************************************************
70  template <typename T1, typename T2, typename T3>
71  class visitable<T1, T2, T3>
72  {
73  public:
74 
75  virtual void accept(T1&) = 0;
76  virtual void accept(T2&) = 0;
77  virtual void accept(T3&) = 0;
78  };
79 
80  //*****************************************************************
84  //*****************************************************************
85  template <typename T1, typename T2>
86  class visitable<T1, T2>
87  {
88  public:
89 
90  virtual void accept(T1&) = 0;
91  virtual void accept(T2&) = 0;
92  };
93 
94  //*****************************************************************
98  //*****************************************************************
99  template <typename T1>
100  class visitable<T1>
101  {
102  public:
103 
104  virtual void accept(T1&) = 0;
105  };
106 
107  //*****************************************************************
111  //*****************************************************************
112  template <typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
113  typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
114  typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
115  typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void>
116  class visitor
117  {
118  public:
119 
120  virtual void visit(T1&) = 0;
121  virtual void visit(T2&) = 0;
122  virtual void visit(T3&) = 0;
123  virtual void visit(T4&) = 0;
124  virtual void visit(T5&) = 0;
125  virtual void visit(T6&) = 0;
126  virtual void visit(T7&) = 0;
127  virtual void visit(T8&) = 0;
128  virtual void visit(T9&) = 0;
129  virtual void visit(T10&) = 0;
130  virtual void visit(T11&) = 0;
131  virtual void visit(T12&) = 0;
132  virtual void visit(T13&) = 0;
133  virtual void visit(T14&) = 0;
134  virtual void visit(T15&) = 0;
135  virtual void visit(T16&) = 0;
136  };
137 
138  //*****************************************************************
142  //*****************************************************************
143  template <typename T1, typename T2, typename T3, typename T4,
144  typename T5, typename T6, typename T7, typename T8,
145  typename T9, typename T10, typename T11, typename T12,
146  typename T13, typename T14, typename T15>
147  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
148  {
149  public:
150 
151  virtual void visit(T1&) = 0;
152  virtual void visit(T2&) = 0;
153  virtual void visit(T3&) = 0;
154  virtual void visit(T4&) = 0;
155  virtual void visit(T5&) = 0;
156  virtual void visit(T6&) = 0;
157  virtual void visit(T7&) = 0;
158  virtual void visit(T8&) = 0;
159  virtual void visit(T9&) = 0;
160  virtual void visit(T10&) = 0;
161  virtual void visit(T11&) = 0;
162  virtual void visit(T12&) = 0;
163  virtual void visit(T13&) = 0;
164  virtual void visit(T14&) = 0;
165  virtual void visit(T15&) = 0;
166  };
167 
168  //*****************************************************************
172  //*****************************************************************
173  template <typename T1, typename T2, typename T3, typename T4,
174  typename T5, typename T6, typename T7, typename T8,
175  typename T9, typename T10, typename T11, typename T12,
176  typename T13, typename T14>
177  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
178  {
179  public:
180 
181  virtual void visit(T1&) = 0;
182  virtual void visit(T2&) = 0;
183  virtual void visit(T3&) = 0;
184  virtual void visit(T4&) = 0;
185  virtual void visit(T5&) = 0;
186  virtual void visit(T6&) = 0;
187  virtual void visit(T7&) = 0;
188  virtual void visit(T8&) = 0;
189  virtual void visit(T9&) = 0;
190  virtual void visit(T10&) = 0;
191  virtual void visit(T11&) = 0;
192  virtual void visit(T12&) = 0;
193  virtual void visit(T13&) = 0;
194  virtual void visit(T14&) = 0;
195  };
196 
197  //*****************************************************************
201  //*****************************************************************
202  template <typename T1, typename T2, typename T3, typename T4,
203  typename T5, typename T6, typename T7, typename T8,
204  typename T9, typename T10, typename T11, typename T12,
205  typename T13>
206  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
207  {
208  public:
209 
210  virtual void visit(T1&) = 0;
211  virtual void visit(T2&) = 0;
212  virtual void visit(T3&) = 0;
213  virtual void visit(T4&) = 0;
214  virtual void visit(T5&) = 0;
215  virtual void visit(T6&) = 0;
216  virtual void visit(T7&) = 0;
217  virtual void visit(T8&) = 0;
218  virtual void visit(T9&) = 0;
219  virtual void visit(T10&) = 0;
220  virtual void visit(T11&) = 0;
221  virtual void visit(T12&) = 0;
222  virtual void visit(T13&) = 0;
223  };
224 
225  //*****************************************************************
229  //*****************************************************************
230  template <typename T1, typename T2, typename T3, typename T4,
231  typename T5, typename T6, typename T7, typename T8,
232  typename T9, typename T10, typename T11, typename T12>
233  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
234  {
235  public:
236 
237  virtual void visit(T1&) = 0;
238  virtual void visit(T2&) = 0;
239  virtual void visit(T3&) = 0;
240  virtual void visit(T4&) = 0;
241  virtual void visit(T5&) = 0;
242  virtual void visit(T6&) = 0;
243  virtual void visit(T7&) = 0;
244  virtual void visit(T8&) = 0;
245  virtual void visit(T9&) = 0;
246  virtual void visit(T10&) = 0;
247  virtual void visit(T11&) = 0;
248  virtual void visit(T12&) = 0;
249  };
250 
251  //*****************************************************************
255  //*****************************************************************
256  template <typename T1, typename T2, typename T3, typename T4,
257  typename T5, typename T6, typename T7, typename T8,
258  typename T9, typename T10, typename T11>
259  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
260  {
261  public:
262 
263  virtual void visit(T1&) = 0;
264  virtual void visit(T2&) = 0;
265  virtual void visit(T3&) = 0;
266  virtual void visit(T4&) = 0;
267  virtual void visit(T5&) = 0;
268  virtual void visit(T6&) = 0;
269  virtual void visit(T7&) = 0;
270  virtual void visit(T8&) = 0;
271  virtual void visit(T9&) = 0;
272  virtual void visit(T10&) = 0;
273  virtual void visit(T11&) = 0;
274  };
275 
276  //*****************************************************************
280  //*****************************************************************
281  template <typename T1, typename T2, typename T3, typename T4,
282  typename T5, typename T6, typename T7, typename T8,
283  typename T9, typename T10>
284  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
285  {
286  public:
287 
288  virtual void visit(T1&) = 0;
289  virtual void visit(T2&) = 0;
290  virtual void visit(T3&) = 0;
291  virtual void visit(T4&) = 0;
292  virtual void visit(T5&) = 0;
293  virtual void visit(T6&) = 0;
294  virtual void visit(T7&) = 0;
295  virtual void visit(T8&) = 0;
296  virtual void visit(T9&) = 0;
297  virtual void visit(T10&) = 0;
298  };
299 
300  //*****************************************************************
304  //*****************************************************************
305  template <typename T1, typename T2, typename T3, typename T4,
306  typename T5, typename T6, typename T7, typename T8,
307  typename T9>
308  class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9>
309  {
310  public:
311 
312  virtual void visit(T1&) = 0;
313  virtual void visit(T2&) = 0;
314  virtual void visit(T3&) = 0;
315  virtual void visit(T4&) = 0;
316  virtual void visit(T5&) = 0;
317  virtual void visit(T6&) = 0;
318  virtual void visit(T7&) = 0;
319  virtual void visit(T8&) = 0;
320  virtual void visit(T9&) = 0;
321  };
322 
323  //*****************************************************************
327  //*****************************************************************
328  template <typename T1, typename T2, typename T3, typename T4,
329  typename T5, typename T6, typename T7, typename T8>
330  class visitor<T1, T2, T3, T4, T5, T6, T7, T8>
331  {
332  public:
333 
334  virtual void visit(T1&) = 0;
335  virtual void visit(T2&) = 0;
336  virtual void visit(T3&) = 0;
337  virtual void visit(T4&) = 0;
338  virtual void visit(T5&) = 0;
339  virtual void visit(T6&) = 0;
340  virtual void visit(T7&) = 0;
341  virtual void visit(T8&) = 0;
342  };
343 
344  //*****************************************************************
348  //*****************************************************************
349  template <typename T1, typename T2, typename T3, typename T4,
350  typename T5, typename T6, typename T7>
351  class visitor<T1, T2, T3, T4, T5, T6, T7>
352  {
353  public:
354 
355  virtual void visit(T1&) = 0;
356  virtual void visit(T2&) = 0;
357  virtual void visit(T3&) = 0;
358  virtual void visit(T4&) = 0;
359  virtual void visit(T5&) = 0;
360  virtual void visit(T6&) = 0;
361  virtual void visit(T7&) = 0;
362  };
363 
364  //*****************************************************************
368  //*****************************************************************
369  template <typename T1, typename T2, typename T3, typename T4,
370  typename T5, typename T6>
371  class visitor<T1, T2, T3, T4, T5, T6>
372  {
373  public:
374 
375  virtual void visit(T1&) = 0;
376  virtual void visit(T2&) = 0;
377  virtual void visit(T3&) = 0;
378  virtual void visit(T4&) = 0;
379  virtual void visit(T5&) = 0;
380  virtual void visit(T6&) = 0;
381  };
382 
383  //*****************************************************************
387  //*****************************************************************
388  template <typename T1, typename T2, typename T3, typename T4,
389  typename T5>
390  class visitor<T1, T2, T3, T4, T5>
391  {
392  public:
393 
394  virtual void visit(T1&) = 0;
395  virtual void visit(T2&) = 0;
396  virtual void visit(T3&) = 0;
397  virtual void visit(T4&) = 0;
398  virtual void visit(T5&) = 0;
399  };
400 
401  //*****************************************************************
405  //*****************************************************************
406  template <typename T1, typename T2, typename T3, typename T4>
407  class visitor<T1, T2, T3, T4>
408  {
409  public:
410 
411  virtual void visit(T1&) = 0;
412  virtual void visit(T2&) = 0;
413  virtual void visit(T3&) = 0;
414  virtual void visit(T4&) = 0;
415  };
416 
417  //*****************************************************************
421  //*****************************************************************
422  template <typename T1, typename T2, typename T3>
423  class visitor<T1, T2, T3>
424  {
425  public:
426 
427  virtual void visit(T1&) = 0;
428  virtual void visit(T2&) = 0;
429  virtual void visit(T3&) = 0;
430  };
431 
432  //*****************************************************************
436  //*****************************************************************
437  template <typename T1, typename T2>
438  class visitor<T1, T2>
439  {
440  public:
441 
442  virtual void visit(T1&) = 0;
443  virtual void visit(T2&) = 0;
444  };
445 
446  //*****************************************************************
450  //*****************************************************************
451  template <typename T1>
452  class visitor<T1>
453  {
454  public:
455 
456  virtual void visit(T1&) = 0;
457  };
458 }
459 
460 #endif
Definition: visitor.h:116
Definition: algorithm.h:43
Definition: visitor.h:55