gamepad_data_fetcher_manager.cc 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2016 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. #include "device/gamepad/gamepad_data_fetcher_manager.h"
  5. #include "device/gamepad/gamepad_data_fetcher.h"
  6. #include "device/gamepad/gamepad_platform_data_fetcher.h"
  7. namespace device {
  8. namespace {
  9. GamepadDataFetcherManager* g_gamepad_data_fetcher_manager = 0;
  10. }
  11. GamepadDataFetcherManager::GamepadDataFetcherManager() : provider_(nullptr) {}
  12. GamepadDataFetcherManager::~GamepadDataFetcherManager() = default;
  13. GamepadDataFetcherManager* GamepadDataFetcherManager::GetInstance() {
  14. if (!g_gamepad_data_fetcher_manager) {
  15. g_gamepad_data_fetcher_manager = new GamepadDataFetcherManager;
  16. // Add platform specific data fetchers
  17. AddGamepadPlatformDataFetchers(g_gamepad_data_fetcher_manager);
  18. }
  19. return g_gamepad_data_fetcher_manager;
  20. }
  21. void GamepadDataFetcherManager::AddFactory(GamepadDataFetcherFactory* factory) {
  22. factories_.push_back(factory);
  23. if (provider_) {
  24. provider_->AddGamepadDataFetcher(factory->CreateDataFetcher());
  25. }
  26. }
  27. void GamepadDataFetcherManager::RemoveSourceFactory(GamepadSource source) {
  28. if (provider_)
  29. provider_->RemoveSourceGamepadDataFetcher(source);
  30. for (auto it = factories_.begin(); it != factories_.end();) {
  31. if ((*it)->source() == source) {
  32. delete (*it);
  33. it = factories_.erase(it);
  34. } else {
  35. ++it;
  36. }
  37. }
  38. }
  39. void GamepadDataFetcherManager::InitializeProvider(GamepadProvider* provider) {
  40. DCHECK(!provider_);
  41. provider_ = provider;
  42. for (auto* it : factories_) {
  43. provider_->AddGamepadDataFetcher(it->CreateDataFetcher());
  44. }
  45. }
  46. void GamepadDataFetcherManager::ClearProvider() {
  47. provider_ = nullptr;
  48. }
  49. } // namespace device