12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "services/device/geolocation/fake_position_cache.h"
- #include <algorithm>
- #include "services/device/geolocation/wifi_data.h"
- #include "services/device/public/cpp/geolocation/geoposition.h"
- namespace device {
- namespace {
- template <typename Set>
- bool SetsEqual(const Set& lhs, const Set& rhs) {
- // Since sets order elements via an operator, std::equal doesn't work. It
- // would require elements to be equal-comparable. Check if symmetric
- // difference is empty instead.
- std::vector<typename Set::value_type> symmetric_difference;
- std::set_symmetric_difference(lhs.begin(), lhs.end(), rhs.begin(), rhs.end(),
- std::back_inserter(symmetric_difference),
- typename Set::value_compare());
- return symmetric_difference.empty();
- }
- } // namespace
- FakePositionCache::FakePositionCache() = default;
- FakePositionCache::~FakePositionCache() = default;
- void FakePositionCache::CachePosition(const WifiData& wifi_data,
- const mojom::Geoposition& position) {
- data.push_back(std::make_pair(wifi_data, position));
- }
- const mojom::Geoposition* FakePositionCache::FindPosition(
- const WifiData& wifi_data) const {
- auto it = std::find_if(
- data.begin(), data.end(), [&wifi_data](const auto& candidate_pair) {
- return SetsEqual(wifi_data.access_point_data,
- candidate_pair.first.access_point_data);
- });
- return it == data.end() ? nullptr : &(it->second);
- }
- size_t FakePositionCache::GetPositionCacheSize() const {
- return data.size();
- }
- const mojom::Geoposition& FakePositionCache::GetLastUsedNetworkPosition()
- const {
- return last_used_position;
- }
- void FakePositionCache::SetLastUsedNetworkPosition(
- const mojom::Geoposition& position) {
- last_used_position = position;
- }
- } // namespace device
|