Mercurial > ~dholland > hg > ag > index.cgi
view anagram/guisupport/resource.h @ 15:f5acaf0c8a29
Don't cast through "volatile int". Causes a gcc warning nowadays.
XXX: should put something else back here to frighten the optimizer
author | David A. Holland |
---|---|
date | Tue, 31 May 2022 01:00:55 -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 */