annotate src/Map.h @ 1009:dfe01093f657

[project @ 1995-01-04 04:05:12 by jwe]
author jwe
date Wed, 04 Jan 1995 04:05:12 +0000
parents 48a1469b4e5e
children 611d403c7f3d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
829
48a1469b4e5e [project @ 1994-10-17 04:44:09 by jwe]
jwe
parents: 755
diff changeset
1 // Map.h -*- C++ -*-
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
2 /*
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
3
1009
dfe01093f657 [project @ 1995-01-04 04:05:12 by jwe]
jwe
parents: 829
diff changeset
4 Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
5
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
7
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
8 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
9 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
10 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
11 later version.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
12
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
13 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
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
15 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
16 for more details.
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
17
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
18 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
19 along with Octave; see the file COPYING. If not, write to the Free
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
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 */
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
23
745
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
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
26 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
27 of Map and CHMap from libg++, originally:
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
28
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
29 Copyright (C) 1988 Free Software Foundation
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
30 written by Doug Lea (dl@rocky.oswego.edu)
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
31
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
32 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
33 License as published by the Free Software Foundation.
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 */
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
36
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
37 #if ! defined (octave_Map_h)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
38 #define octave_Map_h 1
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
39
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
40 #include <Pix.h>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
41
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
42 #include "utils.h"
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
43
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
44 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
45 class Map
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
46 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
47 protected:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
48 int count;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
49 C def;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
50
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
51 public:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
52 Map (const C& dflt) : def (dflt) { count = 0; }
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 virtual ~Map (void) { }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
55
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
56 int length (void) const { return count; } // current number of items
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
57 int empty (void) const { return count == 0; }
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 virtual int contains (const char *key) const; // is key mapped?
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
60
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
61 virtual void clear (void); // delete all items
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
62
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
63 virtual C& operator [] (const char *key) = 0; // access contents by key
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
64
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
65 virtual void del (const char *key) = 0; // delete entry
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
66
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
67 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
68 virtual void next (Pix& i) const = 0; // advance to next or 0
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
69 virtual const char *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
70 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
71
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
72 virtual int owns (Pix i) const; // is i a valid Pix ?
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
73 virtual Pix seek (const char *key) const; // Pix of key
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 C& dflt (void) { return def; } // access default val
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
76
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
77 void error (const char* msg) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
78
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
79 virtual int OK (void) const = 0; // rep invariant
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
80 };
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 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
83 struct CHNode
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 CHNode *tl;
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
86 char *hd;
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
87 C cont;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
88
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
89 CHNode (void) : tl (0), hd (0) { }
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
90
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
91 CHNode (const char *h, const C& c, CHNode *t = 0)
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
92 : tl (t), cont (c)
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
93 { hd = strsave (h); }
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
94
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
95 ~CHNode (void)
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
96 { delete [] hd; }
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
97 };
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 #ifndef DEFAULT_INITIAL_CAPACITY
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
100 #define DEFAULT_INITIAL_CAPACITY 8
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
101 #endif
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
102
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
103 template <class C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
104 class CHMap : public Map<C>
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
105 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
106 protected:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
107 CHNode<C> **tab;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
108 unsigned int size;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
109
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
110 public:
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
111 CHMap (const C& dflt, unsigned int sz = DEFAULT_INITIAL_CAPACITY);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
112
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
113 CHMap (const CHMap& a);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
114
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
115 ~CHMap (void)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
116 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
117 clear ();
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
118 delete tab;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
119 }
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 C& operator [] (const char *key);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
122
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
123 void del (const char *key);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
124
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
125 Pix first (void) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
126 void next (Pix& i) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
127
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
128 const char *key (Pix p) const
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
129 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
130 if (p == 0)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
131 error ("null Pix");
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
132
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
133 return ((CHNode<C> *) p)->hd;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
134 }
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
135
745
586160369413 [project @ 1994-09-30 15:00:00 by jwe]
jwe
parents: 728
diff changeset
136 C& contents (Pix p) const
728
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
137 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
138 if (p == 0)
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
139 error ("null Pix");
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
140
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
141 return ((CHNode<C> *) p)->cont;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
142 }
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 Pix seek (const char *key) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
145
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
146 int contains (const char *key) const
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
147 {
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
148 return seek (key) != 0;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
149 }
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 void clear (void);
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
152 int OK (void) const;
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
153 };
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 #endif
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
156
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 ;;; Local Variables: ***
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
159 ;;; mode: C++ ***
daeee5bd0cb5 [project @ 1994-09-22 16:19:32 by jwe]
jwe
parents:
diff changeset
160 ;;; page-delimiter: "^/\\*" ***
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 */