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