mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	core: Initialize several structs that make use of Common::UUID.
This commit is contained in:
		
							parent
							
								
									624a0f7f3f
								
							
						
					
					
						commit
						5135b74179
					
				@ -211,7 +211,7 @@ protected:
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ProfileManager& profile_manager;
 | 
			
		||||
    Common::UUID user_id; ///< The user id this profile refers to.
 | 
			
		||||
    Common::UUID user_id{Common::INVALID_UUID}; ///< The user id this profile refers to.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class IProfile final : public IProfileCommon {
 | 
			
		||||
 | 
			
		||||
@ -16,17 +16,17 @@ namespace Service::Account {
 | 
			
		||||
using Common::UUID;
 | 
			
		||||
 | 
			
		||||
struct UserRaw {
 | 
			
		||||
    UUID uuid;
 | 
			
		||||
    UUID uuid2;
 | 
			
		||||
    u64 timestamp;
 | 
			
		||||
    ProfileUsername username;
 | 
			
		||||
    ProfileData extra_data;
 | 
			
		||||
    UUID uuid{Common::INVALID_UUID};
 | 
			
		||||
    UUID uuid2{Common::INVALID_UUID};
 | 
			
		||||
    u64 timestamp{};
 | 
			
		||||
    ProfileUsername username{};
 | 
			
		||||
    ProfileData extra_data{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(UserRaw) == 0xC8, "UserRaw has incorrect size.");
 | 
			
		||||
 | 
			
		||||
struct ProfileDataRaw {
 | 
			
		||||
    INSERT_PADDING_BYTES(0x10);
 | 
			
		||||
    std::array<UserRaw, MAX_USERS> users;
 | 
			
		||||
    std::array<UserRaw, MAX_USERS> users{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(ProfileDataRaw) == 0x650, "ProfileDataRaw has incorrect size.");
 | 
			
		||||
 | 
			
		||||
@ -238,7 +238,7 @@ UserIDArray ProfileManager::GetOpenUsers() const {
 | 
			
		||||
    std::transform(profiles.begin(), profiles.end(), output.begin(), [](const ProfileInfo& p) {
 | 
			
		||||
        if (p.is_open)
 | 
			
		||||
            return p.user_uuid;
 | 
			
		||||
        return UUID{};
 | 
			
		||||
        return UUID{Common::INVALID_UUID};
 | 
			
		||||
    });
 | 
			
		||||
    std::stable_partition(output.begin(), output.end(), [](const UUID& uuid) { return uuid; });
 | 
			
		||||
    return output;
 | 
			
		||||
 | 
			
		||||
@ -13,9 +13,10 @@
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::Account {
 | 
			
		||||
constexpr std::size_t MAX_USERS = 8;
 | 
			
		||||
 | 
			
		||||
constexpr std::size_t profile_username_size = 32;
 | 
			
		||||
constexpr std::size_t MAX_USERS{8};
 | 
			
		||||
constexpr std::size_t profile_username_size{32};
 | 
			
		||||
 | 
			
		||||
using ProfileUsername = std::array<u8, profile_username_size>;
 | 
			
		||||
using UserIDArray = std::array<Common::UUID, MAX_USERS>;
 | 
			
		||||
 | 
			
		||||
@ -23,8 +24,8 @@ using UserIDArray = std::array<Common::UUID, MAX_USERS>;
 | 
			
		||||
/// TODO: RE this structure
 | 
			
		||||
struct ProfileData {
 | 
			
		||||
    INSERT_PADDING_WORDS(1);
 | 
			
		||||
    u32 icon_id;
 | 
			
		||||
    u8 bg_color_id;
 | 
			
		||||
    u32 icon_id{};
 | 
			
		||||
    u8 bg_color_id{};
 | 
			
		||||
    INSERT_PADDING_BYTES(0x7);
 | 
			
		||||
    INSERT_PADDING_BYTES(0x10);
 | 
			
		||||
    INSERT_PADDING_BYTES(0x60);
 | 
			
		||||
@ -34,17 +35,17 @@ static_assert(sizeof(ProfileData) == 0x80, "ProfileData structure has incorrect
 | 
			
		||||
/// This holds general information about a users profile. This is where we store all the information
 | 
			
		||||
/// based on a specific user
 | 
			
		||||
struct ProfileInfo {
 | 
			
		||||
    Common::UUID user_uuid;
 | 
			
		||||
    ProfileUsername username;
 | 
			
		||||
    u64 creation_time;
 | 
			
		||||
    ProfileData data; // TODO(ognik): Work out what this is
 | 
			
		||||
    bool is_open;
 | 
			
		||||
    Common::UUID user_uuid{Common::INVALID_UUID};
 | 
			
		||||
    ProfileUsername username{};
 | 
			
		||||
    u64 creation_time{};
 | 
			
		||||
    ProfileData data{}; // TODO(ognik): Work out what this is
 | 
			
		||||
    bool is_open{};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ProfileBase {
 | 
			
		||||
    Common::UUID user_uuid;
 | 
			
		||||
    u64_le timestamp;
 | 
			
		||||
    ProfileUsername username;
 | 
			
		||||
    Common::UUID user_uuid{Common::INVALID_UUID};
 | 
			
		||||
    u64_le timestamp{};
 | 
			
		||||
    ProfileUsername username{};
 | 
			
		||||
 | 
			
		||||
    // Zero out all the fields to make the profile slot considered "Empty"
 | 
			
		||||
    void Invalidate() {
 | 
			
		||||
@ -101,7 +102,7 @@ private:
 | 
			
		||||
    bool RemoveProfileAtIndex(std::size_t index);
 | 
			
		||||
 | 
			
		||||
    std::array<ProfileInfo, MAX_USERS> profiles{};
 | 
			
		||||
    std::size_t user_count = 0;
 | 
			
		||||
    std::size_t user_count{};
 | 
			
		||||
    Common::UUID last_opened_user{Common::INVALID_UUID};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -241,7 +241,7 @@ private:
 | 
			
		||||
        bool has_received_friend_request;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    Common::UUID uuid;
 | 
			
		||||
    Common::UUID uuid{Common::INVALID_UUID};
 | 
			
		||||
    Kernel::EventPair notification_event;
 | 
			
		||||
    std::queue<SizedNotificationInfo> notifications;
 | 
			
		||||
    States states{};
 | 
			
		||||
 | 
			
		||||
@ -10,13 +10,13 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Mii {
 | 
			
		||||
 | 
			
		||||
constexpr std::size_t MAX_MIIS = 100;
 | 
			
		||||
constexpr u32 INVALID_INDEX = 0xFFFFFFFF;
 | 
			
		||||
constexpr std::size_t MAX_MIIS{100};
 | 
			
		||||
constexpr u32 INVALID_INDEX{0xFFFFFFFF};
 | 
			
		||||
 | 
			
		||||
struct RandomParameters {
 | 
			
		||||
    u32 unknown_1;
 | 
			
		||||
    u32 unknown_2;
 | 
			
		||||
    u32 unknown_3;
 | 
			
		||||
    u32 unknown_1{};
 | 
			
		||||
    u32 unknown_2{};
 | 
			
		||||
    u32 unknown_3{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(RandomParameters) == 0xC, "RandomParameters has incorrect size.");
 | 
			
		||||
 | 
			
		||||
@ -30,57 +30,57 @@ enum class Source : u32 {
 | 
			
		||||
std::ostream& operator<<(std::ostream& os, Source source);
 | 
			
		||||
 | 
			
		||||
struct MiiInfo {
 | 
			
		||||
    Common::UUID uuid;
 | 
			
		||||
    std::array<char16_t, 11> name;
 | 
			
		||||
    u8 font_region;
 | 
			
		||||
    u8 favorite_color;
 | 
			
		||||
    u8 gender;
 | 
			
		||||
    u8 height;
 | 
			
		||||
    u8 weight;
 | 
			
		||||
    u8 mii_type;
 | 
			
		||||
    u8 mii_region;
 | 
			
		||||
    u8 face_type;
 | 
			
		||||
    u8 face_color;
 | 
			
		||||
    u8 face_wrinkle;
 | 
			
		||||
    u8 face_makeup;
 | 
			
		||||
    u8 hair_type;
 | 
			
		||||
    u8 hair_color;
 | 
			
		||||
    bool hair_flip;
 | 
			
		||||
    u8 eye_type;
 | 
			
		||||
    u8 eye_color;
 | 
			
		||||
    u8 eye_scale;
 | 
			
		||||
    u8 eye_aspect_ratio;
 | 
			
		||||
    u8 eye_rotate;
 | 
			
		||||
    u8 eye_x;
 | 
			
		||||
    u8 eye_y;
 | 
			
		||||
    u8 eyebrow_type;
 | 
			
		||||
    u8 eyebrow_color;
 | 
			
		||||
    u8 eyebrow_scale;
 | 
			
		||||
    u8 eyebrow_aspect_ratio;
 | 
			
		||||
    u8 eyebrow_rotate;
 | 
			
		||||
    u8 eyebrow_x;
 | 
			
		||||
    u8 eyebrow_y;
 | 
			
		||||
    u8 nose_type;
 | 
			
		||||
    u8 nose_scale;
 | 
			
		||||
    u8 nose_y;
 | 
			
		||||
    u8 mouth_type;
 | 
			
		||||
    u8 mouth_color;
 | 
			
		||||
    u8 mouth_scale;
 | 
			
		||||
    u8 mouth_aspect_ratio;
 | 
			
		||||
    u8 mouth_y;
 | 
			
		||||
    u8 facial_hair_color;
 | 
			
		||||
    u8 beard_type;
 | 
			
		||||
    u8 mustache_type;
 | 
			
		||||
    u8 mustache_scale;
 | 
			
		||||
    u8 mustache_y;
 | 
			
		||||
    u8 glasses_type;
 | 
			
		||||
    u8 glasses_color;
 | 
			
		||||
    u8 glasses_scale;
 | 
			
		||||
    u8 glasses_y;
 | 
			
		||||
    u8 mole_type;
 | 
			
		||||
    u8 mole_scale;
 | 
			
		||||
    u8 mole_x;
 | 
			
		||||
    u8 mole_y;
 | 
			
		||||
    Common::UUID uuid{Common::INVALID_UUID};
 | 
			
		||||
    std::array<char16_t, 11> name{};
 | 
			
		||||
    u8 font_region{};
 | 
			
		||||
    u8 favorite_color{};
 | 
			
		||||
    u8 gender{};
 | 
			
		||||
    u8 height{};
 | 
			
		||||
    u8 weight{};
 | 
			
		||||
    u8 mii_type{};
 | 
			
		||||
    u8 mii_region{};
 | 
			
		||||
    u8 face_type{};
 | 
			
		||||
    u8 face_color{};
 | 
			
		||||
    u8 face_wrinkle{};
 | 
			
		||||
    u8 face_makeup{};
 | 
			
		||||
    u8 hair_type{};
 | 
			
		||||
    u8 hair_color{};
 | 
			
		||||
    bool hair_flip{};
 | 
			
		||||
    u8 eye_type{};
 | 
			
		||||
    u8 eye_color{};
 | 
			
		||||
    u8 eye_scale{};
 | 
			
		||||
    u8 eye_aspect_ratio{};
 | 
			
		||||
    u8 eye_rotate{};
 | 
			
		||||
    u8 eye_x{};
 | 
			
		||||
    u8 eye_y{};
 | 
			
		||||
    u8 eyebrow_type{};
 | 
			
		||||
    u8 eyebrow_color{};
 | 
			
		||||
    u8 eyebrow_scale{};
 | 
			
		||||
    u8 eyebrow_aspect_ratio{};
 | 
			
		||||
    u8 eyebrow_rotate{};
 | 
			
		||||
    u8 eyebrow_x{};
 | 
			
		||||
    u8 eyebrow_y{};
 | 
			
		||||
    u8 nose_type{};
 | 
			
		||||
    u8 nose_scale{};
 | 
			
		||||
    u8 nose_y{};
 | 
			
		||||
    u8 mouth_type{};
 | 
			
		||||
    u8 mouth_color{};
 | 
			
		||||
    u8 mouth_scale{};
 | 
			
		||||
    u8 mouth_aspect_ratio{};
 | 
			
		||||
    u8 mouth_y{};
 | 
			
		||||
    u8 facial_hair_color{};
 | 
			
		||||
    u8 beard_type{};
 | 
			
		||||
    u8 mustache_type{};
 | 
			
		||||
    u8 mustache_scale{};
 | 
			
		||||
    u8 mustache_y{};
 | 
			
		||||
    u8 glasses_type{};
 | 
			
		||||
    u8 glasses_color{};
 | 
			
		||||
    u8 glasses_scale{};
 | 
			
		||||
    u8 glasses_y{};
 | 
			
		||||
    u8 mole_type{};
 | 
			
		||||
    u8 mole_scale{};
 | 
			
		||||
    u8 mole_x{};
 | 
			
		||||
    u8 mole_y{};
 | 
			
		||||
    INSERT_PADDING_BYTES(1);
 | 
			
		||||
 | 
			
		||||
    std::u16string Name() const;
 | 
			
		||||
@ -94,14 +94,14 @@ bool operator!=(const MiiInfo& lhs, const MiiInfo& rhs);
 | 
			
		||||
 | 
			
		||||
#pragma pack(push, 4)
 | 
			
		||||
struct MiiInfoElement {
 | 
			
		||||
    MiiInfo info;
 | 
			
		||||
    Source source;
 | 
			
		||||
    MiiInfo info{};
 | 
			
		||||
    Source source{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(MiiInfoElement) == 0x5C, "MiiInfoElement has incorrect size.");
 | 
			
		||||
 | 
			
		||||
struct MiiStoreBitFields {
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_0;
 | 
			
		||||
        u32 word_0{};
 | 
			
		||||
 | 
			
		||||
        BitField<24, 8, u32> hair_type;
 | 
			
		||||
        BitField<23, 1, u32> mole_type;
 | 
			
		||||
@ -112,7 +112,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_1;
 | 
			
		||||
        u32 word_1{};
 | 
			
		||||
 | 
			
		||||
        BitField<31, 1, u32> gender;
 | 
			
		||||
        BitField<24, 7, u32> eye_color;
 | 
			
		||||
@ -122,7 +122,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_2;
 | 
			
		||||
        u32 word_2{};
 | 
			
		||||
 | 
			
		||||
        BitField<31, 1, u32> mii_type;
 | 
			
		||||
        BitField<24, 7, u32> glasses_color;
 | 
			
		||||
@ -135,7 +135,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_3;
 | 
			
		||||
        u32 word_3{};
 | 
			
		||||
 | 
			
		||||
        BitField<29, 3, u32> mustache_type;
 | 
			
		||||
        BitField<24, 5, u32> eyebrow_type;
 | 
			
		||||
@ -148,7 +148,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_4;
 | 
			
		||||
        u32 word_4{};
 | 
			
		||||
 | 
			
		||||
        BitField<29, 3, u32> eye_rotate;
 | 
			
		||||
        BitField<24, 5, u32> mustache_y;
 | 
			
		||||
@ -160,7 +160,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_5;
 | 
			
		||||
        u32 word_5{};
 | 
			
		||||
 | 
			
		||||
        BitField<24, 5, u32> glasses_type;
 | 
			
		||||
        BitField<20, 4, u32> face_type;
 | 
			
		||||
@ -172,7 +172,7 @@ struct MiiStoreBitFields {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    union {
 | 
			
		||||
        u32 word_6;
 | 
			
		||||
        u32 word_6{};
 | 
			
		||||
 | 
			
		||||
        BitField<28, 4, u32> eyebrow_rotate;
 | 
			
		||||
        BitField<24, 4, u32> eyebrow_scale;
 | 
			
		||||
@ -192,30 +192,30 @@ struct MiiStoreData {
 | 
			
		||||
    // This corresponds to the above structure MiiStoreBitFields. I did it like this because the
 | 
			
		||||
    // BitField<> type makes this (and any thing that contains it) not trivially copyable, which is
 | 
			
		||||
    // not suitable for our uses.
 | 
			
		||||
    std::array<u8, 0x1C> data;
 | 
			
		||||
    std::array<u8, 0x1C> data{};
 | 
			
		||||
    static_assert(sizeof(MiiStoreBitFields) == sizeof(data), "data field has incorrect size.");
 | 
			
		||||
 | 
			
		||||
    std::array<char16_t, 10> name;
 | 
			
		||||
    Common::UUID uuid;
 | 
			
		||||
    u16 crc_1;
 | 
			
		||||
    u16 crc_2;
 | 
			
		||||
    std::array<char16_t, 10> name{};
 | 
			
		||||
    Common::UUID uuid{Common::INVALID_UUID};
 | 
			
		||||
    u16 crc_1{};
 | 
			
		||||
    u16 crc_2{};
 | 
			
		||||
 | 
			
		||||
    std::u16string Name() const;
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(MiiStoreData) == 0x44, "MiiStoreData has incorrect size.");
 | 
			
		||||
 | 
			
		||||
struct MiiStoreDataElement {
 | 
			
		||||
    MiiStoreData data;
 | 
			
		||||
    Source source;
 | 
			
		||||
    MiiStoreData data{};
 | 
			
		||||
    Source source{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(MiiStoreDataElement) == 0x48, "MiiStoreDataElement has incorrect size.");
 | 
			
		||||
 | 
			
		||||
struct MiiDatabase {
 | 
			
		||||
    u32 magic; // 'NFDB'
 | 
			
		||||
    std::array<MiiStoreData, MAX_MIIS> miis;
 | 
			
		||||
    u32 magic{}; // 'NFDB'
 | 
			
		||||
    std::array<MiiStoreData, MAX_MIIS> miis{};
 | 
			
		||||
    INSERT_PADDING_BYTES(1);
 | 
			
		||||
    u8 count;
 | 
			
		||||
    u16 crc;
 | 
			
		||||
    u8 count{};
 | 
			
		||||
    u16 crc{};
 | 
			
		||||
};
 | 
			
		||||
static_assert(sizeof(MiiDatabase) == 0x1A98, "MiiDatabase has incorrect size.");
 | 
			
		||||
#pragma pack(pop)
 | 
			
		||||
@ -266,8 +266,8 @@ private:
 | 
			
		||||
    void EnsureDatabasePartition();
 | 
			
		||||
 | 
			
		||||
    MiiDatabase database;
 | 
			
		||||
    bool updated_flag = false;
 | 
			
		||||
    bool is_test_mode_enabled = false;
 | 
			
		||||
    bool updated_flag{};
 | 
			
		||||
    bool is_test_mode_enabled{};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}; // namespace Service::Mii
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user