Fix for assertion error when expanding macro.
[iverilog.git] / Attrib.h
blobcdec41378aad6729d50dee17d2410b7078154d91
1 #ifndef __Attrib_H
2 #define __Attrib_H
3 /*
4 * Copyright (c) 2000 Stephen Williams (steve@icarus.com)
6 * This source code is free software; you can redistribute it
7 * and/or modify it in source code form under the terms of the GNU
8 * General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
10 * any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21 #ifdef HAVE_CVS_IDENT
22 #ident "$Id: Attrib.h,v 1.5 2004/02/20 18:53:33 steve Exp $"
23 #endif
25 # include "StringHeap.h"
26 # include "verinum.h"
29 * This class keeps a map of key/value pairs. The map can be set from
30 * an STL map, or by setting individual mappings.
32 class Attrib {
34 public:
35 Attrib();
36 ~Attrib();
38 const verinum&attribute(perm_string key) const;
39 void attribute(perm_string key, const verinum&value);
40 bool has_compat_attributes(const Attrib&that) const;
43 /* Provide a means of iterating over the entries in the map. */
44 unsigned attr_cnt() const;
45 perm_string attr_key(unsigned idx) const;
46 const verinum& attr_value(unsigned idx) const;
49 private:
50 struct cell_ {
51 perm_string key;
52 verinum val;
55 unsigned nlist_;
56 struct cell_*list_;
58 private: // not implemented
59 Attrib(const Attrib&);
60 Attrib& operator= (const Attrib&);
64 * $Log: Attrib.h,v $
65 * Revision 1.5 2004/02/20 18:53:33 steve
66 * Addtrbute keys are perm_strings.
68 * Revision 1.4 2002/08/12 01:34:58 steve
69 * conditional ident string using autoconfig.
71 * Revision 1.3 2002/05/26 01:39:02 steve
72 * Carry Verilog 2001 attributes with processes,
73 * all the way through to the ivl_target API.
75 * Divide signal reference counts between rval
76 * and lval references.
78 * Revision 1.2 2002/05/23 03:08:50 steve
79 * Add language support for Verilog-2001 attribute
80 * syntax. Hook this support into existing $attribute
81 * handling, and add number and void value types.
83 * Add to the ivl_target API new functions for access
84 * of complex attributes attached to gates.
86 * Revision 1.1 2000/12/04 17:37:03 steve
87 * Add Attrib class for holding NetObj attributes.
90 #endif