Changeset 44899 in webkit


Ignore:
Timestamp:
Jun 20, 2009 6:27:26 AM (15 years ago)
Author:
ddkilzer@apple.com
Message:

2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>

Bug 24986: ARM JIT port
<https://bugs.webkit.org/show_bug.cgi?id=24986>

Reviewed by Oliver Hunt.

An Iterator added for SegmentedVector. Currently
only the pre ++ operator is supported.

  • wtf/SegmentedVector.h: (WTF::SegmentedVectorIterator::~SegmentedVectorIterator): (WTF::SegmentedVectorIterator::operator*): (WTF::SegmentedVectorIterator::operator->): (WTF::SegmentedVectorIterator::operator++): (WTF::SegmentedVectorIterator::operator==): (WTF::SegmentedVectorIterator::operator!=): (WTF::SegmentedVectorIterator::operator=): (WTF::SegmentedVectorIterator::SegmentedVectorIterator): (WTF::SegmentedVector::alloc): (WTF::SegmentedVector::begin): (WTF::SegmentedVector::end):
Location:
trunk/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r44897 r44899  
     12009-06-20  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>
     2
     3        Bug 24986: ARM JIT port
     4        <https://bugs.webkit.org/show_bug.cgi?id=24986>
     5
     6        Reviewed by Oliver Hunt.
     7
     8        An Iterator added for SegmentedVector. Currently
     9        only the pre ++ operator is supported.
     10
     11        * wtf/SegmentedVector.h:
     12        (WTF::SegmentedVectorIterator::~SegmentedVectorIterator):
     13        (WTF::SegmentedVectorIterator::operator*):
     14        (WTF::SegmentedVectorIterator::operator->):
     15        (WTF::SegmentedVectorIterator::operator++):
     16        (WTF::SegmentedVectorIterator::operator==):
     17        (WTF::SegmentedVectorIterator::operator!=):
     18        (WTF::SegmentedVectorIterator::operator=):
     19        (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
     20        (WTF::SegmentedVector::alloc):
     21        (WTF::SegmentedVector::begin):
     22        (WTF::SegmentedVector::end):
     23
    1242009-06-20  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>
    225
  • trunk/JavaScriptCore/wtf/SegmentedVector.h

    r44897 r44899  
    3434namespace WTF {
    3535
     36    // An iterator for SegmentedVector. It supports only the pre ++ operator
     37    template <typename T, size_t SegmentSize> class SegmentedVector;
     38    template <typename T, size_t SegmentSize> class SegmentedVectorIterator {
     39    private:
     40        friend class SegmentedVector<T, SegmentSize>;
     41    public:
     42        typedef SegmentedVectorIterator<T, SegmentSize> Iterator;
     43
     44        ~SegmentedVectorIterator() { }
     45
     46        T& operator*() const { return m_vector.m_segments.at(m_segment)->at(m_index); }
     47        T* operator->() const { return &m_vector.m_segments.at(m_segment)->at(m_index); }
     48
     49        // Only prefix ++ operator supported
     50        Iterator& operator++()
     51        {
     52            ASSERT(m_index != SegmentSize);
     53            ++m_index;
     54            if (m_index >= m_vector.m_segments.at(m_segment)->size())  {
     55                if (m_segment + 1 < m_vector.m_segments.size()) {
     56                    ASSERT(m_vector.m_segments.at(m_segment)->size() > 0);
     57                    ++m_segment;
     58                    m_index = 0;
     59                } else {
     60                    // Points to the "end" symbol
     61                    m_segment = 0;
     62                    m_index = SegmentSize;
     63                }
     64            }
     65            return *this;
     66        }
     67
     68        bool operator==(const Iterator& other) const
     69        {
     70            return (m_index == other.m_index && m_segment = other.m_segment && &m_vector == &other.m_vector);
     71        }
     72
     73        bool operator!=(const Iterator& other) const
     74        {
     75            return (m_index != other.m_index || m_segment != other.m_segment || &m_vector != &other.m_vector);
     76        }
     77
     78        SegmentedVectorIterator& operator=(const SegmentedVectorIterator<T, SegmentSize>& other)
     79        {
     80            m_vector = other.m_vector;
     81            m_segment = other.m_segment;
     82            m_index = other.m_index;
     83            return *this;
     84        }
     85
     86    private:
     87        SegmentedVectorIterator(SegmentedVector<T, SegmentSize>& vector, size_t segment, size_t index)
     88            : m_vector(vector)
     89            , m_segment(segment)
     90            , m_index(index)
     91        {
     92        }
     93
     94        SegmentedVector<T, SegmentSize>& m_vector;
     95        size_t m_segment;
     96        size_t m_index;
     97    };
     98
    3699    // SegmentedVector is just like Vector, but it doesn't move the values
    37100    // stored in its buffer when it grows. Therefore, it is safe to keep
    38101    // pointers into a SegmentedVector.
    39102    template <typename T, size_t SegmentSize> class SegmentedVector {
     103        friend class SegmentedVectorIterator<T, SegmentSize>;
    40104    public:
     105        typedef SegmentedVectorIterator<T, SegmentSize> Iterator;
     106
    41107        SegmentedVector()
    42108            : m_size(0)
     
    81147                m_segments.append(new Segment);
    82148            segmentFor(m_size - 1)->uncheckedAppend(value);
     149        }
     150
     151        T& alloc()
     152        {
     153            append<T>(T());
     154            return last();
    83155        }
    84156
     
    107179        }
    108180
     181        Iterator begin()
     182        {
     183            return Iterator(*this, 0, m_size ? 0 : SegmentSize);
     184        }
     185
     186        Iterator end()
     187        {
     188            return Iterator(*this, 0, SegmentSize);
     189        }
     190
    109191    private:
    110192        typedef Vector<T, SegmentSize> Segment;
Note: See TracChangeset for help on using the changeset viewer.