#include <util/list.h>
#include <util/rbtree.h>
+#include <util/radix.h>
+#include <util/bmaptree.h>
+
#include <System/Objects.h>
namespace Mem {
struct ObjectHdr;
struct Object;
-
typedef u32 ID;
- typedef Util::RadixTree<ObjectHdr, ID> IDRMap;
struct ObjectHdr {
ID id;
struct ObjectPtr : public ObjectHdr {
Object *object;
};
+
+ union ObjTableEntry {
+ ObjectHdr hdr;
+ Object obj;
+ ObjectPtr ptr;
+ };
+
+ typedef Util::RadixTree<ObjTableEntry, ID, 6> IDTable;
+ typedef Util::RadixTree<ObjectHdr *, ID, 4> IDRMap;
+ typedef Util::BitmapTree<ID> IDAlloc;
class IDSpace {
// Reverse mapping of object pointers to local IDs
- IDRMap id_rmap;
+ IDTable table;
+ IDRMap rmap;
+ IDAlloc alloc;
public:
Object *lookup(u32 id);
- u32 rlookup(Object *obj);
+ ObjectHdr *get_local_hdr(Object *obj);
+ Object *newobj(Mem::ProcAddrSpace *aspace, uintptr_t entry);
};
}