Changeset 25365 in webkit for trunk/JavaScriptCore/wtf/Vector.h


Ignore:
Timestamp:
Sep 4, 2007, 10:01:03 PM (18 years ago)
Author:
mjs
Message:

Reviewed by Darin.


  • Added Vector::appendRange(), which appends to a vector based on a given start and end iterator
  • Added keys() and values() functions to HashMap iterators, which give keys-only and values-only iterators


Together, these allow easy copying of a set, or the keys or values of a map, into a Vector. Examples:


HashMap<int, int> map;
HashSet<int> set;
Vector<int> vec;
...
vec.appendRange(set.begin(), set.end());
vec.appendRange(map.begin().keys(), map.end().keys());
vec.appendRange(map.begin().values(), map.end().values());

This also allows for a slightly nicer syntax when iterating a map. Instead of saying
(*it)->first, you can say *it.values(). Similarly for keys. Example:


HashMap<int, int>::const_iterator end = map.end();
for (HashMap<int, int>::const_iterator it = map.begin(); it != end; ++it)
printf(" [%d => %d]", *it.keys(), *it.values());

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • wtf/HashIterators.h: Added. (WTF::): (WTF::HashTableConstKeysIterator::HashTableConstKeysIterator): (WTF::HashTableConstKeysIterator::get): (WTF::HashTableConstKeysIterator::operator*): (WTF::HashTableConstKeysIterator::operator->): (WTF::HashTableConstKeysIterator::operator++): (WTF::HashTableConstValuesIterator::HashTableConstValuesIterator): (WTF::HashTableConstValuesIterator::get): (WTF::HashTableConstValuesIterator::operator*): (WTF::HashTableConstValuesIterator::operator->): (WTF::HashTableConstValuesIterator::operator++): (WTF::HashTableKeysIterator::HashTableKeysIterator): (WTF::HashTableKeysIterator::get): (WTF::HashTableKeysIterator::operator*): (WTF::HashTableKeysIterator::operator->): (WTF::HashTableKeysIterator::operator++): (WTF::HashTableKeysIterator::operator HashTableConstKeysIterator<HashTableType, KeyType, MappedType>): (WTF::HashTableValuesIterator::HashTableValuesIterator): (WTF::HashTableValuesIterator::get): (WTF::HashTableValuesIterator::operator*): (WTF::HashTableValuesIterator::operator->): (WTF::HashTableValuesIterator::operator++): (WTF::HashTableValuesIterator::operator HashTableConstValuesIterator<HashTableType, KeyType, MappedType>): (WTF::operator==): (WTF::operator!=):
  • wtf/HashTable.h:
  • wtf/Vector.h: (WTF::::appendRange):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/wtf/Vector.h

    r25241 r25365  
    459459        void fill(const T& val) { fill(val, size()); }
    460460
     461        template<typename Iterator> void appendRange(Iterator start, Iterator end);
     462
    461463        T* releaseBuffer();
    462464
     
    547549        TypeOperations::uninitializedFill(end(), begin() + newSize, val);
    548550        m_size = newSize;
     551    }
     552
     553    template<typename T, size_t inlineCapacity>
     554    template<typename Iterator>
     555    void Vector<T, inlineCapacity>::appendRange(Iterator start, Iterator end)
     556    {
     557        for (Iterator it = start; it != end; ++it)
     558            append(*it);
    549559    }
    550560
Note: See TracChangeset for help on using the changeset viewer.