Mercurial > ~dholland > hg > ag > index.cgi
view anagram/guisupport/resource.h @ 8:ec2b657edf13
Add explicit lint-comment-style fallthrough annotations.
GCC now assumes that if you don't have these you're making a mistake,
which is annoying.
XXX: This changeset updates the AG output files only (by hand) and is
XXX: abusive - rebuilding them will erase the change. However, I need
XXX: to get things to build before I can try to get AG to issue the
XXX: annotations itself, so this seems like a reasonable expedient.
author | David A. Holland |
---|---|
date | Mon, 30 May 2022 23:51:43 -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 */