Merge pull request #458 from DrChat/xobject_type_verification
XObject Type Verification
This commit is contained in:
commit
e471767f4c
|
@ -23,6 +23,8 @@ namespace kernel {
|
|||
|
||||
class NotifyListener : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeNotifyListener;
|
||||
|
||||
explicit NotifyListener(KernelState* kernel_state);
|
||||
~NotifyListener() override;
|
||||
|
||||
|
|
|
@ -38,10 +38,22 @@ class ObjectTable {
|
|||
template <typename T>
|
||||
object_ref<T> LookupObject(X_HANDLE handle) {
|
||||
auto object = LookupObject(handle, false);
|
||||
if (object) {
|
||||
assert_true(object->type() == T::kType);
|
||||
}
|
||||
|
||||
auto result = object_ref<T>(reinterpret_cast<T*>(object));
|
||||
return result;
|
||||
}
|
||||
|
||||
// Generic lookup
|
||||
template <>
|
||||
object_ref<XObject> LookupObject<XObject>(X_HANDLE handle) {
|
||||
auto object = LookupObject(handle, false);
|
||||
auto result = object_ref<XObject>(reinterpret_cast<XObject*>(object));
|
||||
return result;
|
||||
}
|
||||
|
||||
X_STATUS AddNameMapping(const std::string& name, X_HANDLE handle);
|
||||
void RemoveNameMapping(const std::string& name);
|
||||
X_STATUS GetObjectByName(const std::string& name, X_HANDLE* out_handle);
|
||||
|
|
|
@ -21,6 +21,8 @@ namespace kernel {
|
|||
|
||||
class XEnumerator : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeEnumerator;
|
||||
|
||||
XEnumerator(KernelState* kernel_state, size_t item_capacity,
|
||||
size_t item_size);
|
||||
virtual ~XEnumerator();
|
||||
|
|
|
@ -24,6 +24,8 @@ struct X_KEVENT {
|
|||
|
||||
class XEvent : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeEvent;
|
||||
|
||||
explicit XEvent(KernelState* kernel_state);
|
||||
~XEvent() override;
|
||||
|
||||
|
|
|
@ -77,6 +77,8 @@ static_assert_size(X_FILE_DIRECTORY_INFORMATION, 72);
|
|||
|
||||
class XFile : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeFile;
|
||||
|
||||
~XFile() override;
|
||||
|
||||
vfs::Device* device() const { return entry_->device(); }
|
||||
|
|
|
@ -57,6 +57,8 @@ class XModule : public XObject {
|
|||
kUserModule = 1,
|
||||
};
|
||||
|
||||
static const Type kType = kTypeModule;
|
||||
|
||||
XModule(KernelState* kernel_state, ModuleType module_type,
|
||||
const std::string& path);
|
||||
virtual ~XModule();
|
||||
|
|
|
@ -19,6 +19,8 @@ namespace kernel {
|
|||
|
||||
class XMutant : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeMutant;
|
||||
|
||||
explicit XMutant(KernelState* kernel_state);
|
||||
~XMutant() override;
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ struct X_KSEMAPHORE {
|
|||
|
||||
class XSemaphore : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeSemaphore;
|
||||
|
||||
explicit XSemaphore(KernelState* kernel_state);
|
||||
~XSemaphore() override;
|
||||
|
||||
|
|
|
@ -103,6 +103,8 @@ static_assert_size(X_KTHREAD, 0xAB0);
|
|||
|
||||
class XThread : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeThread;
|
||||
|
||||
struct CreationParams {
|
||||
uint32_t stack_size;
|
||||
uint32_t xapi_thread_startup;
|
||||
|
|
|
@ -21,6 +21,8 @@ class XThread;
|
|||
|
||||
class XTimer : public XObject {
|
||||
public:
|
||||
static const Type kType = kTypeTimer;
|
||||
|
||||
explicit XTimer(KernelState* kernel_state);
|
||||
~XTimer() override;
|
||||
|
||||
|
|
Loading…
Reference in New Issue