annotate src/Map.h @ 3019:92aa3d651723

[project @ 1997-06-03 22:07:16 by jwe]
author jwe
date Tue, 03 Jun 1997 22:10:41 +0000
parents 8b262e771614
children b80bbb43a1a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
1 /*
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
2
2847
8b262e771614 [project @ 1997-03-27 16:18:26 by jwe]
jwe
parents: 2569
diff changeset
3 Copyright (C) 1996, 1997 John W. Eaton
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
4
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
6
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
10 later version.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
11
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
15 for more details.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
16
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
1315
611d403c7f3d [project @ 1995-06-25 19:56:32 by jwe]
jwe
parents: 1009
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
20
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
21 */
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
22
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
23 /*
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
24
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
25 The classes in this file are derived from the old `genclass' versions
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
26 of Map and CHMap from libg++, originally:
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
27
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
28 Copyright (C) 1988 Free Software Foundation
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
29 written by Doug Lea (dl@rocky.oswego.edu)
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
30
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
31 and distributed under the terms of the GNU Library General Public
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
32 License as published by the Free Software Foundation.
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
33
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
34 */
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
35
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
36 #if ! defined (octave_Map_h)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
37 #define octave_Map_h 1
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
38
2569
5e0c65023ba5 [project @ 1996-12-06 07:36:46 by jwe]
jwe
parents: 1996
diff changeset
39 #if defined (__GNUG__)
5e0c65023ba5 [project @ 1996-12-06 07:36:46 by jwe]
jwe
parents: 1996
diff changeset
40 #pragma interface
5e0c65023ba5 [project @ 1996-12-06 07:36:46 by jwe]
jwe
parents: 1996
diff changeset
41 #endif
5e0c65023ba5 [project @ 1996-12-06 07:36:46 by jwe]
jwe
parents: 1996
diff changeset
42
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
43 #include <string>
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
44
1430
045e70a15a8f [project @ 1995-09-19 07:05:37 by jwe]
jwe
parents: 1315
diff changeset
45 #include <Pix.h>
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
46
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
47 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
48 class Map
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
49 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
50 protected:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
51 int count;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
52 C def;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
53
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
54 public:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
55 Map (const C& dflt) : def (dflt) { count = 0; }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
56
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
57 virtual ~Map (void) { }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
58
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
59 int length (void) const { return count; } // current number of items
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
60 int empty (void) const { return count == 0; }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
61
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
62 virtual int contains (const string& key) const; // is key mapped?
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
63
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
64 virtual void clear (void); // delete all items
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
65
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
66 virtual C& operator [] (const string& key) = 0; // access contents by key
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
67
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
68 virtual void del (const string& key) = 0; // delete entry
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
69
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
70 virtual Pix first (void) const = 0; // Pix of first item or 0
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
71 virtual void next (Pix& i) const = 0; // advance to next or 0
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
72 virtual string key (Pix i) const = 0; // access key at i
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
73 virtual C& contents (Pix i) const = 0; // access contents at i
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
74
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
75 virtual int owns (Pix i) const; // is i a valid Pix ?
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
76 virtual Pix seek (const string& key) const; // Pix of key
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
77
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
78 C& dflt (void) { return def; } // access default val
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
79
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
80 void error (const string& msg) const;
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
81
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
82 virtual int OK (void) const = 0; // rep invariant
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
83 };
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
84
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
85 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
86 struct CHNode
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
87 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
88 CHNode *tl;
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
89 string hd;
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
90 C cont;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
91
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
92 CHNode (void) : tl (0), hd (), cont () { }
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
93
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
94 CHNode (const string& h, const C& c, CHNode *t = 0)
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
95 : tl (t), hd (h), cont (c) { }
1430
045e70a15a8f [project @ 1995-09-19 07:05:37 by jwe]
jwe
parents: 1315
diff changeset
96
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
97 ~CHNode (void) { }
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
98 };
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
99
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
100 #ifndef DEFAULT_INITIAL_CAPACITY
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
101 #define DEFAULT_INITIAL_CAPACITY 8
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
102 #endif
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
103
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
104 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
105 class CHMap : public Map<C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
106 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
107 protected:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
108 CHNode<C> **tab;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
109 unsigned int size;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
110
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
111 public:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
112 CHMap (const C& dflt, unsigned int sz = DEFAULT_INITIAL_CAPACITY);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
113
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
114 CHMap (const CHMap& a);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
115
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
116 ~CHMap (void)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
117 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
118 clear ();
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
119 delete tab;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
120 }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
121
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
122 C& operator [] (const string& key);
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
123
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
124 void del (const string& key);
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
125
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
126 Pix first (void) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
127 void next (Pix& i) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
128
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
129 string key (Pix p) const
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
130 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
131 if (p == 0)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
132 error ("null Pix");
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
133
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
134 return ((CHNode<C> *) p)->hd;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
135 }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
136
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
137 C& contents (Pix p) const
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
138 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
139 if (p == 0)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
140 error ("null Pix");
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
141
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
142 return ((CHNode<C> *) p)->cont;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
143 }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
144
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
145 Pix seek (const string& key) const;
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
146
1755
3a9462b655f1 [project @ 1996-01-22 04:47:22 by jwe]
jwe
parents: 1430
diff changeset
147 int contains (const string& key) const
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
148 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
149 return seek (key) != 0;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
150 }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
151
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
152 void clear (void);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
153 int OK (void) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
154 };
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
155
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
156 #endif
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
157
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
158 /*
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
159 ;;; Local Variables: ***
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
160 ;;; mode: C++ ***
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
161 ;;; End: ***
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
162 */