Changeset 157074 in webkit


Ignore:
Timestamp:
Oct 7, 2013 6:28:18 PM (11 years ago)
Author:
Darin Adler
Message:

Make Vector::insert work for move-only types
https://bugs.webkit.org/show_bug.cgi?id=122429

Reviewed by Anders Carlsson.

Source/WebCore:

  • history/HistoryItem.cpp:

(WebCore::HistoryItem::padDailyCountsForNewVisit): Call insertVector.
Also added some inline capacity, which should make this faster.

Source/WTF:

  • wtf/Vector.h:

(WTF::Vector::insert): Take an rvalue reference instead of a const reference.
(WTF::Vector::insertVector): Renamed to avoid overloading troubles, analogous
to what we did for appendVector.

Location:
trunk/Source
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r157066 r157074  
     12013-10-07  Darin Adler  <darin@apple.com>
     2
     3        Make Vector::insert work for move-only types
     4        https://bugs.webkit.org/show_bug.cgi?id=122429
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * wtf/Vector.h:
     9        (WTF::Vector::insert): Take an rvalue reference instead of a const reference.
     10        (WTF::Vector::insertVector): Renamed to avoid overloading troubles, analogous
     11        to what we did for appendVector.
     12
    1132013-10-07  Anders Carlsson  <andersca@apple.com>
    214
  • trunk/Source/WTF/wtf/Vector.h

    r156967 r157074  
    645645
    646646    template<typename U> void insert(size_t position, const U*, size_t);
    647     template<typename U> void insert(size_t position, const U&);
    648     template<typename U, size_t c> void insert(size_t position, const Vector<U, c>&);
     647    template<typename U> void insert(size_t position, U&&);
     648    template<typename U, size_t c> void insertVector(size_t position, const Vector<U, c>&);
    649649
    650650    void remove(size_t position);
     
    10921092 
    10931093template<typename T, size_t inlineCapacity, typename OverflowHandler> template<typename U>
    1094 inline void Vector<T, inlineCapacity, OverflowHandler>::insert(size_t position, const U& val)
     1094inline void Vector<T, inlineCapacity, OverflowHandler>::insert(size_t position, U&& value)
    10951095{
    10961096    ASSERT_WITH_SECURITY_IMPLICATION(position <= size());
    1097     const U* data = &val;
     1097
     1098    auto ptr = const_cast<typename std::remove_const<typename std::remove_reference<U>::type>::type*>(std::addressof(value));
    10981099    if (size() == capacity()) {
    1099         data = expandCapacity(size() + 1, data);
     1100        ptr = expandCapacity(size() + 1, ptr);
    11001101        ASSERT(begin());
    11011102    }
     1103
    11021104    T* spot = begin() + position;
    11031105    TypeOperations::moveOverlapping(spot, end(), spot + 1);
    1104     new (NotNull, spot) T(*data);
     1106    new (NotNull, spot) T(std::forward<U>(*ptr));
    11051107    ++m_size;
    11061108}
    11071109
    11081110template<typename T, size_t inlineCapacity, typename OverflowHandler> template<typename U, size_t c>
    1109 inline void Vector<T, inlineCapacity, OverflowHandler>::insert(size_t position, const Vector<U, c>& val)
     1111inline void Vector<T, inlineCapacity, OverflowHandler>::insertVector(size_t position, const Vector<U, c>& val)
    11101112{
    11111113    insert(position, val.begin(), val.size());
  • trunk/Source/WebCore/ChangeLog

    r157071 r157074  
     12013-10-07  Darin Adler  <darin@apple.com>
     2
     3        Make Vector::insert work for move-only types
     4        https://bugs.webkit.org/show_bug.cgi?id=122429
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * history/HistoryItem.cpp:
     9        (WebCore::HistoryItem::padDailyCountsForNewVisit): Call insertVector.
     10        Also added some inline capacity, which should make this faster.
     11
    1122013-10-07  Anders Carlsson  <andersca@apple.com>
    213
  • trunk/Source/WebCore/history/HistoryItem.cpp

    r156550 r157074  
    332332
    333333    if (daysElapsed < 0)
    334       daysElapsed = 0;
    335 
    336     Vector<int> padding;
     334        daysElapsed = 0;
     335
     336    Vector<int, 32> padding;
    337337    padding.fill(0, daysElapsed);
    338     m_dailyVisitCounts.insert(0, padding);
     338    m_dailyVisitCounts.insertVector(0, padding);
    339339}
    340340
Note: See TracChangeset for help on using the changeset viewer.