glue_manager.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. ResultVal<ApplicationLaunchProperty> ARPManager::GetLaunchProperty(u64 title_id) const {
  13. if (title_id == 0) {
  14. return ERR_INVALID_PROCESS_ID;
  15. }
  16. const auto iter = entries.find(title_id);
  17. if (iter == entries.end()) {
  18. return ERR_NOT_REGISTERED;
  19. }
  20. return iter->second.launch;
  21. }
  22. ResultVal<std::vector<u8>> ARPManager::GetControlProperty(u64 title_id) const {
  23. if (title_id == 0) {
  24. return ERR_INVALID_PROCESS_ID;
  25. }
  26. const auto iter = entries.find(title_id);
  27. if (iter == entries.end()) {
  28. return ERR_NOT_REGISTERED;
  29. }
  30. return iter->second.control;
  31. }
  32. Result ARPManager::Register(u64 title_id, ApplicationLaunchProperty launch,
  33. std::vector<u8> control) {
  34. if (title_id == 0) {
  35. return ERR_INVALID_PROCESS_ID;
  36. }
  37. const auto iter = entries.find(title_id);
  38. if (iter != entries.end()) {
  39. return ERR_INVALID_ACCESS;
  40. }
  41. entries.insert_or_assign(title_id, MapEntry{launch, std::move(control)});
  42. return ResultSuccess;
  43. }
  44. Result ARPManager::Unregister(u64 title_id) {
  45. if (title_id == 0) {
  46. return ERR_INVALID_PROCESS_ID;
  47. }
  48. const auto iter = entries.find(title_id);
  49. if (iter == entries.end()) {
  50. return ERR_NOT_REGISTERED;
  51. }
  52. entries.erase(iter);
  53. return ResultSuccess;
  54. }
  55. void ARPManager::ResetAll() {
  56. entries.clear();
  57. }
  58. } // namespace Service::Glue