mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	profile_manager: Use std::optional instead of boost::optional
Now that we can actually use std::optional on macOS, we don't need to continue using boost::optional here.
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include <random>
 | 
			
		||||
#include <boost/optional.hpp>
 | 
			
		||||
 | 
			
		||||
#include "common/file_util.h"
 | 
			
		||||
#include "core/hle/service/acc/profile_manager.h"
 | 
			
		||||
#include "core/settings.h"
 | 
			
		||||
@@ -58,11 +58,11 @@ ProfileManager::~ProfileManager() {
 | 
			
		||||
 | 
			
		||||
/// After a users creation it needs to be "registered" to the system. AddToProfiles handles the
 | 
			
		||||
/// internal management of the users profiles
 | 
			
		||||
boost::optional<std::size_t> ProfileManager::AddToProfiles(const ProfileInfo& user) {
 | 
			
		||||
std::optional<std::size_t> ProfileManager::AddToProfiles(const ProfileInfo& profile) {
 | 
			
		||||
    if (user_count >= MAX_USERS) {
 | 
			
		||||
        return boost::none;
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
    profiles[user_count] = user;
 | 
			
		||||
    profiles[user_count] = profile;
 | 
			
		||||
    return user_count++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -81,7 +81,7 @@ bool ProfileManager::RemoveProfileAtIndex(std::size_t index) {
 | 
			
		||||
 | 
			
		||||
/// Helper function to register a user to the system
 | 
			
		||||
ResultCode ProfileManager::AddUser(const ProfileInfo& user) {
 | 
			
		||||
    if (AddToProfiles(user) == boost::none) {
 | 
			
		||||
    if (!AddToProfiles(user)) {
 | 
			
		||||
        return ERROR_TOO_MANY_USERS;
 | 
			
		||||
    }
 | 
			
		||||
    return RESULT_SUCCESS;
 | 
			
		||||
@@ -126,37 +126,40 @@ ResultCode ProfileManager::CreateNewUser(UUID uuid, const std::string& username)
 | 
			
		||||
    return CreateNewUser(uuid, username_output);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
boost::optional<UUID> ProfileManager::GetUser(std::size_t index) const {
 | 
			
		||||
    if (index >= MAX_USERS)
 | 
			
		||||
        return boost::none;
 | 
			
		||||
std::optional<UUID> ProfileManager::GetUser(std::size_t index) const {
 | 
			
		||||
    if (index >= MAX_USERS) {
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return profiles[index].user_uuid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns a users profile index based on their user id.
 | 
			
		||||
boost::optional<std::size_t> ProfileManager::GetUserIndex(const UUID& uuid) const {
 | 
			
		||||
std::optional<std::size_t> ProfileManager::GetUserIndex(const UUID& uuid) const {
 | 
			
		||||
    if (!uuid) {
 | 
			
		||||
        return boost::none;
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
    auto iter = std::find_if(profiles.begin(), profiles.end(),
 | 
			
		||||
                             [&uuid](const ProfileInfo& p) { return p.user_uuid == uuid; });
 | 
			
		||||
 | 
			
		||||
    const auto iter = std::find_if(profiles.begin(), profiles.end(),
 | 
			
		||||
                                   [&uuid](const ProfileInfo& p) { return p.user_uuid == uuid; });
 | 
			
		||||
    if (iter == profiles.end()) {
 | 
			
		||||
        return boost::none;
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return static_cast<std::size_t>(std::distance(profiles.begin(), iter));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns a users profile index based on their profile
 | 
			
		||||
boost::optional<std::size_t> ProfileManager::GetUserIndex(const ProfileInfo& user) const {
 | 
			
		||||
std::optional<std::size_t> ProfileManager::GetUserIndex(const ProfileInfo& user) const {
 | 
			
		||||
    return GetUserIndex(user.user_uuid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Returns the data structure used by the switch when GetProfileBase is called on acc:*
 | 
			
		||||
bool ProfileManager::GetProfileBase(boost::optional<std::size_t> index,
 | 
			
		||||
                                    ProfileBase& profile) const {
 | 
			
		||||
    if (index == boost::none || index >= MAX_USERS) {
 | 
			
		||||
bool ProfileManager::GetProfileBase(std::optional<std::size_t> index, ProfileBase& profile) const {
 | 
			
		||||
    if (!index || index >= MAX_USERS) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    const auto& prof_info = profiles[index.get()];
 | 
			
		||||
    const auto& prof_info = profiles[*index];
 | 
			
		||||
    profile.user_uuid = prof_info.user_uuid;
 | 
			
		||||
    profile.username = prof_info.username;
 | 
			
		||||
    profile.timestamp = prof_info.creation_time;
 | 
			
		||||
@@ -165,7 +168,7 @@ bool ProfileManager::GetProfileBase(boost::optional<std::size_t> index,
 | 
			
		||||
 | 
			
		||||
/// Returns the data structure used by the switch when GetProfileBase is called on acc:*
 | 
			
		||||
bool ProfileManager::GetProfileBase(UUID uuid, ProfileBase& profile) const {
 | 
			
		||||
    auto idx = GetUserIndex(uuid);
 | 
			
		||||
    const auto idx = GetUserIndex(uuid);
 | 
			
		||||
    return GetProfileBase(idx, profile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -192,7 +195,7 @@ std::size_t ProfileManager::GetOpenUserCount() const {
 | 
			
		||||
 | 
			
		||||
/// Checks if a user id exists in our profile manager
 | 
			
		||||
bool ProfileManager::UserExists(UUID uuid) const {
 | 
			
		||||
    return (GetUserIndex(uuid) != boost::none);
 | 
			
		||||
    return GetUserIndex(uuid) != std::nullopt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProfileManager::UserExistsIndex(std::size_t index) const {
 | 
			
		||||
@@ -203,21 +206,23 @@ bool ProfileManager::UserExistsIndex(std::size_t index) const {
 | 
			
		||||
 | 
			
		||||
/// Opens a specific user
 | 
			
		||||
void ProfileManager::OpenUser(UUID uuid) {
 | 
			
		||||
    auto idx = GetUserIndex(uuid);
 | 
			
		||||
    if (idx == boost::none) {
 | 
			
		||||
    const auto idx = GetUserIndex(uuid);
 | 
			
		||||
    if (!idx) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    profiles[idx.get()].is_open = true;
 | 
			
		||||
 | 
			
		||||
    profiles[*idx].is_open = true;
 | 
			
		||||
    last_opened_user = uuid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Closes a specific user
 | 
			
		||||
void ProfileManager::CloseUser(UUID uuid) {
 | 
			
		||||
    auto idx = GetUserIndex(uuid);
 | 
			
		||||
    if (idx == boost::none) {
 | 
			
		||||
    const auto idx = GetUserIndex(uuid);
 | 
			
		||||
    if (!idx) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    profiles[idx.get()].is_open = false;
 | 
			
		||||
 | 
			
		||||
    profiles[*idx].is_open = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Gets all valid user ids on the system
 | 
			
		||||
@@ -247,10 +252,10 @@ UUID ProfileManager::GetLastOpenedUser() const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Return the users profile base and the unknown arbitary data.
 | 
			
		||||
bool ProfileManager::GetProfileBaseAndData(boost::optional<std::size_t> index, ProfileBase& profile,
 | 
			
		||||
bool ProfileManager::GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
 | 
			
		||||
                                           ProfileData& data) const {
 | 
			
		||||
    if (GetProfileBase(index, profile)) {
 | 
			
		||||
        data = profiles[index.get()].data;
 | 
			
		||||
        data = profiles[*index].data;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
@@ -259,7 +264,7 @@ bool ProfileManager::GetProfileBaseAndData(boost::optional<std::size_t> index, P
 | 
			
		||||
/// Return the users profile base and the unknown arbitary data.
 | 
			
		||||
bool ProfileManager::GetProfileBaseAndData(UUID uuid, ProfileBase& profile,
 | 
			
		||||
                                           ProfileData& data) const {
 | 
			
		||||
    auto idx = GetUserIndex(uuid);
 | 
			
		||||
    const auto idx = GetUserIndex(uuid);
 | 
			
		||||
    return GetProfileBaseAndData(idx, profile, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -277,8 +282,8 @@ bool ProfileManager::CanSystemRegisterUser() const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProfileManager::RemoveUser(UUID uuid) {
 | 
			
		||||
    auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (index == boost::none) {
 | 
			
		||||
    const auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (!index) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -289,8 +294,8 @@ bool ProfileManager::RemoveUser(UUID uuid) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) {
 | 
			
		||||
    auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (profile_new.user_uuid == UUID(INVALID_UUID) || index == boost::none) {
 | 
			
		||||
    const auto index = GetUserIndex(uuid);
 | 
			
		||||
    if (!index || profile_new.user_uuid == UUID(INVALID_UUID)) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,8 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <array>
 | 
			
		||||
#include <optional>
 | 
			
		||||
 | 
			
		||||
#include "boost/optional.hpp"
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "common/swap.h"
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
@@ -96,13 +96,13 @@ public:
 | 
			
		||||
    ResultCode AddUser(const ProfileInfo& user);
 | 
			
		||||
    ResultCode CreateNewUser(UUID uuid, const ProfileUsername& username);
 | 
			
		||||
    ResultCode CreateNewUser(UUID uuid, const std::string& username);
 | 
			
		||||
    boost::optional<UUID> GetUser(std::size_t index) const;
 | 
			
		||||
    boost::optional<std::size_t> GetUserIndex(const UUID& uuid) const;
 | 
			
		||||
    boost::optional<std::size_t> GetUserIndex(const ProfileInfo& user) const;
 | 
			
		||||
    bool GetProfileBase(boost::optional<std::size_t> index, ProfileBase& profile) const;
 | 
			
		||||
    std::optional<UUID> GetUser(std::size_t index) const;
 | 
			
		||||
    std::optional<std::size_t> GetUserIndex(const UUID& uuid) const;
 | 
			
		||||
    std::optional<std::size_t> GetUserIndex(const ProfileInfo& user) const;
 | 
			
		||||
    bool GetProfileBase(std::optional<std::size_t> index, ProfileBase& profile) const;
 | 
			
		||||
    bool GetProfileBase(UUID uuid, ProfileBase& profile) const;
 | 
			
		||||
    bool GetProfileBase(const ProfileInfo& user, ProfileBase& profile) const;
 | 
			
		||||
    bool GetProfileBaseAndData(boost::optional<std::size_t> index, ProfileBase& profile,
 | 
			
		||||
    bool GetProfileBaseAndData(std::optional<std::size_t> index, ProfileBase& profile,
 | 
			
		||||
                               ProfileData& data) const;
 | 
			
		||||
    bool GetProfileBaseAndData(UUID uuid, ProfileBase& profile, ProfileData& data) const;
 | 
			
		||||
    bool GetProfileBaseAndData(const ProfileInfo& user, ProfileBase& profile,
 | 
			
		||||
@@ -120,16 +120,16 @@ public:
 | 
			
		||||
    bool CanSystemRegisterUser() const;
 | 
			
		||||
 | 
			
		||||
    bool RemoveUser(UUID uuid);
 | 
			
		||||
    bool SetProfileBase(UUID uuid, const ProfileBase& profile);
 | 
			
		||||
    bool SetProfileBase(UUID uuid, const ProfileBase& profile_new);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void ParseUserSaveFile();
 | 
			
		||||
    void WriteUserSaveFile();
 | 
			
		||||
    std::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);
 | 
			
		||||
    bool RemoveProfileAtIndex(std::size_t index);
 | 
			
		||||
 | 
			
		||||
    std::array<ProfileInfo, MAX_USERS> profiles{};
 | 
			
		||||
    std::size_t user_count = 0;
 | 
			
		||||
    boost::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);
 | 
			
		||||
    bool RemoveProfileAtIndex(std::size_t index);
 | 
			
		||||
    UUID last_opened_user{INVALID_UUID};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -743,7 +743,7 @@ void IApplicationFunctions::PopLaunchParameter(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    Account::ProfileManager profile_manager{};
 | 
			
		||||
    const auto uuid = profile_manager.GetUser(Settings::values.current_user);
 | 
			
		||||
    ASSERT(uuid != boost::none);
 | 
			
		||||
    ASSERT(uuid != std::nullopt);
 | 
			
		||||
    params.current_user = uuid->uuid;
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user