CallFrame frames[0];
};
+ static const ID invalid_id = 0xffffffff;
struct ObjectHdr {
ID id;
-
- union {
- struct {
- u32 Valid:1;
- u32 Pointer:1;
- };
-
- u32 flags;
- };
};
struct Object : public ObjectHdr {
Object *object;
};
- union ObjTableEntry {
- ObjectHdr hdr;
- Object obj;
- ObjectPtr ptr;
- };
-
- typedef Util::RadixTree<ObjTableEntry, ID, 6> IDTable;
+ typedef Util::RadixTree<Object, ID, 6> LocalIDTable;
+ typedef Util::RadixTree<ObjectPtr, ID, 6> RemoteIDTable;
typedef Util::RBPtr<Object *, ObjectPtr *> IDRMap;
typedef Util::BitmapTree<ID> IDAlloc;
class IDSpace {
Lock::SpinLock lock; // For add/del only; not needed for lookup
- IDTable table; // Forward mapping of local IDs to object ptrs
+ LocalIDTable locals; // Objects that live in this address space
+ RemoteIDTable remotes; // Objects that live in other address spaces
IDRMap rmap; // Reverse mapping of remote object pointers to local IDs
IDAlloc alloc; // Bitmap for allocating IDs