home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classsource.lha / ClassSource / Exec / Share / Share.c
Encoding:
C/C++ Source or Header  |  1995-02-12  |  1.4 KB  |  98 lines

  1. #include <classes/Exec/Share.h>
  2.  
  3. ShareC::ShareC()
  4.     : counter(new ULONG)
  5. {
  6.     if (!counter)
  7.         throw MemoryX(sizeof(ULONG));
  8.     *counter = 0;
  9. }
  10.  
  11. ShareC::ShareC(const ShareC &s)
  12. {
  13.     counter = s.counter;
  14.     (*counter)++;
  15. }
  16.  
  17. ShareC::~ShareC()
  18. {
  19.     if ((*counter) == 0)
  20.         delete counter;
  21.     else
  22.         (*counter)--;
  23. }
  24.  
  25. ShareC &ShareC::operator = (const ShareC &s)
  26. {
  27.     if (this != &s)
  28.     {
  29.         if ((*counter) == 0)
  30.             delete counter;
  31.         else
  32.             (*counter)--;
  33.         counter = s.counter;
  34.         (*counter)++;
  35.     };
  36.     return *this;
  37. }
  38.  
  39. BOOL ShareC::only() const
  40. {
  41.     return (*counter) == 0
  42. }
  43.  
  44. // ********************************************************
  45.  
  46. ShareManualC::ShareManualC()
  47.     : ShareC(),
  48.       references(new ULONG)
  49. {
  50.     if (!references)
  51.         throw MemoryX(sizeof(ULONG));
  52.     *references = 0;
  53. }
  54.  
  55. ShareManualC::ShareManualC(const ShareManualC &s)
  56.     : ShareC(s)
  57. {
  58.     references = s.references;
  59. }
  60.  
  61. ShareManualC::~ShareManualC()
  62. {
  63.     if (ShareC::only())
  64.         delete references;
  65. }
  66.  
  67. ShareManualC &ShareManualC::operator = (const ShareManualC &s)
  68. {
  69.     if (this != &s)
  70.     {
  71.         if (ShareC::only())
  72.         {
  73.             delete references;
  74.         };
  75.         ShareC::operator=(s);
  76.         references = s.references;
  77.     };
  78.     return *this;
  79. }
  80.  
  81. VOID ShareManualC::reference()
  82. {
  83.     (*references)++;
  84. }
  85.  
  86. VOID ShareManualC::dereference()
  87. {
  88.     if ((*references) > 0)
  89.         (*references)--;
  90. }
  91.  
  92. BOOL ShareManualC::only() const
  93. {
  94.     return (*references) == 0
  95. }
  96.  
  97. // **********************************************************
  98.