OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 { | 418 { |
419 iterator it = find(key); | 419 iterator it = find(key); |
420 if (it == end()) | 420 if (it == end()) |
421 return MappedTraits::passOut(MappedTraits::emptyValue()); | 421 return MappedTraits::passOut(MappedTraits::emptyValue()); |
422 MappedPassOutType result = MappedTraits::passOut(it->value); | 422 MappedPassOutType result = MappedTraits::passOut(it->value); |
423 remove(it); | 423 remove(it); |
424 return result; | 424 return result; |
425 } | 425 } |
426 | 426 |
427 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y> | 427 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y> |
428 inline bool HashMap<T, U, V, W, X, Y>::isValidKey(KeyPeekInType key) | 428 bool HashMap<T, U, V, W, X, Y>::isValidKey(KeyPeekInType key) |
429 { | 429 { |
430 if (KeyTraits::isDeletedValue(key)) | 430 if (KeyTraits::isDeletedValue(key)) |
431 return false; | 431 return false; |
432 | 432 |
433 if (HashFunctions::safeToCompareToEmptyOrDeleted) { | 433 if (HashFunctions::safeToCompareToEmptyOrDeleted) { |
434 if (key == KeyTraits::emptyValue()) | 434 if (key == KeyTraits::emptyValue()) |
435 return false; | 435 return false; |
436 } else { | 436 } else { |
437 if (isHashTraitsEmptyValue<KeyTraits>(key)) | 437 if (isHashTraitsEmptyValue<KeyTraits>(key)) |
438 return false; | 438 return false; |
(...skipping 21 matching lines...) Expand all Loading... |
460 return true; | 460 return true; |
461 } | 461 } |
462 | 462 |
463 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y> | 463 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y> |
464 inline bool operator!=(const HashMap<T, U, V, W, X, Y>& a, const HashMap<T,
U, V, W, X, Y>& b) | 464 inline bool operator!=(const HashMap<T, U, V, W, X, Y>& a, const HashMap<T,
U, V, W, X, Y>& b) |
465 { | 465 { |
466 return !(a == b); | 466 return !(a == b); |
467 } | 467 } |
468 | 468 |
469 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y, typename Z> | 469 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y, typename Z> |
470 inline void copyKeysToVector(const HashMap<T, U, V, W, X, Y>& collection, Z&
vector) | 470 void copyKeysToVector(const HashMap<T, U, V, W, X, Y>& collection, Z& vector
) |
471 { | 471 { |
472 typedef typename HashMap<T, U, V, W, X, Y>::const_iterator::Keys iterato
r; | 472 typedef typename HashMap<T, U, V, W, X, Y>::const_iterator::Keys iterato
r; |
473 | 473 |
474 vector.resize(collection.size()); | 474 vector.resize(collection.size()); |
475 | 475 |
476 iterator it = collection.begin().keys(); | 476 iterator it = collection.begin().keys(); |
477 iterator end = collection.end().keys(); | 477 iterator end = collection.end().keys(); |
478 for (unsigned i = 0; it != end; ++it, ++i) | 478 for (unsigned i = 0; it != end; ++it, ++i) |
479 vector[i] = *it; | 479 vector[i] = *it; |
480 } | 480 } |
481 | 481 |
482 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y, typename Z> | 482 template<typename T, typename U, typename V, typename W, typename X, typenam
e Y, typename Z> |
483 inline void copyValuesToVector(const HashMap<T, U, V, W, X, Y>& collection,
Z& vector) | 483 void copyValuesToVector(const HashMap<T, U, V, W, X, Y>& collection, Z& vect
or) |
484 { | 484 { |
485 typedef typename HashMap<T, U, V, W, X, Y>::const_iterator::Values itera
tor; | 485 typedef typename HashMap<T, U, V, W, X, Y>::const_iterator::Values itera
tor; |
486 | 486 |
487 vector.resize(collection.size()); | 487 vector.resize(collection.size()); |
488 | 488 |
489 iterator it = collection.begin().values(); | 489 iterator it = collection.begin().values(); |
490 iterator end = collection.end().values(); | 490 iterator end = collection.end().values(); |
491 for (unsigned i = 0; it != end; ++it, ++i) | 491 for (unsigned i = 0; it != end; ++it, ++i) |
492 vector[i] = *it; | 492 vector[i] = *it; |
493 } | 493 } |
494 | 494 |
495 #if !ENABLE(OILPAN) | 495 #if !ENABLE(OILPAN) |
496 template<typename T, typename U, typename V, typename W, typename X> | 496 template<typename T, typename U, typename V, typename W, typename X> |
497 struct NeedsTracing<HashMap<T, U, V, W, X> > { | 497 struct NeedsTracing<HashMap<T, U, V, W, X> > { |
498 static const bool value = false; | 498 static const bool value = false; |
499 }; | 499 }; |
500 #endif | 500 #endif |
501 | 501 |
502 } // namespace WTF | 502 } // namespace WTF |
503 | 503 |
504 using WTF::HashMap; | 504 using WTF::HashMap; |
505 | 505 |
506 #endif /* WTF_HashMap_h */ | 506 #endif /* WTF_HashMap_h */ |
OLD | NEW |