home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / groff / troff / symbol.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-30  |  1.6 KB  |  77 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.uucp)
  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 1, 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 LICENSE.  If not, write to the Free Software
  19. Foundation, 675 Mass Ave, Cambridge, MA 02139, 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.   int hash() const;
  35.   operator ==(symbol) const;
  36.   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. // guaranteed to return a positive integer
  59.  
  60. inline int symbol::hash() const
  61. {
  62.   int i = int(s);
  63.   return i < 0 ? -i : i;
  64. }
  65.  
  66. inline const char *symbol::contents() const
  67. {
  68.   return s;
  69. }
  70.  
  71. inline int symbol::is_null() const
  72. {
  73.   return s == 0;
  74. }
  75.  
  76. symbol concat(symbol, symbol);
  77.