home *** CD-ROM | disk | FTP | other *** search
- #include <classes/Exec/Share.h>
-
- ShareC::ShareC()
- : counter(new ULONG)
- {
- if (!counter)
- throw MemoryX(sizeof(ULONG));
- *counter = 0;
- }
-
- ShareC::ShareC(const ShareC &s)
- {
- counter = s.counter;
- (*counter)++;
- }
-
- ShareC::~ShareC()
- {
- if ((*counter) == 0)
- delete counter;
- else
- (*counter)--;
- }
-
- ShareC &ShareC::operator = (const ShareC &s)
- {
- if (this != &s)
- {
- if ((*counter) == 0)
- delete counter;
- else
- (*counter)--;
- counter = s.counter;
- (*counter)++;
- };
- return *this;
- }
-
- BOOL ShareC::only() const
- {
- return (*counter) == 0
- }
-
- // ********************************************************
-
- ShareManualC::ShareManualC()
- : ShareC(),
- references(new ULONG)
- {
- if (!references)
- throw MemoryX(sizeof(ULONG));
- *references = 0;
- }
-
- ShareManualC::ShareManualC(const ShareManualC &s)
- : ShareC(s)
- {
- references = s.references;
- }
-
- ShareManualC::~ShareManualC()
- {
- if (ShareC::only())
- delete references;
- }
-
- ShareManualC &ShareManualC::operator = (const ShareManualC &s)
- {
- if (this != &s)
- {
- if (ShareC::only())
- {
- delete references;
- };
- ShareC::operator=(s);
- references = s.references;
- };
- return *this;
- }
-
- VOID ShareManualC::reference()
- {
- (*references)++;
- }
-
- VOID ShareManualC::dereference()
- {
- if ((*references) > 0)
- (*references)--;
- }
-
- BOOL ShareManualC::only() const
- {
- return (*references) == 0
- }
-
- // **********************************************************
-