]> git.cworth.org Git - vogl/blob - src/extlib/loki/include/loki/Key.h
Initial vogl checkin
[vogl] / src / extlib / loki / include / loki / Key.h
1 ////////////////////////////////////////////////////////////////////////////////
2 // The Loki Library
3 // Copyright (c) 2006 by Guillaume Chatelet
4 //
5 // Code covered by the MIT License
6 //
7 // Permission to use, copy, modify, distribute and sell this software for any
8 // purpose is hereby granted without fee, provided that the above copyright
9 // notice appear in all copies and that both that copyright notice and this
10 // permission notice appear in supporting documentation.
11 //
12 // The authors make no representations about the suitability of this software
13 // for any purpose. It is provided "as is" without express or implied warranty.
14 //
15 // This code DOES NOT accompany the book:
16 // Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design
17 //     Patterns Applied". Copyright (c) 2001. Addison-Wesley.
18 //
19 ////////////////////////////////////////////////////////////////////////////////
20 #ifndef LOKI_KEY_INC_
21 #define LOKI_KEY_INC_
22
23 // $Id: Key.h 771 2006-10-27 18:05:03Z clitte_bbt $
24
25
26 #include <loki/Factory.h>
27
28 namespace Loki
29 {
30
31 template<
32 class Factory,
33       typename IdentifierType
34       >
35 class Key;
36
37 template<class F, typename I>
38 bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
39
40 template<class F, typename I>
41 bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
42
43
44 /**
45  * A Key class
46  */
47 template<
48 class Factory,
49       typename IdentifierType
50       >
51 class Key
52 {
53         typedef typename Factory::Parm1 Parm1;
54         typedef typename Factory::Parm2 Parm2;
55         typedef typename Factory::Parm3 Parm3;
56         typedef typename Factory::Parm4 Parm4;
57         typedef typename Factory::Parm5 Parm5;
58         typedef typename Factory::Parm6 Parm6;
59         typedef typename Factory::Parm7 Parm7;
60         typedef typename Factory::Parm8 Parm8;
61         typedef typename Factory::Parm9 Parm9;
62         typedef typename Factory::Parm10 Parm10;
63         typedef typename Factory::Parm11 Parm11;
64         typedef typename Factory::Parm12 Parm12;
65         typedef typename Factory::Parm13 Parm13;
66         typedef typename Factory::Parm14 Parm14;
67         typedef typename Factory::Parm15 Parm15;
68 public:
69         // member variables
70         int count; // should be const, but constness prevent default copy ctor
71         IdentifierType id;
72         Parm1  p1;
73         Parm2  p2;
74         Parm3  p3;
75         Parm4  p4;
76         Parm5  p5;
77         Parm6  p6;
78         Parm7  p7;
79         Parm8  p8;
80         Parm9  p9;
81         Parm10 p10;
82         Parm11 p11;
83         Parm12 p12;
84         Parm13 p13;
85         Parm14 p14;
86         Parm15 p15;
87
88         // member functions
89         Key() : count(-1)
90         {
91         }
92
93         Key(const IdentifierType &id) : count(0)
94         {
95                 this->id = id;
96         }
97
98         Key(const IdentifierType &id,
99             Parm1 &p1) : count(1)
100         {
101                 this->id = id;
102                 this->p1 = p1;
103         }
104
105         Key(const IdentifierType &id,
106             Parm1 &p1, Parm2 &p2) : count(2)
107         {
108                 this->id = id;
109                 this->p1 = p1;
110                 this->p2 = p2;
111         }
112
113         Key(const IdentifierType &id,
114             Parm1 &p1, Parm2 &p2, Parm3 &p3) : count(3)
115         {
116                 this->id = id;
117                 this->p1 = p1;
118                 this->p2 = p2;
119                 this->p3 = p3;
120         }
121
122         Key(const IdentifierType &id,
123             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4) : count(4)
124         {
125                 this->id = id;
126                 this->p1 = p1;
127                 this->p2 = p2;
128                 this->p3 = p3;
129                 this->p4 = p4;
130         }
131
132         Key(const IdentifierType &id,
133             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5) : count(5)
134         {
135                 this->id = id;
136                 this->p1 = p1;
137                 this->p2 = p2;
138                 this->p3 = p3;
139                 this->p4 = p4;
140                 this->p5 = p5;
141         }
142
143         Key(const IdentifierType &id,
144             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
145             Parm6 &p6) : count(6)
146         {
147                 this->id = id;
148                 this->p1 = p1;
149                 this->p2 = p2;
150                 this->p3 = p3;
151                 this->p4 = p4;
152                 this->p5 = p5;
153                 this->p6 = p6;
154         }
155
156         Key(const IdentifierType &id,
157             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
158             Parm6 &p6, Parm7 &p7 ) : count(7)
159         {
160                 this->id = id;
161                 this->p1 = p1;
162                 this->p2 = p2;
163                 this->p3 = p3;
164                 this->p4 = p4;
165                 this->p5 = p5;
166                 this->p6 = p6;
167                 this->p7 = p7;
168         }
169
170         Key(const IdentifierType &id,
171             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
172             Parm6 &p6, Parm7 &p7, Parm8 &p8) : count(8)
173         {
174                 this->id = id;
175                 this->p1 = p1;
176                 this->p2 = p2;
177                 this->p3 = p3;
178                 this->p4 = p4;
179                 this->p5 = p5;
180                 this->p6 = p6;
181                 this->p7 = p7;
182                 this->p8 = p8;
183         }
184
185         Key(const IdentifierType &id,
186             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
187             Parm6 &p6, Parm7 &p7, Parm8 &p8, Parm9 &p9) : count(9)
188         {
189                 this->id = id;
190                 this->p1 = p1;
191                 this->p2 = p2;
192                 this->p3 = p3;
193                 this->p4 = p4;
194                 this->p5 = p5;
195                 this->p6 = p6;
196                 this->p7 = p7;
197                 this->p8 = p8;
198                 this->p9 = p9;
199         }
200
201         Key(const IdentifierType &id,
202             Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
203             Parm6 &p6, Parm7 &p7, Parm8 &p8, Parm9 &p9,Parm10 &p10) : count(10)
204         {
205                 this->id = id;
206                 this->p1 = p1;
207                 this->p2 = p2;
208                 this->p3 = p3;
209                 this->p4 = p4;
210                 this->p5 = p5;
211                 this->p6 = p6;
212                 this->p7 = p7;
213                 this->p8 = p8;
214                 this->p9 = p9;
215                 this->p10 = p10;
216         }
217
218         Key(const IdentifierType &id,
219             Parm1  &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5  &p5,
220             Parm6  &p6, Parm7 &p7, Parm8 &p8, Parm9 &p9, Parm10 &p10,
221             Parm11 &p11) : count(11)
222         {
223                 this->id = id;
224                 this->p1 = p1;
225                 this->p2 = p2;
226                 this->p3 = p3;
227                 this->p4 = p4;
228                 this->p5 = p5;
229                 this->p6 = p6;
230                 this->p7 = p7;
231                 this->p8 = p8;
232                 this->p9 = p9;
233                 this->p10 = p10;
234                 this->p11 = p11;
235         }
236
237         Key(const IdentifierType &id,
238             Parm1  &p1,  Parm2  &p2, Parm3 &p3, Parm4 &p4, Parm5  &p5,
239             Parm6  &p6,  Parm7  &p7, Parm8 &p8, Parm9 &p9, Parm10 &p10,
240             Parm11 &p11, Parm12 &p12) : count(12)
241         {
242                 this->id = id;
243                 this->p1 = p1;
244                 this->p2 = p2;
245                 this->p3 = p3;
246                 this->p4 = p4;
247                 this->p5 = p5;
248                 this->p6 = p6;
249                 this->p7 = p7;
250                 this->p8 = p8;
251                 this->p9 = p9;
252                 this->p10 = p10;
253                 this->p11 = p11;
254                 this->p12 = p12;
255         }
256
257         Key(const IdentifierType &id,
258             Parm1  &p1,  Parm2  &p2,  Parm3  &p3, Parm4 &p4, Parm5  &p5,
259             Parm6  &p6,  Parm7  &p7,  Parm8  &p8, Parm9 &p9, Parm10 &p10,
260             Parm11 &p11, Parm12 &p12, Parm13 &p13) : count(13)
261         {
262                 this->id = id;
263                 this->p1 = p1;
264                 this->p2 = p2;
265                 this->p3 = p3;
266                 this->p4 = p4;
267                 this->p5 = p5;
268                 this->p6 = p6;
269                 this->p7 = p7;
270                 this->p8 = p8;
271                 this->p9 = p9;
272                 this->p10 = p10;
273                 this->p11 = p11;
274                 this->p12 = p12;
275                 this->p13 = p13;
276         }
277
278         Key(const IdentifierType &id,
279             Parm1  &p1,  Parm2  &p2,  Parm3  &p3,  Parm4  &p4, Parm5  &p5,
280             Parm6  &p6,  Parm7  &p7,  Parm8  &p8,  Parm9  &p9, Parm10 &p10,
281             Parm11 &p11, Parm12 &p12, Parm13 &p13, Parm14 &p14) : count(14)
282         {
283                 this->id = id;
284                 this->p1 = p1;
285                 this->p2 = p2;
286                 this->p3 = p3;
287                 this->p4 = p4;
288                 this->p5 = p5;
289                 this->p6 = p6;
290                 this->p7 = p7;
291                 this->p8 = p8;
292                 this->p9 = p9;
293                 this->p10 = p10;
294                 this->p11 = p11;
295                 this->p12 = p12;
296                 this->p13 = p13;
297                 this->p14 = p14;
298         }
299
300         Key(const IdentifierType &id,
301             Parm1  &p1,  Parm2  &p2,  Parm3  &p3,  Parm4  &p4,  Parm5  &p5,
302             Parm6  &p6,  Parm7  &p7,  Parm8  &p8,  Parm9  &p9,  Parm10 &p10,
303             Parm11 &p11, Parm12 &p12, Parm13 &p13, Parm14 &p14, Parm15 &p15) : count(15)
304         {
305                 this->id = id;
306                 this->p1 = p1;
307                 this->p2 = p2;
308                 this->p3 = p3;
309                 this->p4 = p4;
310                 this->p5 = p5;
311                 this->p6 = p6;
312                 this->p7 = p7;
313                 this->p8 = p8;
314                 this->p9 = p9;
315                 this->p10 = p10;
316                 this->p11 = p11;
317                 this->p12 = p12;
318                 this->p13 = p13;
319                 this->p14 = p14;
320                 this->p15 = p15;
321         }
322
323         template<class F, typename I>
324         friend bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
325
326         template<class F, typename I>
327         friend bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
328 };
329
330
331 template<class F, typename I>
332 bool operator==(const Key<F, I> &k1, const Key<F, I> &k2)
333 {
334         if( k1.count != k2.count )
335                 return false;
336         switch(k1.count)
337         {
338         case -1:
339                 return true;
340         case 0:
341                 if( k1.id == k2.id )
342                         return true;
343                 else
344                         return false;
345         case 1:
346                 if( (k1.id == k2.id) &&
347                         (k1.p1 == k2.p1) )
348                         return true;
349                 else
350                         return false;
351         case 2:
352                 if( (k1.id == k2.id) &&
353                         (k1.p1 == k2.p1) &&
354                         (k1.p2 == k2.p2) )
355                         return true;
356                 else
357                         return false;
358         case 3:
359                 if( (k1.id == k2.id) &&
360                         (k1.p1 == k2.p1) &&
361                         (k1.p2 == k2.p2) &&
362                         (k1.p3 == k2.p3) )
363                         return true;
364                 else
365                         return false;
366         case 4:
367                 if( (k1.id == k2.id) &&
368                         (k1.p1 == k2.p1) &&
369                         (k1.p2 == k2.p2) &&
370                         (k1.p3 == k2.p3) &&
371                         (k1.p4 == k2.p4) )
372                         return true;
373                 else
374                         return false;
375         case 5:
376                 if( (k1.id == k2.id) &&
377                         (k1.p1 == k2.p1) &&
378                         (k1.p2 == k2.p2) &&
379                         (k1.p3 == k2.p3) &&
380                         (k1.p4 == k2.p4) &&
381                         (k1.p5 == k2.p5) )
382                         return true;
383                 else
384                         return false;
385         case 6:
386                 if( (k1.id == k2.id) &&
387                         (k1.p1 == k2.p1) &&
388                         (k1.p2 == k2.p2) &&
389                         (k1.p3 == k2.p3) &&
390                         (k1.p4 == k2.p4) &&
391                         (k1.p5 == k2.p5) &&
392                         (k1.p6 == k2.p6) )
393                         return true;
394                 else
395                         return false;
396         case 7:
397                 if( (k1.id == k2.id) &&
398                         (k1.p1 == k2.p1) &&
399                         (k1.p2 == k2.p2) &&
400                         (k1.p3 == k2.p3) &&
401                         (k1.p4 == k2.p4) &&
402                         (k1.p5 == k2.p5) &&
403                         (k1.p6 == k2.p6) &&
404                         (k1.p7 == k2.p7) )
405                         return true;
406                 else
407                         return false;
408         case 8:
409                 if( (k1.id == k2.id) &&
410                         (k1.p1 == k2.p1) &&
411                         (k1.p2 == k2.p2) &&
412                         (k1.p3 == k2.p3) &&
413                         (k1.p4 == k2.p4) &&
414                         (k1.p5 == k2.p5) &&
415                         (k1.p6 == k2.p6) &&
416                         (k1.p7 == k2.p7) &&
417                         (k1.p8 == k2.p8) )
418                         return true;
419                 else
420                         return false;
421         case 9:
422                 if( (k1.id == k2.id) &&
423                         (k1.p1 == k2.p1) &&
424                         (k1.p2 == k2.p2) &&
425                         (k1.p3 == k2.p3) &&
426                         (k1.p4 == k2.p4) &&
427                         (k1.p5 == k2.p5) &&
428                         (k1.p6 == k2.p6) &&
429                         (k1.p7 == k2.p7) &&
430                         (k1.p8 == k2.p8) &&
431                         (k1.p9 == k2.p9) )
432                         return true;
433                 else
434                         return false;
435         case 10:
436                 if( (k1.id == k2.id) &&
437                         (k1.p1 == k2.p1) &&
438                         (k1.p2 == k2.p2) &&
439                         (k1.p3 == k2.p3) &&
440                         (k1.p4 == k2.p4) &&
441                         (k1.p5 == k2.p5) &&
442                         (k1.p6 == k2.p6) &&
443                         (k1.p7 == k2.p7) &&
444                         (k1.p8 == k2.p8) &&
445                         (k1.p9 == k2.p9) &&
446                         (k1.p10 == k2.p10) )
447                         return true;
448                 else
449                         return false;
450         case 11:
451                 if( (k1.id == k2.id) &&
452                         (k1.p1 == k2.p1) &&
453                         (k1.p2 == k2.p2) &&
454                         (k1.p3 == k2.p3) &&
455                         (k1.p4 == k2.p4) &&
456                         (k1.p5 == k2.p5) &&
457                         (k1.p6 == k2.p6) &&
458                         (k1.p7 == k2.p7) &&
459                         (k1.p8 == k2.p8) &&
460                         (k1.p9 == k2.p9) &&
461                         (k1.p10 == k2.p10) &&
462                         (k1.p11 == k2.p11) )
463                         return true;
464                 else
465                         return false;
466         case 12:
467                 if( (k1.id == k2.id) &&
468                         (k1.p1 == k2.p1) &&
469                         (k1.p2 == k2.p2) &&
470                         (k1.p3 == k2.p3) &&
471                         (k1.p4 == k2.p4) &&
472                         (k1.p5 == k2.p5) &&
473                         (k1.p6 == k2.p6) &&
474                         (k1.p7 == k2.p7) &&
475                         (k1.p8 == k2.p8) &&
476                         (k1.p9 == k2.p9) &&
477                         (k1.p10 == k2.p10) &&
478                         (k1.p11 == k2.p11) &&
479                         (k1.p12 == k2.p12) )
480                         return true;
481                 else
482                         return false;
483         case 13:
484                 if( (k1.id == k2.id) &&
485                         (k1.p1 == k2.p1) &&
486                         (k1.p2 == k2.p2) &&
487                         (k1.p3 == k2.p3) &&
488                         (k1.p4 == k2.p4) &&
489                         (k1.p5 == k2.p5) &&
490                         (k1.p6 == k2.p6) &&
491                         (k1.p7 == k2.p7) &&
492                         (k1.p8 == k2.p8) &&
493                         (k1.p9 == k2.p9) &&
494                         (k1.p10 == k2.p10) &&
495                         (k1.p11 == k2.p11) &&
496                         (k1.p12 == k2.p12) &&
497                         (k1.p13 == k2.p13) )
498                         return true;
499                 else
500                         return false;
501         case 14:
502                 if( (k1.id == k2.id) &&
503                         (k1.p1 == k2.p1) &&
504                         (k1.p2 == k2.p2) &&
505                         (k1.p3 == k2.p3) &&
506                         (k1.p4 == k2.p4) &&
507                         (k1.p5 == k2.p5) &&
508                         (k1.p6 == k2.p6) &&
509                         (k1.p7 == k2.p7) &&
510                         (k1.p8 == k2.p8) &&
511                         (k1.p9 == k2.p9) &&
512                         (k1.p10 == k2.p10) &&
513                         (k1.p11 == k2.p11) &&
514                         (k1.p12 == k2.p12) &&
515                         (k1.p13 == k2.p13) &&
516                         (k1.p14 == k2.p14) )
517                         return true;
518                 else
519                         return false;
520         case 15:
521                 if( (k1.id == k2.id) &&
522                         (k1.p1 == k2.p1) &&
523                         (k1.p2 == k2.p2) &&
524                         (k1.p3 == k2.p3) &&
525                         (k1.p4 == k2.p4) &&
526                         (k1.p5 == k2.p5) &&
527                         (k1.p6 == k2.p6) &&
528                         (k1.p7 == k2.p7) &&
529                         (k1.p8 == k2.p8) &&
530                         (k1.p9 == k2.p9) &&
531                         (k1.p10 == k2.p10) &&
532                         (k1.p11 == k2.p11) &&
533                         (k1.p12 == k2.p12) &&
534                         (k1.p13 == k2.p13) &&
535                         (k1.p14 == k2.p14) &&
536                         (k1.p15 == k2.p15) )
537                         return true;
538                 else
539                         return false;
540         default:
541                 return false;
542         }
543 }
544
545
546
547 template<class F, typename I>
548 bool operator<(const Key<F, I> &k1, const Key<F, I> &k2)
549 {
550         if( k1.count < k2.count )
551                 return true;
552         switch(k1.count)
553         {
554         case -1:
555                 return false;
556         case 0:
557                 if( k1.id < k2.id )
558                         return true;
559                 else
560                         return false;
561         case 1:
562                 if( (k1.id < k2.id) ||
563                         (k1.p1 < k2.p1) )
564                         return true;
565                 else
566                         return false;
567         case 2:
568                 if( (k1.id < k2.id) ||
569                         (k1.p1 < k2.p1) ||
570                         (k1.p2 < k2.p2) )
571                         return true;
572                 else
573                         return false;
574         case 3:
575                 if( (k1.id < k2.id) ||
576                         (k1.p1 < k2.p1) ||
577                         (k1.p2 < k2.p2) ||
578                         (k1.p3 < k2.p3) )
579                         return true;
580                 else
581                         return false;
582         case 4:
583                 if( (k1.id < k2.id) ||
584                         (k1.p1 < k2.p1) ||
585                         (k1.p2 < k2.p2) ||
586                         (k1.p3 < k2.p3) ||
587                         (k1.p4 < k2.p4) )
588                         return true;
589                 else
590                         return false;
591         case 5:
592                 if( (k1.id < k2.id) ||
593                         (k1.p1 < k2.p1) ||
594                         (k1.p2 < k2.p2) ||
595                         (k1.p3 < k2.p3) ||
596                         (k1.p4 < k2.p4) ||
597                         (k1.p5 < k2.p5) )
598                         return true;
599                 else
600                         return false;
601         case 6:
602                 if( (k1.id < k2.id) ||
603                         (k1.p1 < k2.p1) ||
604                         (k1.p2 < k2.p2) ||
605                         (k1.p3 < k2.p3) ||
606                         (k1.p4 < k2.p4) ||
607                         (k1.p5 < k2.p5) ||
608                         (k1.p6 < k2.p6) )
609                         return true;
610                 else
611                         return false;
612         case 7:
613                 if( (k1.id < k2.id) ||
614                         (k1.p1 < k2.p1) ||
615                         (k1.p2 < k2.p2) ||
616                         (k1.p3 < k2.p3) ||
617                         (k1.p4 < k2.p4) ||
618                         (k1.p5 < k2.p5) ||
619                         (k1.p6 < k2.p6) ||
620                         (k1.p7 < k2.p7) )
621                         return true;
622                 else
623                         return false;
624         case 8:
625                 if( (k1.id < k2.id) ||
626                         (k1.p1 < k2.p1) ||
627                         (k1.p2 < k2.p2) ||
628                         (k1.p3 < k2.p3) ||
629                         (k1.p4 < k2.p4) ||
630                         (k1.p5 < k2.p5) ||
631                         (k1.p6 < k2.p6) ||
632                         (k1.p7 < k2.p7) ||
633                         (k1.p8 < k2.p8) )
634                         return true;
635                 else
636                         return false;
637         case 9:
638                 if( (k1.id < k2.id) ||
639                         (k1.p1 < k2.p1) ||
640                         (k1.p2 < k2.p2) ||
641                         (k1.p3 < k2.p3) ||
642                         (k1.p4 < k2.p4) ||
643                         (k1.p5 < k2.p5) ||
644                         (k1.p6 < k2.p6) ||
645                         (k1.p7 < k2.p7) ||
646                         (k1.p8 < k2.p8) ||
647                         (k1.p9 < k2.p9) )
648                         return true;
649                 else
650                         return false;
651         case 10:
652                 if( (k1.id < k2.id) ||
653                         (k1.p1 < k2.p1) ||
654                         (k1.p2 < k2.p2) ||
655                         (k1.p3 < k2.p3) ||
656                         (k1.p4 < k2.p4) ||
657                         (k1.p5 < k2.p5) ||
658                         (k1.p6 < k2.p6) ||
659                         (k1.p7 < k2.p7) ||
660                         (k1.p8 < k2.p8) ||
661                         (k1.p9 < k2.p9) ||
662                         (k1.p10 < k2.p10) )
663                         return true;
664                 else
665                         return false;
666         case 11:
667                 if( (k1.id < k2.id) ||
668                         (k1.p1 < k2.p1) ||
669                         (k1.p2 < k2.p2) ||
670                         (k1.p3 < k2.p3) ||
671                         (k1.p4 < k2.p4) ||
672                         (k1.p5 < k2.p5) ||
673                         (k1.p6 < k2.p6) ||
674                         (k1.p7 < k2.p7) ||
675                         (k1.p8 < k2.p8) ||
676                         (k1.p9 < k2.p9) ||
677                         (k1.p10 < k2.p10) ||
678                         (k1.p11 < k2.p11) )
679                         return true;
680                 else
681                         return false;
682         case 12:
683                 if( (k1.id < k2.id) ||
684                         (k1.p1 < k2.p1) ||
685                         (k1.p2 < k2.p2) ||
686                         (k1.p3 < k2.p3) ||
687                         (k1.p4 < k2.p4) ||
688                         (k1.p5 < k2.p5) ||
689                         (k1.p6 < k2.p6) ||
690                         (k1.p7 < k2.p7) ||
691                         (k1.p8 < k2.p8) ||
692                         (k1.p9 < k2.p9) ||
693                         (k1.p10 < k2.p10) ||
694                         (k1.p11 < k2.p11) ||
695                         (k1.p12 < k2.p12) )
696                         return true;
697                 else
698                         return false;
699         case 13:
700                 if( (k1.id < k2.id) ||
701                         (k1.p1 < k2.p1) ||
702                         (k1.p2 < k2.p2) ||
703                         (k1.p3 < k2.p3) ||
704                         (k1.p4 < k2.p4) ||
705                         (k1.p5 < k2.p5) ||
706                         (k1.p6 < k2.p6) ||
707                         (k1.p7 < k2.p7) ||
708                         (k1.p8 < k2.p8) ||
709                         (k1.p9 < k2.p9) ||
710                         (k1.p10 < k2.p10) ||
711                         (k1.p11 < k2.p11) ||
712                         (k1.p12 < k2.p12) ||
713                         (k1.p13 < k2.p13) )
714                         return true;
715                 else
716                         return false;
717         case 14:
718                 if( (k1.id < k2.id) ||
719                         (k1.p1 < k2.p1) ||
720                         (k1.p2 < k2.p2) ||
721                         (k1.p3 < k2.p3) ||
722                         (k1.p4 < k2.p4) ||
723                         (k1.p5 < k2.p5) ||
724                         (k1.p6 < k2.p6) ||
725                         (k1.p7 < k2.p7) ||
726                         (k1.p8 < k2.p8) ||
727                         (k1.p9 < k2.p9) ||
728                         (k1.p10 < k2.p10) ||
729                         (k1.p11 < k2.p11) ||
730                         (k1.p12 < k2.p12) ||
731                         (k1.p13 < k2.p13) ||
732                         (k1.p14 < k2.p14) )
733                         return true;
734                 else
735                         return false;
736         case 15:
737                 if( (k1.id < k2.id) ||
738                         (k1.p1 < k2.p1) ||
739                         (k1.p2 < k2.p2) ||
740                         (k1.p3 < k2.p3) ||
741                         (k1.p4 < k2.p4) ||
742                         (k1.p5 < k2.p5) ||
743                         (k1.p6 < k2.p6) ||
744                         (k1.p7 < k2.p7) ||
745                         (k1.p8 < k2.p8) ||
746                         (k1.p9 < k2.p9) ||
747                         (k1.p10 < k2.p10) ||
748                         (k1.p11 < k2.p11) ||
749                         (k1.p12 < k2.p12) ||
750                         (k1.p13 < k2.p13) ||
751                         (k1.p14 < k2.p14) ||
752                         (k1.p15 < k2.p15) )
753                         return true;
754                 else
755                         return false;
756         default:
757                 return false;
758         }
759 }
760
761
762
763 } // namespace Loki
764
765 #endif // end file guardian
766