1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/modules/webaudio/audio_param_map.h"
6
7 namespace blink {
8
9 class AudioParamMapIterationSource final
10 : public PairIterable<String, AudioParam*>::IterationSource {
11 public:
AudioParamMapIterationSource(const HeapHashMap<String,Member<AudioParam>> & map)12 AudioParamMapIterationSource(
13 const HeapHashMap<String, Member<AudioParam>>& map) {
14 for (const auto& name : map.Keys()) {
15 parameter_names_.push_back(name);
16 parameter_objects_.push_back(map.at(name));
17 }
18 }
19
Next(ScriptState * scrip_state,String & key,AudioParam * & audio_param,ExceptionState &)20 bool Next(ScriptState* scrip_state,
21 String& key,
22 AudioParam*& audio_param,
23 ExceptionState&) override {
24 if (current_index_ == parameter_names_.size())
25 return false;
26 key = parameter_names_[current_index_];
27 audio_param = parameter_objects_[current_index_];
28 ++current_index_;
29 return true;
30 }
31
Trace(Visitor * visitor) const32 void Trace(Visitor* visitor) const override {
33 visitor->Trace(parameter_objects_);
34 PairIterable<String, AudioParam*>::IterationSource::Trace(visitor);
35 }
36
37 private:
38 // For sequential iteration (e.g. Next()).
39 Vector<String> parameter_names_;
40 HeapVector<Member<AudioParam>> parameter_objects_;
41 unsigned current_index_;
42 };
43
AudioParamMap(const HeapHashMap<String,Member<AudioParam>> & parameter_map)44 AudioParamMap::AudioParamMap(
45 const HeapHashMap<String, Member<AudioParam>>& parameter_map)
46 : parameter_map_(parameter_map) {}
47
48 PairIterable<String, AudioParam*>::IterationSource*
StartIteration(ScriptState *,ExceptionState &)49 AudioParamMap::StartIteration(ScriptState*, ExceptionState&) {
50 return MakeGarbageCollected<AudioParamMapIterationSource>(parameter_map_);
51 }
52
GetMapEntry(ScriptState *,const String & key,AudioParam * & audio_param,ExceptionState &)53 bool AudioParamMap::GetMapEntry(ScriptState*,
54 const String& key,
55 AudioParam*& audio_param,
56 ExceptionState&) {
57 if (parameter_map_.Contains(key)) {
58 audio_param = parameter_map_.at(key);
59 return true;
60 }
61
62 return false;
63 }
64
65 } // namespace blink
66