home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / modhead1.zip / GENERIC.H < prev    next >
C/C++ Source or Header  |  1995-09-17  |  2KB  |  61 lines

  1. /*
  2.  *   generic.h
  3.  *
  4.  *   Macros to approximate generic class declarations.
  5.  *
  6.  *           Copyright (c) 1991, MetaWare Incorporated
  7.  */
  8.  
  9. #ifndef __GENERIC_H
  10. #define __GENERIC_H 1
  11. #pragma push_align_members(64);
  12.  
  13.  
  14. /*
  15.  *   Token-pasting macros.
  16.  *
  17.  *   Two levels of indirection are required to expand arguments that
  18.  *   are themselves macros.
  19.  */
  20.  
  21. #define name2(tok1,tok2)      _PASTE2(tok1,tok2)
  22. #define _PASTE2(tok1,tok2)      tok1##tok2
  23. #define name3(tok1,tok2,tok3)    _PASTE3(tok1,tok2,tok3)
  24. #define _PASTE3(tok1,tok2,tok3)    tok1##tok2##tok3
  25. #define name4(tok1,tok2,tok3,tok4)  _PASTE4(tok1,tok2,tok3,tok4)
  26. #define _PASTE4(tok1,tok2,tok3,tok4)  tok1##tok2##tok3##tok4
  27.  
  28.  
  29.  
  30. /*
  31.  *   Declaration and implementation macros.
  32.  */
  33.  
  34. #define declare(generic,type) name2(generic,declare)(type)
  35. #define implement(generic,type) name2(generic,implement)(type)
  36. #define declare2(generic,type1,type2) name2(generic,declare2)(type1,type2)
  37. #define implement2(generic,type1,type2) name2(generic,implement2)(type1,type2)
  38.  
  39.  
  40.  
  41. /*
  42.  *   Error-handling functions.
  43.  *
  44.  *   The function genericerror is not implemented because its 
  45.  *   functionality is unclear and documentation is insufficient.
  46.  *   The declaration is provided for AT&T compatibility only.
  47.  */
  48.  
  49. extern genericerror(int,char*);
  50. typedef int (*GPT)(int,char*);
  51. #define set_handler(generic,type,x) name4(set_,type,generic,_handler)(x)
  52. #define errorhandler(generic,type) name3(type,generic,handler)
  53. #define callerror(generic,type,a,b) (*errorhandler(generic,type))(a,b)
  54.  
  55.  
  56. #pragma pop_align_members();
  57. #endif    // __GENERIC_H
  58.  
  59.  
  60. /**          Copyright (c) 1991, MetaWare Incorporated             **/
  61.