Update of /cvsroot/mahogany/M/src/classes
In directory sc8-pr-cvs1:/tmp/cvs-serv18801/src/classes

Modified Files:
        MObject.cpp 
Log Message:
Resolved cyclic ref counting in LineBook and brought WeakRef to usable state

Index: MObject.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/classes/MObject.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -b -u -2 -r1.29 -r1.30
--- MObject.cpp 11 Oct 2003 17:02:37 -0000      1.29
+++ MObject.cpp 16 Oct 2003 10:29:23 -0000      1.30
@@ -28,4 +28,5 @@
 
 #include "MObject.h"
+#include "pointers.h"
 
 #ifdef DEBUG
@@ -97,5 +98,5 @@
    gs_aObjects.Add(this);
    m_nRef = 1;
-   m_weak = 0;
+   m_weakRef = 0;
 }
 
@@ -127,5 +128,7 @@
    {
       gs_aObjects.Remove(this);
-      delete this;
+      this->~MObjectRC();
+      if( !m_weakRef )
+         ::operator delete(this);
 
       return FALSE;
@@ -174,29 +177,30 @@
 }
 
-class WeakRefCounter : public MObjectRC
+extern void WeakRefIncrement(MObjectRC *pointer)
 {
-public:
-   WeakRefCounter() : m_deleted(false) {}
-   bool m_deleted;
-};
+   if( pointer )
+      ++pointer->m_weakRef;
+}
 
-extern WeakRefCounter *WeakRefAdd(MObjectRC *pointer)
+extern void WeakRefDecrement(MObjectRC *pointer)
 {
-   if( !pointer->m_weak )
-      pointer->m_weak = new WeakRefCounter;
-   else
-      pointer->m_weak->IncRef();
-
-   return pointer->m_weak;
+   if( pointer )
+   {
+      --pointer->m_weakRef;
+      if( !pointer->m_weakRef && !pointer->m_nRef )
+      {
+         ::operator delete(pointer);
+      }
+   }
 }
 
-extern void WeakRefRemove(WeakRefCounter *counter)
+extern void WeakRefAssign(MObjectRC *target,MObjectRC *source)
 {
-   counter->DecRef();
+   WeakRefIncrement(source);
+   WeakRefDecrement(target);
 }
 
-extern void WeakRefDeleted(WeakRefCounter *counter)
+extern bool WeakRefExpired(const MObjectRC *pointer)
 {
-   if( counter )
-      counter->m_deleted = true;
+   return pointer->m_nRef == 0;
 }



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates

Reply via email to