glue_manager.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "core/hle/service/glue/errors.h"
  4. #include "core/hle/service/glue/glue_manager.h"
  5. namespace Service::Glue {
  6. struct ARPManager::MapEntry {
  7. ApplicationLaunchProperty launch;
  8. std::vector<u8> control;
  9. };
  10. ARPManager::ARPManager() = default;
  11. ARPManager::~ARPManager() = default;
  12. Result ARPManager::GetLaunchProperty(ApplicationLaunchProperty* out_launch_property,
  13. u64 title_id) const {
  14. if (title_id == 0) {
  15. return Glue::ResultInvalidProcessId;
  16. }
  17. const auto iter = entries.find(title_id);
  18. if (iter == entries.end()) {
  19. return Glue::ResultProcessIdNotRegistered;
  20. }
  21. *out_launch_property = iter->second.launch;
  22. return ResultSuccess;
  23. }
  24. Result ARPManager::GetControlProperty(std::vector<u8>* out_control_property, u64 title_id) const {
  25. if (title_id == 0) {
  26. return Glue::ResultInvalidProcessId;
  27. }
  28. const auto iter = entries.find(title_id);
  29. if (iter == entries.end()) {
  30. return Glue::ResultProcessIdNotRegistered;
  31. }
  32. *out_control_property = iter->second.control;
  33. return ResultSuccess;
  34. }
  35. Result ARPManager::Register(u64 title_id, ApplicationLaunchProperty launch,
  36. std::vector<u8> control) {
  37. if (title_id == 0) {
  38. return Glue::ResultInvalidProcessId;
  39. }
  40. const auto iter = entries.find(title_id);
  41. if (iter != entries.end()) {
  42. return Glue::ResultAlreadyBound;
  43. }
  44. entries.insert_or_assign(title_id, MapEntry{launch, std::move(control)});
  45. return ResultSuccess;
  46. }
  47. Result ARPManager::Unregister(u64 title_id) {
  48. if (title_id == 0) {
  49. return Glue::ResultInvalidProcessId;
  50. }
  51. const auto iter = entries.find(title_id);
  52. if (iter == entries.end()) {
  53. return Glue::ResultProcessIdNotRegistered;
  54. }
  55. entries.erase(iter);
  56. return ResultSuccess;
  57. }
  58. void ARPManager::ResetAll() {
  59. entries.clear();
  60. }
  61. } // namespace Service::Glue