BOSS service serialization

This commit is contained in:
Hamish Milne 2019-12-25 23:19:01 +00:00 committed by zhupengfei
parent 5265c79056
commit 1185d62792
7 changed files with 56 additions and 2 deletions

2
TODO
View file

@ -65,7 +65,7 @@
✔ ACT @done(19-12-24 23:17) ✔ ACT @done(19-12-24 23:17)
✔ AM @started(19-12-24 23:17) @done(19-12-24 23:53) @lasted(36m8s) ✔ AM @started(19-12-24 23:17) @done(19-12-24 23:53) @lasted(36m8s)
✔ APT @done(19-12-25 21:41) ✔ APT @done(19-12-25 21:41)
☐ BOSS ✔ BOSS @started(19-12-25 21:48) @done(19-12-25 23:18) @lasted(1h30m14s)
☐ CAM ☐ CAM
☐ CECD ☐ CECD
☐ CGF ☐ CGF

View file

@ -608,6 +608,14 @@ public:
protected: protected:
bool application_reset_prepared{}; bool application_reset_prepared{};
std::shared_ptr<Module> apt; std::shared_ptr<Module> apt;
private:
template <class Archive>
void serialize(Archive& ar, const unsigned int)
{
ar & application_reset_prepared;
}
friend class boost::serialization::access;
}; };
private: private:

View file

@ -5,8 +5,10 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include <boost/serialization/shared_ptr.hpp>
#include "core/hle/kernel/event.h" #include "core/hle/kernel/event.h"
#include "core/hle/service/service.h" #include "core/hle/service/service.h"
#include "core/global.h"
namespace Core { namespace Core {
class System; class System;
@ -952,19 +954,45 @@ public:
*/ */
void GetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx); void GetNsDataNewFlagPrivileged(Kernel::HLERequestContext& ctx);
private: protected:
std::shared_ptr<Module> boss; std::shared_ptr<Module> boss;
private:
u8 new_arrival_flag; u8 new_arrival_flag;
u8 ns_data_new_flag; u8 ns_data_new_flag;
u8 ns_data_new_flag_privileged; u8 ns_data_new_flag_privileged;
u8 output_flag; u8 output_flag;
template <class Archive>
void serialize(Archive& ar, const unsigned int)
{
ar & new_arrival_flag;
ar & ns_data_new_flag;
ar & ns_data_new_flag_privileged;
ar & output_flag;
}
friend class boost::serialization::access;
}; };
private: private:
std::shared_ptr<Kernel::Event> task_finish_event; std::shared_ptr<Kernel::Event> task_finish_event;
template <class Archive>
void serialize(Archive& ar, const unsigned int)
{
ar & task_finish_event;
}
friend class boost::serialization::access;
}; };
void InstallInterfaces(Core::System& system); void InstallInterfaces(Core::System& system);
} // namespace Service::BOSS } // namespace Service::BOSS
namespace boost::serialization {
template <class Archive>
inline void load_construct_data(Archive& ar, Service::BOSS::Module* t, const unsigned int)
{
::new(t)Service::BOSS::Module(Core::Global<Core::System>());
}
}

View file

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "core/hle/service/boss/boss_p.h" #include "core/hle/service/boss/boss_p.h"
#include "common/archives.h"
namespace Service::BOSS { namespace Service::BOSS {
@ -84,3 +85,5 @@ BOSS_P::BOSS_P(std::shared_ptr<Module> boss)
} }
} // namespace Service::BOSS } // namespace Service::BOSS
SERIALIZE_EXPORT_IMPL(Service::BOSS::BOSS_P)

View file

@ -11,6 +11,12 @@ namespace Service::BOSS {
class BOSS_P final : public Module::Interface { class BOSS_P final : public Module::Interface {
public: public:
explicit BOSS_P(std::shared_ptr<Module> boss); explicit BOSS_P(std::shared_ptr<Module> boss);
private:
SERVICE_SERIALIZATION(BOSS_P, boss, Module)
}; };
} // namespace Service::BOSS } // namespace Service::BOSS
BOOST_CLASS_EXPORT_KEY(Service::BOSS::BOSS_P)
BOOST_SERIALIZATION_CONSTRUCT(Service::BOSS::BOSS_P)

View file

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "core/hle/service/boss/boss_u.h" #include "core/hle/service/boss/boss_u.h"
#include "common/archives.h"
namespace Service::BOSS { namespace Service::BOSS {
@ -72,3 +73,5 @@ BOSS_U::BOSS_U(std::shared_ptr<Module> boss)
} }
} // namespace Service::BOSS } // namespace Service::BOSS
SERIALIZE_EXPORT_IMPL(Service::BOSS::BOSS_U)

View file

@ -11,6 +11,12 @@ namespace Service::BOSS {
class BOSS_U final : public Module::Interface { class BOSS_U final : public Module::Interface {
public: public:
explicit BOSS_U(std::shared_ptr<Module> boss); explicit BOSS_U(std::shared_ptr<Module> boss);
private:
SERVICE_SERIALIZATION(BOSS_U, boss, Module)
}; };
} // namespace Service::BOSS } // namespace Service::BOSS
BOOST_CLASS_EXPORT_KEY(Service::BOSS::BOSS_U)
BOOST_SERIALIZATION_CONSTRUCT(Service::BOSS::BOSS_U)