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 Key()89 Key() : count(-1) 90 { 91 } 92 Key(const IdentifierType & id)93 Key(const IdentifierType& id) : count(0) 94 { 95 this->id = id; 96 } 97 Key(const IdentifierType & id,Parm1 & p1)98 Key(const IdentifierType& id, 99 Parm1 &p1) : count(1) 100 { 101 this->id = id; 102 this->p1 = p1; 103 } 104 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10,Parm11 & p11)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10,Parm11 & p11,Parm12 & p12)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10,Parm11 & p11,Parm12 & p12,Parm13 & p13)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10,Parm11 & p11,Parm12 & p12,Parm13 & p13,Parm14 & p14)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 Key(const IdentifierType & id,Parm1 & p1,Parm2 & p2,Parm3 & p3,Parm4 & p4,Parm5 & p5,Parm6 & p6,Parm7 & p7,Parm8 & p8,Parm9 & p9,Parm10 & p10,Parm11 & p11,Parm12 & p12,Parm13 & p13,Parm14 & p14,Parm15 & p15)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 case -1: 338 return true; 339 case 0: 340 if( k1.id == k2.id ) 341 return true; 342 else 343 return false; 344 case 1: 345 if( (k1.id == k2.id) && 346 (k1.p1 == k2.p1) ) 347 return true; 348 else 349 return false; 350 case 2: 351 if( (k1.id == k2.id) && 352 (k1.p1 == k2.p1) && 353 (k1.p2 == k2.p2) ) 354 return true; 355 else 356 return false; 357 case 3: 358 if( (k1.id == k2.id) && 359 (k1.p1 == k2.p1) && 360 (k1.p2 == k2.p2) && 361 (k1.p3 == k2.p3) ) 362 return true; 363 else 364 return false; 365 case 4: 366 if( (k1.id == k2.id) && 367 (k1.p1 == k2.p1) && 368 (k1.p2 == k2.p2) && 369 (k1.p3 == k2.p3) && 370 (k1.p4 == k2.p4) ) 371 return true; 372 else 373 return false; 374 case 5: 375 if( (k1.id == k2.id) && 376 (k1.p1 == k2.p1) && 377 (k1.p2 == k2.p2) && 378 (k1.p3 == k2.p3) && 379 (k1.p4 == k2.p4) && 380 (k1.p5 == k2.p5) ) 381 return true; 382 else 383 return false; 384 case 6: 385 if( (k1.id == k2.id) && 386 (k1.p1 == k2.p1) && 387 (k1.p2 == k2.p2) && 388 (k1.p3 == k2.p3) && 389 (k1.p4 == k2.p4) && 390 (k1.p5 == k2.p5) && 391 (k1.p6 == k2.p6) ) 392 return true; 393 else 394 return false; 395 case 7: 396 if( (k1.id == k2.id) && 397 (k1.p1 == k2.p1) && 398 (k1.p2 == k2.p2) && 399 (k1.p3 == k2.p3) && 400 (k1.p4 == k2.p4) && 401 (k1.p5 == k2.p5) && 402 (k1.p6 == k2.p6) && 403 (k1.p7 == k2.p7) ) 404 return true; 405 else 406 return false; 407 case 8: 408 if( (k1.id == k2.id) && 409 (k1.p1 == k2.p1) && 410 (k1.p2 == k2.p2) && 411 (k1.p3 == k2.p3) && 412 (k1.p4 == k2.p4) && 413 (k1.p5 == k2.p5) && 414 (k1.p6 == k2.p6) && 415 (k1.p7 == k2.p7) && 416 (k1.p8 == k2.p8) ) 417 return true; 418 else 419 return false; 420 case 9: 421 if( (k1.id == k2.id) && 422 (k1.p1 == k2.p1) && 423 (k1.p2 == k2.p2) && 424 (k1.p3 == k2.p3) && 425 (k1.p4 == k2.p4) && 426 (k1.p5 == k2.p5) && 427 (k1.p6 == k2.p6) && 428 (k1.p7 == k2.p7) && 429 (k1.p8 == k2.p8) && 430 (k1.p9 == k2.p9) ) 431 return true; 432 else 433 return false; 434 case 10: 435 if( (k1.id == k2.id) && 436 (k1.p1 == k2.p1) && 437 (k1.p2 == k2.p2) && 438 (k1.p3 == k2.p3) && 439 (k1.p4 == k2.p4) && 440 (k1.p5 == k2.p5) && 441 (k1.p6 == k2.p6) && 442 (k1.p7 == k2.p7) && 443 (k1.p8 == k2.p8) && 444 (k1.p9 == k2.p9) && 445 (k1.p10 == k2.p10) ) 446 return true; 447 else 448 return false; 449 case 11: 450 if( (k1.id == k2.id) && 451 (k1.p1 == k2.p1) && 452 (k1.p2 == k2.p2) && 453 (k1.p3 == k2.p3) && 454 (k1.p4 == k2.p4) && 455 (k1.p5 == k2.p5) && 456 (k1.p6 == k2.p6) && 457 (k1.p7 == k2.p7) && 458 (k1.p8 == k2.p8) && 459 (k1.p9 == k2.p9) && 460 (k1.p10 == k2.p10) && 461 (k1.p11 == k2.p11) ) 462 return true; 463 else 464 return false; 465 case 12: 466 if( (k1.id == k2.id) && 467 (k1.p1 == k2.p1) && 468 (k1.p2 == k2.p2) && 469 (k1.p3 == k2.p3) && 470 (k1.p4 == k2.p4) && 471 (k1.p5 == k2.p5) && 472 (k1.p6 == k2.p6) && 473 (k1.p7 == k2.p7) && 474 (k1.p8 == k2.p8) && 475 (k1.p9 == k2.p9) && 476 (k1.p10 == k2.p10) && 477 (k1.p11 == k2.p11) && 478 (k1.p12 == k2.p12) ) 479 return true; 480 else 481 return false; 482 case 13: 483 if( (k1.id == k2.id) && 484 (k1.p1 == k2.p1) && 485 (k1.p2 == k2.p2) && 486 (k1.p3 == k2.p3) && 487 (k1.p4 == k2.p4) && 488 (k1.p5 == k2.p5) && 489 (k1.p6 == k2.p6) && 490 (k1.p7 == k2.p7) && 491 (k1.p8 == k2.p8) && 492 (k1.p9 == k2.p9) && 493 (k1.p10 == k2.p10) && 494 (k1.p11 == k2.p11) && 495 (k1.p12 == k2.p12) && 496 (k1.p13 == k2.p13) ) 497 return true; 498 else 499 return false; 500 case 14: 501 if( (k1.id == k2.id) && 502 (k1.p1 == k2.p1) && 503 (k1.p2 == k2.p2) && 504 (k1.p3 == k2.p3) && 505 (k1.p4 == k2.p4) && 506 (k1.p5 == k2.p5) && 507 (k1.p6 == k2.p6) && 508 (k1.p7 == k2.p7) && 509 (k1.p8 == k2.p8) && 510 (k1.p9 == k2.p9) && 511 (k1.p10 == k2.p10) && 512 (k1.p11 == k2.p11) && 513 (k1.p12 == k2.p12) && 514 (k1.p13 == k2.p13) && 515 (k1.p14 == k2.p14) ) 516 return true; 517 else 518 return false; 519 case 15: 520 if( (k1.id == k2.id) && 521 (k1.p1 == k2.p1) && 522 (k1.p2 == k2.p2) && 523 (k1.p3 == k2.p3) && 524 (k1.p4 == k2.p4) && 525 (k1.p5 == k2.p5) && 526 (k1.p6 == k2.p6) && 527 (k1.p7 == k2.p7) && 528 (k1.p8 == k2.p8) && 529 (k1.p9 == k2.p9) && 530 (k1.p10 == k2.p10) && 531 (k1.p11 == k2.p11) && 532 (k1.p12 == k2.p12) && 533 (k1.p13 == k2.p13) && 534 (k1.p14 == k2.p14) && 535 (k1.p15 == k2.p15) ) 536 return true; 537 else 538 return false; 539 default: 540 return false; 541 } 542 } 543 544 545 546 template<class F, typename I> 547 bool operator<(const Key<F, I> &k1, const Key<F, I> &k2) 548 { 549 if( k1.count < k2.count ) 550 return true; 551 switch(k1.count){ 552 case -1: 553 return false; 554 case 0: 555 if( k1.id < k2.id ) 556 return true; 557 else 558 return false; 559 case 1: 560 if( (k1.id < k2.id) || 561 (k1.p1 < k2.p1) ) 562 return true; 563 else 564 return false; 565 case 2: 566 if( (k1.id < k2.id) || 567 (k1.p1 < k2.p1) || 568 (k1.p2 < k2.p2) ) 569 return true; 570 else 571 return false; 572 case 3: 573 if( (k1.id < k2.id) || 574 (k1.p1 < k2.p1) || 575 (k1.p2 < k2.p2) || 576 (k1.p3 < k2.p3) ) 577 return true; 578 else 579 return false; 580 case 4: 581 if( (k1.id < k2.id) || 582 (k1.p1 < k2.p1) || 583 (k1.p2 < k2.p2) || 584 (k1.p3 < k2.p3) || 585 (k1.p4 < k2.p4) ) 586 return true; 587 else 588 return false; 589 case 5: 590 if( (k1.id < k2.id) || 591 (k1.p1 < k2.p1) || 592 (k1.p2 < k2.p2) || 593 (k1.p3 < k2.p3) || 594 (k1.p4 < k2.p4) || 595 (k1.p5 < k2.p5) ) 596 return true; 597 else 598 return false; 599 case 6: 600 if( (k1.id < k2.id) || 601 (k1.p1 < k2.p1) || 602 (k1.p2 < k2.p2) || 603 (k1.p3 < k2.p3) || 604 (k1.p4 < k2.p4) || 605 (k1.p5 < k2.p5) || 606 (k1.p6 < k2.p6) ) 607 return true; 608 else 609 return false; 610 case 7: 611 if( (k1.id < k2.id) || 612 (k1.p1 < k2.p1) || 613 (k1.p2 < k2.p2) || 614 (k1.p3 < k2.p3) || 615 (k1.p4 < k2.p4) || 616 (k1.p5 < k2.p5) || 617 (k1.p6 < k2.p6) || 618 (k1.p7 < k2.p7) ) 619 return true; 620 else 621 return false; 622 case 8: 623 if( (k1.id < k2.id) || 624 (k1.p1 < k2.p1) || 625 (k1.p2 < k2.p2) || 626 (k1.p3 < k2.p3) || 627 (k1.p4 < k2.p4) || 628 (k1.p5 < k2.p5) || 629 (k1.p6 < k2.p6) || 630 (k1.p7 < k2.p7) || 631 (k1.p8 < k2.p8) ) 632 return true; 633 else 634 return false; 635 case 9: 636 if( (k1.id < k2.id) || 637 (k1.p1 < k2.p1) || 638 (k1.p2 < k2.p2) || 639 (k1.p3 < k2.p3) || 640 (k1.p4 < k2.p4) || 641 (k1.p5 < k2.p5) || 642 (k1.p6 < k2.p6) || 643 (k1.p7 < k2.p7) || 644 (k1.p8 < k2.p8) || 645 (k1.p9 < k2.p9) ) 646 return true; 647 else 648 return false; 649 case 10: 650 if( (k1.id < k2.id) || 651 (k1.p1 < k2.p1) || 652 (k1.p2 < k2.p2) || 653 (k1.p3 < k2.p3) || 654 (k1.p4 < k2.p4) || 655 (k1.p5 < k2.p5) || 656 (k1.p6 < k2.p6) || 657 (k1.p7 < k2.p7) || 658 (k1.p8 < k2.p8) || 659 (k1.p9 < k2.p9) || 660 (k1.p10 < k2.p10) ) 661 return true; 662 else 663 return false; 664 case 11: 665 if( (k1.id < k2.id) || 666 (k1.p1 < k2.p1) || 667 (k1.p2 < k2.p2) || 668 (k1.p3 < k2.p3) || 669 (k1.p4 < k2.p4) || 670 (k1.p5 < k2.p5) || 671 (k1.p6 < k2.p6) || 672 (k1.p7 < k2.p7) || 673 (k1.p8 < k2.p8) || 674 (k1.p9 < k2.p9) || 675 (k1.p10 < k2.p10) || 676 (k1.p11 < k2.p11) ) 677 return true; 678 else 679 return false; 680 case 12: 681 if( (k1.id < k2.id) || 682 (k1.p1 < k2.p1) || 683 (k1.p2 < k2.p2) || 684 (k1.p3 < k2.p3) || 685 (k1.p4 < k2.p4) || 686 (k1.p5 < k2.p5) || 687 (k1.p6 < k2.p6) || 688 (k1.p7 < k2.p7) || 689 (k1.p8 < k2.p8) || 690 (k1.p9 < k2.p9) || 691 (k1.p10 < k2.p10) || 692 (k1.p11 < k2.p11) || 693 (k1.p12 < k2.p12) ) 694 return true; 695 else 696 return false; 697 case 13: 698 if( (k1.id < k2.id) || 699 (k1.p1 < k2.p1) || 700 (k1.p2 < k2.p2) || 701 (k1.p3 < k2.p3) || 702 (k1.p4 < k2.p4) || 703 (k1.p5 < k2.p5) || 704 (k1.p6 < k2.p6) || 705 (k1.p7 < k2.p7) || 706 (k1.p8 < k2.p8) || 707 (k1.p9 < k2.p9) || 708 (k1.p10 < k2.p10) || 709 (k1.p11 < k2.p11) || 710 (k1.p12 < k2.p12) || 711 (k1.p13 < k2.p13) ) 712 return true; 713 else 714 return false; 715 case 14: 716 if( (k1.id < k2.id) || 717 (k1.p1 < k2.p1) || 718 (k1.p2 < k2.p2) || 719 (k1.p3 < k2.p3) || 720 (k1.p4 < k2.p4) || 721 (k1.p5 < k2.p5) || 722 (k1.p6 < k2.p6) || 723 (k1.p7 < k2.p7) || 724 (k1.p8 < k2.p8) || 725 (k1.p9 < k2.p9) || 726 (k1.p10 < k2.p10) || 727 (k1.p11 < k2.p11) || 728 (k1.p12 < k2.p12) || 729 (k1.p13 < k2.p13) || 730 (k1.p14 < k2.p14) ) 731 return true; 732 else 733 return false; 734 case 15: 735 if( (k1.id < k2.id) || 736 (k1.p1 < k2.p1) || 737 (k1.p2 < k2.p2) || 738 (k1.p3 < k2.p3) || 739 (k1.p4 < k2.p4) || 740 (k1.p5 < k2.p5) || 741 (k1.p6 < k2.p6) || 742 (k1.p7 < k2.p7) || 743 (k1.p8 < k2.p8) || 744 (k1.p9 < k2.p9) || 745 (k1.p10 < k2.p10) || 746 (k1.p11 < k2.p11) || 747 (k1.p12 < k2.p12) || 748 (k1.p13 < k2.p13) || 749 (k1.p14 < k2.p14) || 750 (k1.p15 < k2.p15) ) 751 return true; 752 else 753 return false; 754 default: 755 return false; 756 } 757 } 758 759 760 761 } // namespace Loki 762 763 #endif // end file guardian 764 765