view anagram/support/agref.cpp @ 7:57b2cc9b87f7

Use memcpy instead of strncpy when we know the length anyway. Modern gcc seems to think it knows how to detect misuse of strncpy, but it's wrong (in fact: very, very wrong) and the path of least resistance is to not try to fight with it.
author David A. Holland
date Mon, 30 May 2022 23:47:52 -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;
}