From: fred Date: Wed, 9 Oct 1996 11:42:13 +0000 (+0000) Subject: flower-1.0.1 X-Git-Tag: release/1.5.59~7133 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=2f45b682ff7ba4f338c10d05e7ec8daf78118446;p=lilypond.git flower-1.0.1 --- diff --git a/flower/Makefile b/flower/Makefile index 39e1cd7812..5fb4f2a5b6 100644 --- a/flower/Makefile +++ b/flower/Makefile @@ -1,5 +1,9 @@ +MAJVER=1 +MINVER=0 +PATCHLEVEL=1 + PACKAGENAME=flower -VERSION=1.0 +VERSION=$(MAJVER).$(MINVER).$(PATCHLEVEL) DNAME=$(PACKAGENAME)-$(VERSION) CXXFLAGS+=-g -Wall @@ -9,7 +13,7 @@ templatecc=cursor.cc list.cc inl=findcurs.inl link.inl list.inl hh=cursor.hh cursor.inl lgetopt.hh link.hh list.hh \ string.hh stringutil.hh vray.hh textdb.hh textstr.hh assoc.hh\ - findcurs.hh unionfind.hh compare.hh + findcurs.hh unionfind.hh compare.hh handle.hh diff --git a/flower/handle.hh b/flower/handle.hh new file mode 100644 index 0000000000..32573998f2 --- /dev/null +++ b/flower/handle.hh @@ -0,0 +1,57 @@ +#ifndef HANDLE_HH +#define HANDLE_HH +/// reference counting handle +template +class Handle { + T *obj; + int *refs; + + /// let go of ref. Delete if necessary + void down() { + if (!(*refs--)) { + delete obj; + delete refs; + } + obj = 0; + refs = 0; + } + /// point to new object. + void up(T *t, int *r=0) { + if (!r) { + refs = new int; + *refs = 1; + } else { + refs =r; + *refs++; + } + obj = t; + } + /// POST: *refs == 1 + void copy() { + if(*refs != 1){ + T * newobj = new T(*obj ); + down(); + up(newobj); + } + } + Handle(Handle const &src) { + up(src.obj, src.refs); + } + Handle(T & o) { + up (&o); + } + void operator=(Handle const& src) { + if (this == &src) + return; + down(); + up(src.o, src.refs); + } + operator const T&() { + return *obj; + } + operator T&() { + copy(); + return *obj; + } +} +#endif