Changeset 161770 in webkit


Ignore:
Timestamp:
Jan 11, 2014 11:17:55 AM (10 years ago)
Author:
weinig@apple.com
Message:

Clean up iterator filter / iterator range code
https://bugs.webkit.org/show_bug.cgi?id=126817

Reviewed by Anders Carlsson.

Source/WebKit2:

  • Shared/APIArray.h:

Update elementsOfType() to use combination of FilterIterator and TransformIterator
(now that FilterIterator no longer has a transform predicate) and make use of the
makeFoo() helpers.

Source/WTF:

  • Renames IteratorPair to IteratorRange.
  • Splits FilterIterator into FilterIterator (which now only filters) and TransformIterator (which does the transform part of the old FilterIterator). Move both of these to IteratorAdaptors.h
  • GNUmakefile.list.am:
  • WTF.vcxproj/WTF.vcxproj:
  • WTF.vcxproj/WTF.vcxproj.filters:
  • WTF.xcodeproj/project.pbxproj:
  • wtf/CMakeLists.txt:
  • wtf/FilterIterator.h: Removed.

Add/remove files.

  • wtf/HashMap.h:

(WTF::HashMap::keys):
(WTF::HashMap::values):

  • wtf/RefPtrHashMap.h:

Update for rename to IteratorRange. Simplify by using makeIteratorRange().

  • wtf/IteratorAdaptors.h: Copied from wtf/FilterIterator.h.

(WTF::FilterIterator::FilterIterator):
(WTF::FilterIterator::operator*):
(WTF::makeFilterIterator):
(WTF::TransformIterator::TransformIterator):
(WTF::TransformIterator::operator++):
(WTF::TransformIterator::operator*):
(WTF::TransformIterator::operator==):
(WTF::TransformIterator::operator!=):
(WTF::makeTransformIterator):
Split up filtering and transforming. Add makeFilterIterator() and makeTransformIterator()
helpers.

  • wtf/IteratorPair.h: Removed.
  • wtf/IteratorRange.h: Copied from wtf/IteratorPair.h.

(WTF::IteratorRange::IteratorRange):
(WTF::makeIteratorRange):
Renamed to IteratorRange and adds makeIteratorRange() helper.

