Browse Source

Fix mem leak in game_controller.cpp

pull/2627/head
Vladimir Olteanu 5 years ago committed by Anders Jenbo
parent
commit
61fac447cf
  1. 18
      Source/controls/devices/game_controller.cpp
  2. 2
      Source/controls/devices/game_controller.h

18
Source/controls/devices/game_controller.cpp

@ -15,7 +15,7 @@ namespace devilution {
// Defined in SourceX/controls/plctrls.cpp
extern bool sgbControllerActive;
std::vector<GameController> *const GameController::controllers_ = new std::vector<GameController>;
std::vector<GameController> GameController::controllers_;
ControllerButton GameController::ToControllerButton(const SDL_Event &event)
{
@ -165,7 +165,7 @@ void GameController::Add(int joystickIndex)
}
SDL_Joystick *const sdlJoystick = SDL_GameControllerGetJoystick(result.sdl_game_controller_);
result.instance_id_ = SDL_JoystickInstanceID(sdlJoystick);
controllers_->push_back(result);
controllers_.push_back(result);
const SDL_JoystickGUID guid = SDL_JoystickGetGUID(sdlJoystick);
SDLUniquePtr<char> mapping { SDL_GameControllerMappingForGUID(guid) };
@ -177,12 +177,12 @@ void GameController::Add(int joystickIndex)
void GameController::Remove(SDL_JoystickID instanceId)
{
Log("Removing game controller with instance id {}", instanceId);
for (std::size_t i = 0; i < controllers_->size(); ++i) {
const GameController &controller = (*controllers_)[i];
for (std::size_t i = 0; i < controllers_.size(); ++i) {
const GameController &controller = controllers_[i];
if (controller.instance_id_ != instanceId)
continue;
controllers_->erase(controllers_->begin() + i);
sgbControllerActive = !controllers_->empty();
controllers_.erase(controllers_.begin() + i);
sgbControllerActive = !controllers_.empty();
return;
}
Log("Game controller not found with instance id: {}", instanceId);
@ -190,7 +190,7 @@ void GameController::Remove(SDL_JoystickID instanceId)
GameController *GameController::Get(SDL_JoystickID instanceId)
{
for (auto &controller : *controllers_) {
for (auto &controller : controllers_) {
if (controller.instance_id_ == instanceId)
return &controller;
}
@ -212,12 +212,12 @@ GameController *GameController::Get(const SDL_Event &event)
const std::vector<GameController> &GameController::All()
{
return *controllers_;
return controllers_;
}
bool GameController::IsPressedOnAnyController(ControllerButton button)
{
for (auto &controller : *controllers_)
for (auto &controller : controllers_)
if (controller.IsPressed(button))
return true;
return false;

2
Source/controls/devices/game_controller.h

@ -11,7 +11,7 @@
namespace devilution {
class GameController {
static std::vector<GameController> *const controllers_;
static std::vector<GameController> controllers_;
public:
static void Add(int joystickIndex);

Loading…
Cancel
Save