Ignore:
Timestamp:
Jun 9, 2001, 4:50:26 PM (24 years ago)
Author:
sandervl
Message:

reference count (window + class objects) rewrite

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/gen_object.h

    r2469 r5935  
    1 /* $Id: gen_object.h,v 1.5 2000-01-18 20:08:09 sandervl Exp $ */
     1/* $Id: gen_object.h,v 1.6 2001-06-09 14:50:17 sandervl Exp $ */
    22/*
    33 * Generic Object Class for OS/2
     
    1010
    1111#include <heapshared.h>
    12 
    13 #define OBJTYPE_WINDOW          0
    14 #define OBJTYPE_DIALOG          1
    15 #define OBJTYPE_CLASS           2
    16 #define OBJTYPE_BITMAP          3
    17 #define OBJTYPE_ICON            4
    18 #define OBJTYPE_CURSOR          5
    19 #define OBJTYPE_MENU            6
    20 
    21 #define OBJTYPE_MAX             7
    22 //......
     12#ifdef OS2_INCLUDED
     13#include <win32api.h>
     14#endif
    2315
    2416class GenericObject
    2517{
    2618public:
    27          GenericObject(GenericObject **head, DWORD objType);
     19         GenericObject(GenericObject **head, CRITICAL_SECTION *pLock);
    2820virtual ~GenericObject();
    29 
    30          DWORD getObjectType()                  { return objType; };
    31          void  setObjectType(DWORD objType)     { this->objType = objType; };
    3221
    3322GenericObject *GetHead()        { return *head; };
    3423GenericObject *GetNext()        { return next;  };
    3524
    36          void  enterMutex();
    37          void  leaveMutex();
     25         void  lock()           { EnterCriticalSection(pLock); };
     26         void  unlock()         { LeaveCriticalSection(pLock); };
    3827
    39 static   void  enterMutex(DWORD objType);
    40 static   void  leaveMutex(DWORD objType);
     28         void  link();
     29         void  unlink();
     30
     31         LONG  addRef()         { return InterlockedIncrement(&refCount); };
     32         LONG  getRefCount()    { return refCount; };
     33         LONG  release();
     34
     35         void  markDeleted()    { fDeletePending = TRUE; };
     36
     37static   void  lock(CRITICAL_SECTION *pLock)           { EnterCriticalSection(pLock); };
     38static   void  unlock(CRITICAL_SECTION *pLock)         { LeaveCriticalSection(pLock); };
    4139
    4240static   void  DestroyAll(GenericObject *head);
     
    6462private:
    6563
    66          DWORD objType;
    67 
    6864protected:
    6965
    70          GenericObject **head;
    71          GenericObject  *next;   
     66         CRITICAL_SECTION *pLock;
     67         LONG              refCount;
     68         ULONG             fLinked        : 1,
     69                           fDeletePending : 1;
     70
     71         GenericObject   **head;
     72         GenericObject    *next;         
    7273};
    7374
Note: See TracChangeset for help on using the changeset viewer.