Write KEvent::Initialize, fix build issues

This commit is contained in:
TuxSH
2018-11-05 13:57:50 +01:00
committed by Michael Scire
parent a4419dfc41
commit 698fa9fcb0
12 changed files with 100 additions and 58 deletions

View File

@@ -21,12 +21,12 @@ class IClient {
ParentType *GetParent() const { return parent; }
protected:
void SetParent(SharedPtr<Parent> parent)
{
this->parent = std::move(parent);
}
protected:
SharedPtr<Parent> parent{};
};

View File

@@ -12,14 +12,15 @@ class IClientServerParent {
using ClientType = Client;
using ServerType = Server;
protected:
void SetClientServerParent()
{
Parent par = (Parent *)this;
Parent *par = (Parent *)this;
client.SetParent(par);
server.SetParent(par);
server.SetParentAndClient(par, &client);
}
protected:
ClientType client{};
ServerType server{};
};

View File

@@ -21,13 +21,14 @@ class IServer {
ParentType *GetParent() const { return parent; }
protected:
void SetParent(SharedPtr<Parent> parent)
void SetParentAndClient(SharedPtr<Parent> parent, SharedPtr<Client> client)
{
this->parent = std::move(parent);
this->client = &this->parent->client;
this->client = std::move(client);
}
protected:
SharedPtr<Parent> parent{};
SharedPtr<Client> client{};
};

View File

@@ -6,6 +6,7 @@ class KProcess;
#include <mesosphere/core/Result.hpp>
#include <mesosphere/core/KAutoObject.hpp>
#include <mesosphere/interfaces/ISetAllocated.hpp>
#include <mesosphere/interfaces/ILimitedResource.hpp>
#include <mesosphere/interfaces/IClientServerParent.hpp>
#include <mesosphere/processes/KReadableEvent.hpp>
#include <mesosphere/processes/KWritableEvent.hpp>
@@ -13,26 +14,27 @@ class KProcess;
namespace mesosphere
{
class KEvent final : public KAutoObject, IClientServerParent<KEvent, KReadableEvent, KWritableEvent> {
class KEvent final :
public KAutoObject,
public IClientServerParent<KEvent, KReadableEvent, KWritableEvent>,
public ISetAllocated<KEvent>,
public ILimitedResource<KEvent> {
public:
MESOSPHERE_AUTO_OBJECT_TRAITS(AutoObject, Event);
explicit KEvent() : owner(nullptr), is_initialized(false) {}
virtual ~KEvent() {}
KProcess *GetOwner() const { return this->owner; }
void Initialize();
virtual ~KEvent();
Result Initialize();
/* KAutoObject */
virtual bool IsAlive() const override { return is_initialized; }
virtual bool IsAlive() const override;
/* IClientServerParent */
void HandleServerDestroyed() { }
void HandleClientDestroyed() { }
private:
KProcess *owner;
bool is_initialized;
bool isInitialized = false;
};
inline void intrusive_ptr_add_ref(KEvent *obj)

View File

@@ -16,20 +16,19 @@ class KEvent;
class KReadableEvent final : public KSynchronizationObject, public IClient<KEvent, KReadableEvent, KWritableEvent> {
public:
MESOSPHERE_AUTO_OBJECT_TRAITS(SynchronizationObject, ReadableEvent);
virtual bool IsAlive() const override { return true; }
explicit KReadableEvent() {}
virtual ~KReadableEvent() {}
virtual ~KReadableEvent();
Result Signal();
Result Clear();
Result Reset();
virtual bool IsSignaled() const override;
private:
bool is_signaled = false;
bool isSignaled = false;
};
inline void intrusive_ptr_add_ref(KReadableEvent *obj)

View File

@@ -17,9 +17,8 @@ class KWritableEvent final : public KAutoObject, public IServer<KEvent, KReadabl
MESOSPHERE_AUTO_OBJECT_TRAITS(AutoObject, WritableEvent);
virtual bool IsAlive() const override { return true; }
explicit KWritableEvent() {}
virtual ~KWritableEvent() {}
virtual ~KWritableEvent();
Result Signal();
Result Clear();