1 ////////////////////////////////////////////////////////////////////////////////
3 // Copyright (c) 2006 by Guillaume Chatelet
5 // Code covered by the MIT License
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.
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.
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.
19 ////////////////////////////////////////////////////////////////////////////////
23 // $Id: Key.h 771 2006-10-27 18:05:03Z clitte_bbt $
26 #include <loki/Factory.h>
33 typename IdentifierType
37 template<class F, typename I>
38 bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
40 template<class F, typename I>
41 bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
49 typename IdentifierType
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;
70 int count; // should be const, but constness prevent default copy ctor
93 Key(const IdentifierType &id) : count(0)
98 Key(const IdentifierType &id,
105 Key(const IdentifierType &id,
106 Parm1 &p1, Parm2 &p2) : count(2)
113 Key(const IdentifierType &id,
114 Parm1 &p1, Parm2 &p2, Parm3 &p3) : count(3)
122 Key(const IdentifierType &id,
123 Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4) : count(4)
132 Key(const IdentifierType &id,
133 Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5) : count(5)
143 Key(const IdentifierType &id,
144 Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
145 Parm6 &p6) : count(6)
156 Key(const IdentifierType &id,
157 Parm1 &p1, Parm2 &p2, Parm3 &p3, Parm4 &p4, Parm5 &p5,
158 Parm6 &p6, Parm7 &p7 ) : count(7)
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)
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)
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)
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)
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)
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)
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)
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)
323 template<class F, typename I>
324 friend bool operator==(const Key<F, I> &k1, const Key<F, I> &k2);
326 template<class F, typename I>
327 friend bool operator<(const Key<F, I> &k1, const Key<F, I> &k2);
331 template<class F, typename I>
332 bool operator==(const Key<F, I> &k1, const Key<F, I> &k2)
334 if( k1.count != k2.count )
346 if( (k1.id == k2.id) &&
352 if( (k1.id == k2.id) &&
359 if( (k1.id == k2.id) &&
367 if( (k1.id == k2.id) &&
376 if( (k1.id == k2.id) &&
386 if( (k1.id == k2.id) &&
397 if( (k1.id == k2.id) &&
409 if( (k1.id == k2.id) &&
422 if( (k1.id == k2.id) &&
436 if( (k1.id == k2.id) &&
451 if( (k1.id == k2.id) &&
461 (k1.p10 == k2.p10) &&
467 if( (k1.id == k2.id) &&
477 (k1.p10 == k2.p10) &&
478 (k1.p11 == k2.p11) &&
484 if( (k1.id == k2.id) &&
494 (k1.p10 == k2.p10) &&
495 (k1.p11 == k2.p11) &&
496 (k1.p12 == k2.p12) &&
502 if( (k1.id == k2.id) &&
512 (k1.p10 == k2.p10) &&
513 (k1.p11 == k2.p11) &&
514 (k1.p12 == k2.p12) &&
515 (k1.p13 == k2.p13) &&
521 if( (k1.id == k2.id) &&
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) &&
547 template<class F, typename I>
548 bool operator<(const Key<F, I> &k1, const Key<F, I> &k2)
550 if( k1.count < k2.count )
562 if( (k1.id < k2.id) ||
568 if( (k1.id < k2.id) ||
575 if( (k1.id < k2.id) ||
583 if( (k1.id < k2.id) ||
592 if( (k1.id < k2.id) ||
602 if( (k1.id < k2.id) ||
613 if( (k1.id < k2.id) ||
625 if( (k1.id < k2.id) ||
638 if( (k1.id < k2.id) ||
652 if( (k1.id < k2.id) ||
667 if( (k1.id < k2.id) ||
683 if( (k1.id < k2.id) ||
700 if( (k1.id < k2.id) ||
718 if( (k1.id < k2.id) ||
737 if( (k1.id < k2.id) ||
765 #endif // end file guardian