view anagram/support/agref.cpp @ 6:607e3be6bad8

Adjust to the moving target called the C++ standard. Apparently nowadays it's not allowed to define an explicit copy constructor but not an assignment operator. Consequently, defining the explicit copy constructor in terms of the implicit/automatic assignment operator for general convenience no longer works. Add assignment operators. Caution: not tested with the IBM compiler, but there's no particular reason it shouldn't work.
author David A. Holland
date Mon, 30 May 2022 23:46:22 -0400
parents 13d2b8934445
children
line wrap: on
line source

/**********************************************************

The AnaGram Class Library

The AgReference Class
Copyright 1997 Parsifal Software. All Rights Reserved.
See the file COPYING for license and usage terms.

***********************************************************/

#include "agref.h"

void AgReferenceBase::doAssignmentLocks(const AgReferenceBase &r) {
  if (object!=0  && object->unlock()) {
    delete object;
  }
  object = r.object;
  if (object != 0) {
    object->lock();
  }
}

AgReferenceBase::AgReferenceBase() : object(0) {}

AgReferenceBase::AgReferenceBase(AgReferenceCount* object_)
  : object(object_)
{
  if (object != 0) {
    object->lock();
  }
}

AgReferenceBase::AgReferenceBase(const AgReferenceBase &r)
  : object(r.object)
{
  if (object!= 0) {
    object->lock();
  }
}

AgReferenceBase::~AgReferenceBase() {
  if (object!= 0 && object->unlock()) {
    delete object;
  }
}

int AgReferenceBase::exists() const {
  return object != 0;
}

void AgReferenceBase::discardData() {
  if (object && object->unlock()) {
    delete object;
  }
  object = 0;
}