1 // -*- C++ -*-
2 
3 #ifndef FREEHDL_FIRE_TYPES_H
4 #define FREEHDL_FIRE_TYPES_H
5 
6 #include <iostream>
7 
8 #include <freehdl/tree-supp.h>
9 
10 typedef unsigned char IR_Character;
11 
12 typedef tree_kind IR_Kind;
13 
14 const IR_Kind IR_INVALID = NULL;
15 
16 enum IR_SignalKind {
17   IR_NO_SIGNAL_KIND,
18   IR_REGISTER_KIND,
19   IR_BUS_KIND
20 };
21 
22 enum IR_Mode {
23   IR_UNKNOWN_MODE,
24   IR_IN_MODE,
25   IR_OUT_MODE,
26   IR_INOUT_MODE,
27   IR_BUFFER_MODE,
28   IR_LINKAGE_MODE
29 };
30 
31 enum IR_Pure {
32   IR_UNKNOWN_PURE,
33   IR_PURE_FUNCTION,
34   IR_IMPURE_FUNCTION,
35   IR_PURE_PROCEDURAL,
36   IR_IMPURE_PROCEDURAL
37 };
38 
39 enum IR_Direction {
40   IR_UNKNOWN_DIRECTION,
41   IR_DIRECTION_UP,
42   IR_DIRECTION_DOWN
43 };
44 
45 enum IR_DelayMechanism {
46   IR_UNKNOWN_DELAY,
47   IR_INERTIAL_DELAY,
48   IR_TRANSPORT_DELAY
49 };
50 
51 enum IR_StaticLevel {
52   IR_NOT_STATIC,
53   IR_GLOBALLY_STATIC,
54   IR_LOCALLY_STATIC
55 };
56 
57 struct IIR_Root;
58 typedef IIR_Root IIR;
59 typedef IIR *pIIR;
60 
61 // XXX - better use some ready made string class from STL here.  Eric?
62 
63 struct IR_String {
64   IR_String (const IR_Character *chars, int len);
65   IR_String (const char *chars);
66   IR_String (const IR_String &str);
67   ~IR_String ();
68 
69   IR_String &operator= (const IR_String &str);
70 
lenIR_String71   int len ()
72   {
73     return rep->len;
74   }
75 
76   IR_Character operator[] (int i)
77   {
78     return rep->chars[i];
79   }
80 
81   char *to_chars ();
to_chars_no_checkIR_String82   char *to_chars_no_check ()
83   {
84     return (char *)rep->chars;
85   }
86 
87 private:
88   struct strrep {
89     int len;
90     unsigned int ref_count;
91     IR_Character chars[1];
92   };
93   strrep *rep;
94 };
95 
96 std::ostream& operator<< (std::ostream &o, IR_String &str);
97 
98 // printers for tree_print
99 
100 void fire_print_int (void *mem);
101 void fire_print_bool (void *mem);
102 void fire_print_string (void *mem);
103 void fire_print_IR_String (void *mem);
104 
105 #endif
106