Location:
trunk/Source
Files:
10 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r161713 r161770  
     12014-01-11  Sam Weinig  <sam@webkit.org>
     2
     3        Clean up iterator filter / iterator range code
     4        https://bugs.webkit.org/show_bug.cgi?id=126817
     5
     6        Reviewed by Anders Carlsson.
     7
     8        - Renames IteratorPair to IteratorRange.
     9        - Splits FilterIterator into FilterIterator (which now only filters) and
     10          TransformIterator (which does the transform part of the old FilterIterator).
     11          Move both of these to IteratorAdaptors.h
     12
     13        * GNUmakefile.list.am:
     14        * WTF.vcxproj/WTF.vcxproj:
     15        * WTF.vcxproj/WTF.vcxproj.filters:
     16        * WTF.xcodeproj/project.pbxproj:
     17        * wtf/CMakeLists.txt:
     18        * wtf/FilterIterator.h: Removed.
     19        Add/remove files.
     20
     21        * wtf/HashMap.h:
     22        (WTF::HashMap::keys):
     23        (WTF::HashMap::values):
     24        * wtf/RefPtrHashMap.h:
     25        Update for rename to IteratorRange. Simplify by using makeIteratorRange().
     26
     27        * wtf/IteratorAdaptors.h: Copied from wtf/FilterIterator.h.
     28        (WTF::FilterIterator::FilterIterator):
     29        (WTF::FilterIterator::operator*):
     30        (WTF::makeFilterIterator):
     31        (WTF::TransformIterator::TransformIterator):
     32        (WTF::TransformIterator::operator++):
     33        (WTF::TransformIterator::operator*):
     34        (WTF::TransformIterator::operator==):
     35        (WTF::TransformIterator::operator!=):
     36        (WTF::makeTransformIterator):
     37        Split up filtering and transforming. Add makeFilterIterator() and makeTransformIterator()
     38        helpers.
     39
     40        * wtf/IteratorPair.h: Removed.
     41        * wtf/IteratorRange.h: Copied from wtf/IteratorPair.h.
     42        (WTF::IteratorRange::IteratorRange):
     43        (WTF::makeIteratorRange):
     44        Renamed to IteratorRange and adds makeIteratorRange() helper.
     45
    1462014-01-10  David Kilzer  <ddkilzer@apple.com>
    247
  • trunk/Source/WTF/GNUmakefile.list.am

    r161518 r161770  
    5454    Source/WTF/wtf/FilePrintStream.cpp \
    5555    Source/WTF/wtf/FilePrintStream.h \
    56     Source/WTF/wtf/FilterIterator.h \
    5756    Source/WTF/wtf/FlipBytes.h \
    5857    Source/WTF/wtf/Forward.h \
     
    7473    Source/WTF/wtf/InlineASM.h \
    7574    Source/WTF/wtf/Insertion.h \
    76     Source/WTF/wtf/IteratorPair.h \
     75    Source/WTF/wtf/IteratorAdaptors.h \
     76    Source/WTF/wtf/IteratorRange.h \
    7777    Source/WTF/wtf/ListDump.h \
    7878    Source/WTF/wtf/ListHashSet.h \
  • trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj

    r161518 r161770  
    198198    <ClInclude Include="..\wtf\FeatureDefines.h" />
    199199    <ClInclude Include="..\wtf\FilePrintStream.h" />
    200     <ClInclude Include="..\wtf\FilterIterator.h" />
    201200    <ClInclude Include="..\wtf\FlipBytes.h" />
    202201    <ClInclude Include="..\wtf\Forward.h" />
     
    218217    <ClInclude Include="..\wtf\HashTraits.h" />
    219218    <ClInclude Include="..\wtf\HexNumber.h" />
    220     <ClInclude Include="..\wtf\IteratorPair.h" />
     219    <ClInclude Include="..\wtf\IteratorAdaptors.h" />
     220    <ClInclude Include="..\wtf\IteratorRange.h" />
    221221    <ClInclude Include="..\wtf\ListHashSet.h" />
    222222    <ClInclude Include="..\wtf\Locker.h" />
  • trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj.filters

    r161518 r161770  
    436436      <Filter>wtf</Filter>
    437437    </ClInclude>
    438     <ClInclude Include="..\wtf\FilterIterator.h">
    439       <Filter>wtf</Filter>
    440     </ClInclude>
    441438    <ClInclude Include="..\wtf\Forward.h">
    442439      <Filter>wtf</Filter>
     
    475472      <Filter>wtf</Filter>
    476473    </ClInclude>
    477     <ClInclude Include="..\wtf\IteratorPair.h">
     474    <ClInclude Include="..\wtf\IteratorAdaptors.h">
     475      <Filter>wtf</Filter>
     476    </ClInclude>
     477    <ClInclude Include="..\wtf\IteratorRange.h">
    478478      <Filter>wtf</Filter>
    479479    </ClInclude>
  • trunk/Source/WTF/WTF.xcodeproj/project.pbxproj

    r161518 r161770  
    6666                2CDED0F318115C85004DBA70 /* RunLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CDED0F118115C85004DBA70 /* RunLoop.cpp */; };
    6767                2CDED0F418115C85004DBA70 /* RunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CDED0F218115C85004DBA70 /* RunLoop.h */; };
    68                 7CDD7FF8186D291E007433CD /* FilterIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF7186D291E007433CD /* FilterIterator.h */; };
    69                 7CDD7FFA186D2A54007433CD /* IteratorPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF9186D2A54007433CD /* IteratorPair.h */; };
     68                7CDD7FF8186D291E007433CD /* IteratorAdaptors.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */; };
     69                7CDD7FFA186D2A54007433CD /* IteratorRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF9186D2A54007433CD /* IteratorRange.h */; };
    7070                7E29C33E15FFD79B00516D61 /* ObjcRuntimeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E29C33D15FFD79B00516D61 /* ObjcRuntimeExtras.h */; };
    7171                8134013815B092FD001FF0B8 /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8134013615B092FD001FF0B8 /* Base64.cpp */; };
     
    340340                5D247B7314689C4700E78B76 /* WTF.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = WTF.xcconfig; sourceTree = "<group>"; };
    341341                6541CAF41630DB26006D0DEC /* CopyWTFHeaders.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = CopyWTFHeaders.xcconfig; sourceTree = "<group>"; };
    342                 7CDD7FF7186D291E007433CD /* FilterIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterIterator.h; sourceTree = "<group>"; };
    343                 7CDD7FF9186D2A54007433CD /* IteratorPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorPair.h; sourceTree = "<group>"; };
     342                7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorAdaptors.h; sourceTree = "<group>"; };
     343                7CDD7FF9186D2A54007433CD /* IteratorRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorRange.h; sourceTree = "<group>"; };
    344344                7E29C33D15FFD79B00516D61 /* ObjcRuntimeExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjcRuntimeExtras.h; sourceTree = "<group>"; };
    345345                8134013615B092FD001FF0B8 /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; };
     
    701701                                A8A472A2151A825A004123FF /* FastMalloc.h */,
    702702                                B38FD7BC168953E80065C969 /* FeatureDefines.h */,
    703                                 7CDD7FF7186D291E007433CD /* FilterIterator.h */,
    704                                 7CDD7FF9186D2A54007433CD /* IteratorPair.h */,
    705703                                0F9D335B165DBA73005AD387 /* FilePrintStream.cpp */,
    706704                                0F9D335C165DBA73005AD387 /* FilePrintStream.h */,
     
    724722                                A8A472BC151A825A004123FF /* InlineASM.h */,
    725723                                A70DA0821799F04D00529A9B /* Insertion.h */,
     724                                7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */,
     725                                7CDD7FF9186D2A54007433CD /* IteratorRange.h */,
    726726                                A70DA0831799F04D00529A9B /* ListDump.h */,
    727727                                A8A472C1151A825A004123FF /* ListHashSet.h */,
     
    959959                                A8A47388151A825B004123FF /* Atomics.h in Headers */,
    960960                                A8A47436151A825B004123FF /* AtomicString.h in Headers */,
    961                                 7CDD7FF8186D291E007433CD /* FilterIterator.h in Headers */,
     961                                7CDD7FF8186D291E007433CD /* IteratorAdaptors.h in Headers */,
    962962                                A8A47437151A825B004123FF /* AtomicStringHash.h in Headers */,
    963963                                A8A47438151A825B004123FF /* AtomicStringImpl.h in Headers */,
     
    968968                                A8A473A9151A825B004123FF /* bignum-dtoa.h in Headers */,
    969969                                A8A473AB151A825B004123FF /* bignum.h in Headers */,
    970                                 7CDD7FFA186D2A54007433CD /* IteratorPair.h in Headers */,
     970                                7CDD7FFA186D2A54007433CD /* IteratorRange.h in Headers */,
    971971                                A8A47452151A825B004123FF /* BinarySemaphore.h in Headers */,
    972972                                A8A4738A151A825B004123FF /* Bitmap.h in Headers */,
  • trunk/Source/WTF/wtf/CMakeLists.txt

    r161518 r161770  
    2929    FeatureDefines.h
    3030    FilePrintStream.h
    31     FilterIterator.h
    3231    FlipBytes.h
    3332    Forward.h
     
    4443    HashTraits.h
    4544    HexNumber.h
    46     IteratorPair.h
     45    IteratorAdaptors.h
     46    IteratorRange.h
    4747    ListHashSet.h
    4848    Locker.h
  • trunk/Source/WTF/wtf/HashMap.h

    r161114 r161770  
    2323
    2424#include <wtf/HashTable.h>
    25 #include <wtf/IteratorPair.h>
     25#include <wtf/IteratorRange.h>
    2626
    2727namespace WTF {
     
    9393    const_iterator end() const;
    9494
    95     IteratorPair<typename iterator::Keys> keys() { return IteratorPair<typename iterator::Keys>(begin().keys(), end().keys()); }
    96     const IteratorPair<typename const_iterator::Keys> keys() const { return IteratorPair<typename const_iterator::Keys>(begin().keys(), end().keys()); }
    97 
    98     IteratorPair<typename iterator::Values> values() { return IteratorPair<typename iterator::Values>(begin().values(), end().values()); }
    99     const IteratorPair<typename const_iterator::Values> values() const { return IteratorPair<typename const_iterator::Values>(begin().values(), end().values()); }
     95    IteratorRange<typename iterator::Keys> keys() { return makeIteratorRange(begin().keys(), end().keys()); }
     96    const IteratorRange<typename const_iterator::Keys> keys() const { return makeIteratorRange(begin().keys(), end().keys()); }
     97
     98    IteratorRange<typename iterator::Values> values() { return makeIteratorRange(begin().values(), end().values()); }
     99    const IteratorRange<typename const_iterator::Values> values() const { return makeIteratorRange(begin().values(), end().values()); }
    100100
    101101    iterator find(const KeyType&);
  • trunk/Source/WTF/wtf/IteratorAdaptors.h

    r161750 r161770  
    2424 */
    2525
    26 #ifndef WTF_FilterIterator_h
    27 #define WTF_FilterIterator_h
    28 
    29 #include <wtf/Forward.h>
    30 #include <wtf/PassRefPtr.h>
    31 #include <wtf/Vector.h>
     26#ifndef WTF_IteratorAdaptors_h
     27#define WTF_IteratorAdaptors_h
    3228
    3329namespace WTF {
    3430
    35 template<typename Predicate, typename Cast, typename Iterator>
     31template<typename Predicate, typename Iterator>
    3632class FilterIterator {
    3733public:
    38     FilterIterator(Predicate pred, Cast cast, Iterator begin, Iterator end)
     34    FilterIterator(Predicate pred, Iterator begin, Iterator end)
    3935        : m_pred(std::move(pred))
    40         , m_cast(std::move(cast))
    4136        , m_iter(std::move(begin))
    4237        , m_end(std::move(end))
     
    5651    }
    5752
    58     const decltype(std::declval<Cast>()(*std::declval<Iterator>())) operator*() const
     53    const decltype(*std::declval<Iterator>()) operator*() const
    5954    {
    6055        ASSERT(m_iter != m_end);
    6156        ASSERT(m_pred(*m_iter));
    62         return m_cast(*m_iter);
     57        return *m_iter;
    6358    }
    6459
     
    6863private:
    6964    const Predicate m_pred;
    70     const Cast m_cast;
    7165    Iterator m_iter;
    7266    Iterator m_end;
    7367};
    7468
     69template<typename Predicate, typename Iterator>
     70inline FilterIterator<Predicate, Iterator> makeFilterIterator(Predicate&& pred, Iterator&& begin, Iterator&& end)
     71{
     72    return FilterIterator<Predicate, Iterator>(std::forward<Predicate>(pred), std::forward<Iterator>(begin), std::forward<Iterator>(end));
     73}
     74
     75template<typename Transform, typename Iterator>
     76class TransformIterator {
     77public:
     78    TransformIterator(const Transform& transform, const Iterator& iter)
     79        : m_transform(std::move(transform))
     80        , m_iter(std::move(iter))
     81    {
     82    }
     83
     84    TransformIterator& operator++()
     85    {
     86        ++m_iter;
     87        return *this;
     88    }
     89
     90    const decltype(std::declval<Transform>()(*std::declval<Iterator>())) operator*() const
     91    {
     92        return m_transform(*m_iter);
     93    }
     94
     95    inline bool operator==(TransformIterator& other) const { return m_iter == other.m_iter; }
     96    inline bool operator!=(TransformIterator& other) const { return m_iter != other.m_iter; }
     97
     98private:
     99    const Transform m_transform;
     100    Iterator m_iter;
     101};
     102
     103template<typename Transform, typename Iterator>
     104inline TransformIterator<Transform, Iterator> makeTransformIterator(Transform&& transform, Iterator&& iter)
     105{
     106    return TransformIterator<Transform, Iterator>(std::forward<Transform>(transform), std::forward<Iterator>(iter));
     107}
     108
    75109} // namespace WTF
    76110
    77 #endif // WTF_FilterIterator_h
     111#endif // WTF_IteratorAdaptors_h
  • trunk/Source/WTF/wtf/IteratorRange.h

    r161736 r161770  
    2424 */
    2525
    26 #ifndef WTF_IteratorPair_h
    27 #define WTF_IteratorPair_h
     26#ifndef WTF_IteratorRange_h
     27#define WTF_IteratorRange_h
    2828
    2929namespace WTF {
    3030
    3131template<typename Iterator>
    32 class IteratorPair {
     32class IteratorRange {
    3333public:
    34     IteratorPair(Iterator begin, Iterator end)
     34    IteratorRange(Iterator begin, Iterator end)
    3535        : m_begin(std::move(begin))
    3636        , m_end(std::move(end))
     
    4646};
    4747
     48template<typename Iterator>
     49IteratorRange<Iterator> makeIteratorRange(Iterator&& begin, Iterator&& end)
     50{
     51    return IteratorRange<Iterator>(std::forward<Iterator>(begin), std::forward<Iterator>(end));
     52}
     53
    4854} // namespace WTF
    4955
    50 #endif // WTF_IteratorPair
     56#endif // WTF_IteratorRange_h
  • trunk/Source/WTF/wtf/RefPtrHashMap.h

    r161114 r161770  
    7171        const_iterator end() const;
    7272
    73         IteratorPair<typename iterator::Keys> keys() { return IteratorPair<typename iterator::Keys>(begin().keys(), end().keys()); }
    74         const IteratorPair<typename const_iterator::Keys> keys() const { return IteratorPair<typename const_iterator::Keys>(begin().keys(), end().keys()); }
    75 
    76         IteratorPair<typename iterator::Values> values() { return IteratorPair<typename iterator::Values>(begin().values(), end().values()); }
    77         const IteratorPair<typename const_iterator::Values> values() const { return IteratorPair<typename const_iterator::Values>(begin().values(), end().values()); }
     73        IteratorRange<typename iterator::Keys> keys() { return makeIteratorRange(begin().keys(), end().keys()); }
     74        const IteratorRange<typename const_iterator::Keys> keys() const { return makeIteratorRange(begin().keys(), end().keys()); }
     75
     76        IteratorRange<typename iterator::Values> values() { return makeIteratorRange(begin().values(), end().values()); }
     77        const IteratorRange<typename const_iterator::Values> values() const { return makeIteratorRange(begin().values(), end().values()); }
    7878
    7979        iterator find(const KeyType&);
  • trunk/Source/WebKit2/ChangeLog

    r161769 r161770  
     12014-01-11  Sam Weinig  <sam@webkit.org>
     2
     3        Clean up iterator filter / iterator range code
     4        https://bugs.webkit.org/show_bug.cgi?id=126817
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * Shared/APIArray.h:
     9        Update elementsOfType() to use combination of FilterIterator and TransformIterator
     10        (now that FilterIterator no longer has a transform predicate) and make use of the
     11        makeFoo() helpers.
     12
    1132014-01-11  Anders Carlsson  <andersca@apple.com>
    214
  • trunk/Source/WebKit2/Shared/APIArray.h

    r161114 r161770  
    2828
    2929#include "APIObject.h"
    30 #include <wtf/FilterIterator.h>
    3130#include <wtf/Forward.h>
    32 #include <wtf/IteratorPair.h>
     31#include <wtf/IteratorAdaptors.h>
     32#include <wtf/IteratorRange.h>
    3333#include <wtf/PassRefPtr.h>
    3434#include <wtf/Vector.h>
     
    3838class Array FINAL : public ObjectImpl<Object::Type::Array> {
    3939private:
    40     template<typename T>
    41     static inline const T* getObject(const RefPtr<Object>& object) { return static_cast<const T*>(object.get()); }
     40    template <class T>
     41    struct IsTypePredicate {
     42        bool operator()(const RefPtr<Object>& object) const { return object->type() == T::APIType; }
     43    };
    4244
    43     template<typename T>
    44     static inline bool isType(const RefPtr<Object>& object) { return object->type() == T::APIType; }
     45    template <class T>
     46    struct GetObjectTransform {
     47        const T* operator()(const RefPtr<Object>& object) const { return static_cast<const T*>(object.get()); }
     48    };
     49
     50    template <typename T>
     51    using ElementsOfTypeRange = WTF::IteratorRange<WTF::TransformIterator<GetObjectTransform<T>, WTF::FilterIterator<IsTypePredicate<T>, Vector<RefPtr<Object>>::const_iterator>>>;
    4552
    4653public:
     
    5461    T* at(size_t i) const
    5562    {
    56         if (!isType<T>(m_elements[i]))
     63        if (m_elements[i]->type() != T::APIType)
    5764            return nullptr;
    5865
     
    6774
    6875    template<typename T>
    69     WTF::IteratorPair<WTF::FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>> elementsOfType()
     76    ElementsOfTypeRange<T> elementsOfType() const
    7077    {
    71         typedef WTF::FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator> Iterator;
    72    
    73         return WTF::IteratorPair<Iterator>(
    74             Iterator(isType<T>, getObject<T>, m_elements.begin(), m_elements.end()),
    75             Iterator(isType<T>, getObject<T>, m_elements.end(), m_elements.end())
     78        return WTF::makeIteratorRange(
     79            WTF::makeTransformIterator(GetObjectTransform<T>(), WTF::makeFilterIterator(IsTypePredicate<T>(), m_elements.begin(), m_elements.end())),
     80            WTF::makeTransformIterator(GetObjectTransform<T>(), WTF::makeFilterIterator(IsTypePredicate<T>(), m_elements.end(), m_elements.end()))
    7681        );
    7782    }
Note: See TracChangeset for help on using the changeset viewer.