Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(859)

Unified Diff: Source/modules/webmidi/MIDIPortMap.h

Issue 862633002: IDL: Add keys()/values()/entries() to maplike<>/setlike<> interfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebased Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/webmidi/MIDIOutputMap.idl ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webmidi/MIDIPortMap.h
diff --git a/Source/modules/webmidi/MIDIPortMap.h b/Source/modules/webmidi/MIDIPortMap.h
index 907e6ce5bea1ac4640588070867271fb60b49342..a7795cc32230bbf439bea267d053ebab8a702c0f 100644
--- a/Source/modules/webmidi/MIDIPortMap.h
+++ b/Source/modules/webmidi/MIDIPortMap.h
@@ -9,8 +9,7 @@
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/ScriptValue.h"
#include "bindings/core/v8/V8Binding.h"
-#include "bindings/core/v8/V8IteratorResultValue.h"
-#include "core/dom/Iterator.h"
+#include "core/dom/Iterable.h"
#include "platform/heap/Handle.h"
#include "wtf/HashMap.h"
#include "wtf/text/StringHash.h"
@@ -19,18 +18,14 @@
namespace blink {
template <typename T>
-class MIDIPortMap : public GarbageCollected<MIDIPortMap<T>> {
+class MIDIPortMap : public GarbageCollected<MIDIPortMap<T>>, public PairIterable<String, T*> {
public:
explicit MIDIPortMap(const HeapHashMap<String, Member<T>>& entries) : m_entries(entries) { }
// IDL attributes / methods
size_t size() const { return m_entries.size(); }
- Iterator* keys();
- Iterator* entries();
- Iterator* values();
T* get(const String& key) const;
bool has(const String& key) const { return m_entries.contains(key); }
- Iterator* iterator(ScriptState*, ExceptionState&) { return entries(); }
virtual void trace(Visitor* visitor)
{
@@ -40,52 +35,37 @@ public:
private:
typedef HeapHashMap<String, Member<T>> MapType;
typedef typename HeapHashMap<String, Member<T>>::const_iterator IteratorType;
- struct KeySelector {
- static const String& select(ScriptState*, IteratorType i) { return i->key; }
- };
- struct ValueSelector {
- static T* select(ScriptState*, IteratorType i) { return i->value; }
- };
- struct EntrySelector {
- static Vector<ScriptValue> select(ScriptState* scriptState, IteratorType i)
- {
- Vector<ScriptValue> entry;
- entry.append(ScriptValue(scriptState, v8String(scriptState->isolate(), i->key)));
- entry.append(ScriptValue(scriptState, toV8(i->value, scriptState->context()->Global(), scriptState->isolate())));
- return entry;
- }
- };
+
+ typename PairIterable<String, T*>::IterationSource* startIteration(ScriptState*, ExceptionState&) override
+ {
+ return new MapIterationSource(this, m_entries.begin(), m_entries.end());
+ }
// Note: This template class relies on the fact that m_map.m_entries will
// never be modified once it is created.
- template <typename Selector>
- class MapIterator : public Iterator {
+ class MapIterationSource final : public PairIterable<String, T*>::IterationSource {
public:
- MapIterator(MIDIPortMap<T>* map, IteratorType iterator, IteratorType end)
+ MapIterationSource(MIDIPortMap<T>* map, IteratorType iterator, IteratorType end)
: m_map(map)
, m_iterator(iterator)
, m_end(end)
{
}
- virtual ScriptValue next(ScriptState* scriptState, ExceptionState&) override
+ bool next(ScriptState* scriptState, String& key, T*& value, ExceptionState&) override
{
if (m_iterator == m_end)
- return v8IteratorResultDone(scriptState);
- ScriptValue result = v8IteratorResult(scriptState, Selector::select(scriptState, m_iterator));
+ return false;
+ key = m_iterator->key;
+ value = m_iterator->value;
++m_iterator;
- return result;
- }
-
- virtual ScriptValue next(ScriptState* scriptState, ScriptValue, ExceptionState& exceptionState) override
- {
- return next(scriptState, exceptionState);
+ return true;
}
- virtual void trace(Visitor* visitor) override
+ void trace(Visitor* visitor) override
{
visitor->trace(m_map);
- Iterator::trace(visitor);
+ PairIterable<String, T*>::IterationSource::trace(visitor);
}
private:
@@ -100,24 +80,6 @@ private:
};
template <typename T>
-Iterator* MIDIPortMap<T>::keys()
-{
- return new MapIterator<KeySelector>(this, m_entries.begin(), m_entries.end());
-}
-
-template <typename T>
-Iterator* MIDIPortMap<T>::entries()
-{
- return new MapIterator<EntrySelector>(this, m_entries.begin(), m_entries.end());
-}
-
-template <typename T>
-Iterator* MIDIPortMap<T>::values()
-{
- return new MapIterator<ValueSelector>(this, m_entries.begin(), m_entries.end());
-}
-
-template <typename T>
T* MIDIPortMap<T>::get(const String& key) const
{
return has(key) ? m_entries.get(key) : 0;
« no previous file with comments | « Source/modules/webmidi/MIDIOutputMap.idl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698