#if __SC__ || __RCC__ #pragma once #endif #ifndef _GENERIC_H_ #define _GENERIC_H_ /* * generic.h -- for faking generic class declarations * * $Id: generic.h,v 1.1.1.1 1997/01/02 19:16:40 smarx Exp $ * **************************************************************************** * * Rogue Wave Software, Inc. * P.O. Box 2328 * Corvallis, OR 97339 * Voice: (503) 754-3010 FAX: (503) 757-6650 * * Copyright (C) 1991, 1993, 1994. * This software is subject to copyright protection under the laws of * the United States and other countries. * ALL RIGHTS RESERVED * *************************************************************************** * * $Log: generic.h,v $ * Revision 1.1.1.1 1997/01/02 19:16:40 smarx * cafe12 * * * Rev 1.2 08 Oct 1994 14:11:52 BUSHNELL * Added pragma once for faster compilations * * Rev 1.1 02 Jun 1994 21:35:42 bushnell * added ifdef so that MS RC will not include header twice * * Rev 1.0 28 Apr 1994 19:19:50 thompson * Initial revision. * * Rev 1.0 20 Apr 1994 17:46:40 thompson * Initial revision. * Revision 1.2 1994/04/14 00:50:17 vriezen * Updated copywrite, added ID and LOG and changed comments to indicate .cpp filename * * * */ // token-pasting macros; ANSI requires an extra level of indirection #define name2(z, y) name2_x(z, y) #define name2_x(z, y) z##y #define name3(z, y, x) name3_x(z, y, x) #define name3_x(z, y, x) z##y##x #define name4(z, y, x, w) name4_x(z, y, x, w) #define name4_x(z, y, x, w) z##y##x##w // macros for declaring and implementing classes #define declare(z, y) name2(z, declare)(y) #define implement(z, y) name2(z, implement)(y) #define declare2(z, y, x) name2(z, declare2)(y, x) #define implement2(z, y, x) name2(z, implement2)(y, x) // macros for declaring error-handling functions extern genericerror(int, char*); typedef int (*GPT)(int, char*); #define set_handler(gen, tp, z) name4(set_, tp, gen, _handler)(z) #define errorhandler(gen, tp) name3(tp, gen, handler) #define callerror(gen, tp, z, y) (*errorhandler(gen, tp))(z, y) #endif /* _GENERIC_H_ */