diff anagram/support/agref.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/anagram/support/agref.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,57 @@
+/**********************************************************
+
+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;
+}
+