Sync-to-go: update copyright for 2015
[s-roff.git] / src / troff / dictionary.h
blobc64fbb88a235f4b9436839282ff2244a717d4868
1 /*@
2 * Copyright (c) 2014 - 2015 Steffen (Daode) Nurpmeso <sdaoden@users.sf.net>.
4 * Copyright (C) 1989 - 1992 Free Software Foundation, Inc.
5 * Written by James Clark (jjc@jclark.com)
7 * This 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.
12 * This 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.
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, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
21 #ifndef _DICTIONARY_H
22 #define _DICTIONARY_H
24 #include "config.h"
25 #include "troff-config.h"
27 // there is no distinction between name with no value and name with NULL value
28 // null names are not permitted (they will be ignored).
30 class association
32 public:
33 symbol s;
34 void *v;
36 association() : v(0) {}
39 class dictionary;
41 class dictionary_iterator
43 dictionary *dict;
44 int i;
46 public:
47 dictionary_iterator(dictionary &);
48 int get(symbol *, void **);
51 class dictionary
53 friend class dictionary_iterator;
55 int size;
56 int used;
57 double threshold;
58 double factor;
59 association *table;
61 void rehash(int);
63 public:
64 dictionary(int);
65 void *lookup(symbol s, void *v=0); // returns value associated with key
66 void *lookup(const char *);
67 // if second parameter not NULL, value will be replaced
68 void *remove(symbol);
71 class object
73 int rcount;
75 public:
76 object();
77 virtual ~object();
78 void add_reference();
79 void remove_reference();
82 class object_dictionary;
84 class object_dictionary_iterator
86 dictionary_iterator di;
88 public:
89 object_dictionary_iterator(object_dictionary &);
90 int get(symbol *, object **);
93 class object_dictionary
95 dictionary d;
97 public:
98 object_dictionary(int);
99 object *lookup(symbol nm);
100 void define(symbol nm, object *obj);
101 void rename(symbol oldnm, symbol newnm);
102 void remove(symbol nm);
103 int alias(symbol newnm, symbol oldnm);
104 friend class object_dictionary_iterator;
107 inline int object_dictionary_iterator::get(symbol *sp, object **op)
109 return di.get(sp, (void **)op);
111 #endif // _DICTIONARY_H
112 // s-it2-mode