X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Finclude%2Fkern%2Forb.h;h=f90d0512f3ee0c9355edd5a402d0611c5dd08196;hp=e420fc77e11f72e10597797808a6146b36288f49;hb=f95829cb521c076eebee345a1007e9fc912a0765;hpb=0c52a8435aa399781856869daa7ef30cef14fad5 diff --git a/kernel/include/kern/orb.h b/kernel/include/kern/orb.h index e420fc7..f90d051 100644 --- a/kernel/include/kern/orb.h +++ b/kernel/include/kern/orb.h @@ -7,6 +7,9 @@ #include #include +#include +#include + #include namespace Mem { @@ -54,9 +57,7 @@ namespace ORB { struct ObjectHdr; struct Object; - typedef u32 ID; - typedef Util::RadixTree IDRMap; struct ObjectHdr { ID id; @@ -78,14 +79,27 @@ namespace ORB { struct ObjectPtr : public ObjectHdr { Object *object; }; + + union ObjTableEntry { + ObjectHdr hdr; + Object obj; + ObjectPtr ptr; + }; + + typedef Util::RadixTree IDTable; + typedef Util::RadixTree IDRMap; + typedef Util::BitmapTree IDAlloc; class IDSpace { // Reverse mapping of object pointers to local IDs - IDRMap idrmap; + IDTable table; + IDRMap rmap; + IDAlloc alloc; public: Object *lookup(u32 id); ObjectHdr *get_local_hdr(Object *obj); + Object *newobj(Mem::ProcAddrSpace *aspace, uintptr_t entry); }; }