1// Copyright 2014 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 "config.h"
6#include "modules/geolocation/GeolocationWatchers.h"
7
8#include "modules/geolocation/GeoNotifier.h"
9
10namespace blink {
11
12void GeolocationWatchers::trace(Visitor* visitor)
13{
14    visitor->trace(m_idToNotifierMap);
15    visitor->trace(m_notifierToIdMap);
16}
17
18bool GeolocationWatchers::add(int id, GeoNotifier* notifier)
19{
20    ASSERT(id > 0);
21    if (!m_idToNotifierMap.add(id, notifier).isNewEntry)
22        return false;
23    m_notifierToIdMap.set(notifier, id);
24    return true;
25}
26
27GeoNotifier* GeolocationWatchers::find(int id)
28{
29    ASSERT(id > 0);
30    IdToNotifierMap::iterator iter = m_idToNotifierMap.find(id);
31    if (iter == m_idToNotifierMap.end())
32        return 0;
33    return iter->value.get();
34}
35
36void GeolocationWatchers::remove(int id)
37{
38    ASSERT(id > 0);
39    IdToNotifierMap::iterator iter = m_idToNotifierMap.find(id);
40    if (iter == m_idToNotifierMap.end())
41        return;
42    m_notifierToIdMap.remove(iter->value);
43    m_idToNotifierMap.remove(iter);
44}
45
46void GeolocationWatchers::remove(GeoNotifier* notifier)
47{
48    NotifierToIdMap::iterator iter = m_notifierToIdMap.find(notifier);
49    if (iter == m_notifierToIdMap.end())
50        return;
51    m_idToNotifierMap.remove(iter->value);
52    m_notifierToIdMap.remove(iter);
53}
54
55bool GeolocationWatchers::contains(GeoNotifier* notifier) const
56{
57    return m_notifierToIdMap.contains(notifier);
58}
59
60void GeolocationWatchers::clear()
61{
62    m_idToNotifierMap.clear();
63    m_notifierToIdMap.clear();
64}
65
66bool GeolocationWatchers::isEmpty() const
67{
68    return m_idToNotifierMap.isEmpty();
69}
70
71void GeolocationWatchers::getNotifiersVector(HeapVector<Member<GeoNotifier> >& copy) const
72{
73    copyValuesToVector(m_idToNotifierMap, copy);
74}
75
76} // namespace blink
77