]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - include/c++/orb.h
update
[polintos/scott/priv.git] / include / c++ / orb.h
index cba58491b4bc24ba02c52c58adbfee6ec22491b5..1078555f625a9d33727365f138a8ac3db636cf9f 100644 (file)
@@ -25,15 +25,10 @@ namespace System {
                        
                        ORBMM();
                        
-                       void *alloc(size_t size, AllocGroup *group = NULL);
-                       
-                       void retain(Region region);
-                       void release(Region region);
-                       void super_retain(Region region);
-                       void super_release(Region region);
-                       AllocGroup *create_group();
-                       void destroy_group(AllocGroup *group);
-                       void *add_region(Region region);
+                       void *alloc(size_t size, int refs = 1);
+                       void retain(void *ptr, int refs = 1);
+                       void release(void *ptr, int refs = 1);
+                       void add_region(Region region, bool unmap_orig, int refs = 1);
                };
                
                extern ORBMM *orbmm;
@@ -283,31 +278,61 @@ namespace System {
                
                struct ParamInfoBlock {
                        uintptr_t buffer_size;
-                       void **objlist_ptr;
+                       uintptr_t copy_size;
+                       uintptr_t *objlist;
                        uintptr_t objlist_len;
-                       void **ptrlist_ptr;
-                       uintptr_t ptrlist_len;
                        uintptr_t num_segments;
 
                        struct Segment {
-                               void *ptr;
+                               unsigned char *ptr;
                                uintptr_t len;
                                uintptr_t flags;
+                               uintptr_t reserved;
+                               
+                               enum {
+                                       In = 1,
+                                       Out = 2,
+                                       Inline = 4,
+                                       Copy = 8
+                               };
                        } segments[0];
                };
        }
+       
+       namespace Priv {
+               static inline bool in_kernel()
+               {
+#ifdef _KERNEL
+                       return true;
+#else
+                       return false;
+#endif
+               }
+       };
 }
 
 inline void *operator new(size_t len, ::System::RunTime::ORBMM *orbmm,
-                          ::System::RunTime::ORBMM::AllocGroup *group = NULL)
+                          int refs = 1)
 {
-       return orbmm->alloc(len, group);
+       return orbmm->alloc(len, refs);
 }
 
 inline void *operator new[](size_t len, ::System::RunTime::ORBMM *orbmm,
-                            ::System::RunTime::ORBMM::AllocGroup *group = NULL)
+                            int refs = 1)
+{
+       return orbmm->alloc(len, refs);
+}
+
+inline void operator delete(void *ptr, ::System::RunTime::ORBMM *orbmm,
+                            int refs = 1)
+{
+       orbmm->release(ptr, refs);
+}
+
+inline void operator delete[](void *ptr, ::System::RunTime::ORBMM *orbmm,
+                              int refs = 1)
 {
-       return orbmm->alloc(len, group);
+       orbmm->release(ptr, refs);
 }
 
 // This is a macro rather than an inline template function so that the
@@ -324,7 +349,7 @@ inline void *operator new[](size_t len, ::System::RunTime::ORBMM *orbmm,
                new(::System::RunTime::orbmm) \
                   ::System::Exceptions::NativeCodeExceptionOriginInfo \
                   (::System::RunTime::get_pc()), \
-               _KERNEL ? 1 : 0, ##args); \
+               ::System::Priv::in_kernel(), ##args); \
 } while (0)
 
 #define rethrow_idl(oldex, T, args...) do { \
@@ -332,7 +357,7 @@ inline void *operator new[](size_t len, ::System::RunTime::ORBMM *orbmm,
                new(::System::RunTime::orbmm) \
                   ::System::Exceptions::NativeCodeExceptionOriginInfo \
                   (::System::RunTime::get_pc()), \
-               _KERNEL ? 1 : 0, ##args); \
+               ::System::Priv::in_kernel(), ##args); \
 } while (0)
 #endif