OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 | 619 |
620 template< | 620 template< |
621 typename ValueArg, | 621 typename ValueArg, |
622 typename HashFunctions = typename DefaultHash<ValueArg>::Hash, | 622 typename HashFunctions = typename DefaultHash<ValueArg>::Hash, |
623 typename Traits = HashTraits<ValueArg>> | 623 typename Traits = HashTraits<ValueArg>> |
624 class PersistentHeapHashCountedSet : public PersistentHeapCollectionBase<HeapHas
hCountedSet<ValueArg, HashFunctions, Traits>> { }; | 624 class PersistentHeapHashCountedSet : public PersistentHeapCollectionBase<HeapHas
hCountedSet<ValueArg, HashFunctions, Traits>> { }; |
625 | 625 |
626 template<typename T, size_t inlineCapacity = 0> | 626 template<typename T, size_t inlineCapacity = 0> |
627 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i
nlineCapacity>> { | 627 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i
nlineCapacity>> { |
628 public: | 628 public: |
629 PersistentHeapVector() { } | 629 PersistentHeapVector() |
| 630 { |
| 631 initializeUnusedSlots(); |
| 632 } |
630 | 633 |
631 explicit PersistentHeapVector(size_t size) | 634 explicit PersistentHeapVector(size_t size) |
632 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(size) | 635 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(size) |
633 { | 636 { |
| 637 initializeUnusedSlots(); |
| 638 } |
| 639 |
| 640 PersistentHeapVector(const PersistentHeapVector& other) |
| 641 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(other) |
| 642 { |
| 643 initializeUnusedSlots(); |
634 } | 644 } |
635 | 645 |
636 template<size_t otherCapacity> | 646 template<size_t otherCapacity> |
637 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) | 647 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) |
638 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(other) | 648 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(other) |
639 { | 649 { |
| 650 initializeUnusedSlots(); |
| 651 } |
| 652 |
| 653 private: |
| 654 void initializeUnusedSlots() |
| 655 { |
| 656 // The PersistentHeapVector is allocated off heap along with its |
| 657 // inline buffer (if any.) Maintain the invariant that unused |
| 658 // slots are cleared for the off-heap inline buffer also. |
| 659 size_t unusedSlots = this->capacity() - this->size(); |
| 660 if (unusedSlots) |
| 661 this->clearUnusedSlots(this->end(), this->end() + unusedSlots); |
640 } | 662 } |
641 }; | 663 }; |
642 | 664 |
643 template<typename T, size_t inlineCapacity = 0> | 665 template<typename T, size_t inlineCapacity = 0> |
644 class PersistentHeapDeque : public PersistentHeapCollectionBase<HeapDeque<T, inl
ineCapacity>> { | 666 class PersistentHeapDeque : public PersistentHeapCollectionBase<HeapDeque<T, inl
ineCapacity>> { |
645 public: | 667 public: |
646 PersistentHeapDeque() { } | 668 PersistentHeapDeque() { } |
647 | 669 |
648 template<size_t otherCapacity> | 670 template<size_t otherCapacity> |
649 PersistentHeapDeque(const HeapDeque<T, otherCapacity>& other) | 671 PersistentHeapDeque(const HeapDeque<T, otherCapacity>& other) |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1496 // TODO(sof): extend WTF::FunctionWrapper call overloading to also handle (C
rossThread)WeakPersistent. | 1518 // TODO(sof): extend WTF::FunctionWrapper call overloading to also handle (C
rossThread)WeakPersistent. |
1497 static T* unwrap(const StorageType& value) { return value.get(); } | 1519 static T* unwrap(const StorageType& value) { return value.get(); } |
1498 }; | 1520 }; |
1499 | 1521 |
1500 template<typename T> | 1522 template<typename T> |
1501 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; | 1523 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; |
1502 | 1524 |
1503 } // namespace WTF | 1525 } // namespace WTF |
1504 | 1526 |
1505 #endif | 1527 #endif |
OLD | NEW |