home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / gnu / groff_src.lha / groff-1.10src / troff / symbol.h < prev    next >
C/C++ Source or Header  |  1995-06-22  |  2KB  |  74 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.com)
  4.  
  5. This file is part of groff.
  6.  
  7. groff is free software; you can redistribute it and/or modify it under
  8. the terms of the GNU General Public License as published by the Free
  9. Software Foundation; either version 2, or (at your option) any later
  10. version.
  11.  
  12. groff is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License along
  18. with groff; see the file COPYING.  If not, write to the Free Software
  19. Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  20.  
  21. #define DONT_STORE 1
  22. #define MUST_ALREADY_EXIST 2
  23.  
  24. class symbol {
  25.   static const char **table;
  26.   static int table_used;
  27.   static int table_size;
  28.   static char *block;
  29.   static int block_size;
  30.   const char *s;
  31. public:
  32.   symbol(const char *p, int how = 0);
  33.   symbol();
  34.   unsigned long hash() const;
  35.   int operator ==(symbol) const;
  36.   int operator !=(symbol) const;
  37.   const char *contents() const;
  38.   int is_null() const;
  39. };
  40.  
  41.  
  42. extern const symbol NULL_SYMBOL;
  43.  
  44. inline symbol::symbol() : s(0)
  45. {
  46. }
  47.  
  48. inline int symbol::operator==(symbol p) const
  49. {
  50.   return s == p.s;
  51. }
  52.  
  53. inline int symbol::operator!=(symbol p) const
  54. {
  55.   return s != p.s;
  56. }
  57.  
  58. inline unsigned long symbol::hash() const
  59. {
  60.   return (unsigned long)s;
  61. }
  62.  
  63. inline const char *symbol::contents() const
  64. {
  65.   return s;
  66. }
  67.  
  68. inline int symbol::is_null() const
  69. {
  70.   return s == 0;
  71. }
  72.  
  73. symbol concat(symbol, symbol);
  74.