Mercurial > ~dholland > hg > ag > index.cgi
view anagram/guisupport/resource.h @ 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
/* * AnaGram, A System for Syntax Directed Programming * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * See the file COPYING for license and usage terms. * * resource.h */ #ifndef RESOURCE_H #define RESOURCE_H #ifdef __IBMCPP__ #include <ireslock.hpp> #endif #ifdef __IBMCPP__ class AgResource { private: class Resource : public IPrivateResource { public: void *operator new (size_t, void *s) { return s; } }; void *storage; IPrivateResource *resource; public: AgResource() : storage(0), resource(0) {} ~AgResource() { if (storage == 0) delete resource; } void lock() { if (resource == 0) { resource = new IPrivateResource; } resource->lock(); } void lock(void *s) { if (resource == 0) { resource = new(storage = s) Resource; } resource->lock(); } void unlock() { resource->unlock(); } }; #endif /* __IBMCPP__ */ class AgLock { private: AgResource &resource; public: AgLock(AgResource &r) : resource(r) { resource.lock(); } AgLock(AgResource &r, void *s) : resource(r) { resource.lock(s); } ~AgLock() {resource.unlock();} }; #endif /* RESOURCE_H */