1 | /**CHeaderFile***************************************************************** |
---|
2 | |
---|
3 | FileName [tblInt.h] |
---|
4 | |
---|
5 | PackageName [tbl] |
---|
6 | |
---|
7 | Synopsis [Include the internals of the table package] |
---|
8 | |
---|
9 | Description [Describes the internal structs in the table package. The |
---|
10 | Tbl_Table_t data structure consists of an array of inputs, and array of |
---|
11 | outputs and a data struct (Tbl_Data_t). This data struct is shared between |
---|
12 | tables that are duplicated (using soft dup). The data struct contains a |
---|
13 | reference count to indicate the number of tables that share it. If a |
---|
14 | free is called, the data struct reference count is decremented and only |
---|
15 | if this drops to 0 is the struct actually freed. The Tbl_Data_t also |
---|
16 | contains an array of default values, and an array of Tbl_Row_t's to |
---|
17 | represent the actual data. The Tbl_row_t consists of two arrays (inputs and |
---|
18 | outputs), which contain Tbl_Entry_t's (representing entries in a table.] |
---|
19 | |
---|
20 | SeeAlso [tbl.h] |
---|
21 | |
---|
22 | Author [Gitanjali M. Swamy] |
---|
23 | |
---|
24 | Copyright [Copyright (c) 1994-1996 The Regents of the Univ. of California. |
---|
25 | All rights reserved. |
---|
26 | |
---|
27 | Permission is hereby granted, without written agreement and without license |
---|
28 | or royalty fees, to use, copy, modify, and distribute this software and its |
---|
29 | documentation for any purpose, provided that the above copyright notice and |
---|
30 | the following two paragraphs appear in all copies of this software. |
---|
31 | |
---|
32 | IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR |
---|
33 | DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT |
---|
34 | OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF |
---|
35 | CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
---|
36 | |
---|
37 | THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, |
---|
38 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
---|
39 | FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN |
---|
40 | "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE |
---|
41 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.] |
---|
42 | |
---|
43 | Revision [$Id: tblInt.h,v 1.11 2009/04/11 02:01:29 fabio Exp $] |
---|
44 | |
---|
45 | ******************************************************************************/ |
---|
46 | |
---|
47 | #ifndef _TBLINT |
---|
48 | #define _TBLINT |
---|
49 | |
---|
50 | #include "tbl.h" |
---|
51 | #include "cmd.h" |
---|
52 | #include "io.h" |
---|
53 | #include <string.h> |
---|
54 | |
---|
55 | /*---------------------------------------------------------------------------*/ |
---|
56 | /* Stucture declarations */ |
---|
57 | /*---------------------------------------------------------------------------*/ |
---|
58 | |
---|
59 | /**Struct************************************************************* |
---|
60 | |
---|
61 | Synopsis [ This is basic blif_mv table data structure ] |
---|
62 | |
---|
63 | Description [ This datastructure consists of struct with 3 fields; an |
---|
64 | array of inputs, an array of ouputs and a Tbl_Data_t for the actual |
---|
65 | table data.] |
---|
66 | |
---|
67 | SeeAlso [ TblEntryStruct TblRowStruct TblDataStruct] |
---|
68 | **********************************************************************/ |
---|
69 | struct TblTableStruct { |
---|
70 | array_t * inputNames; /* An array of the Var_Variable_ts corresponding to |
---|
71 | the inputs to the table */ |
---|
72 | array_t * outputNames; /* An array of Var_Variable_ts corresponding to |
---|
73 | the outputs of the table */ |
---|
74 | Tbl_Data_t * data; /* A Tbl_Data_t that represents actual data in the table */ |
---|
75 | }; |
---|
76 | |
---|
77 | /**Struct************************************************************* |
---|
78 | |
---|
79 | Synopsis [ This is the struct used to represent each row in the table] |
---|
80 | |
---|
81 | Description [ There are 2 fields in this struct; a row array and a column |
---|
82 | array.] |
---|
83 | |
---|
84 | SeeAlso [ TblStruct TblEntryStruct ] |
---|
85 | |
---|
86 | **********************************************************************/ |
---|
87 | |
---|
88 | struct TblRowStruct { |
---|
89 | array_t * inputs; /* An array of inputs */ |
---|
90 | array_t * outputs; /* An array of outputs */ |
---|
91 | }; |
---|
92 | |
---|
93 | /**Struct********************************************************************** |
---|
94 | |
---|
95 | Synopsis [Struct used to represent table data] |
---|
96 | |
---|
97 | Description [This struct has three fields; a reference count that is used |
---|
98 | for memory management, an array of default values, and an array of Tbl_Row_t's |
---|
99 | that represents the actual table data. Each Tbl_Row_t within this data array |
---|
100 | has an input part and an output part; each of these is an array of Tbl_Entry_t's.] |
---|
101 | |
---|
102 | SeeAlso [ TblEntryStruct TblTableStruct TblRowStruct] |
---|
103 | |
---|
104 | ******************************************************************************/ |
---|
105 | |
---|
106 | struct TblDataStruct { |
---|
107 | int refCount; /* a reference count to indicate how many duplicates exist |
---|
108 | */ |
---|
109 | array_t *defaults; /* An array with the defaults */ |
---|
110 | array_t *actualData; |
---|
111 | }; |
---|
112 | |
---|
113 | |
---|
114 | /**Struct************************************************************* |
---|
115 | |
---|
116 | Synopsis [ This struct represents a range] |
---|
117 | |
---|
118 | Description [ This struct represents a range and has 2 fields; |
---|
119 | the beginning and the end. The data within a Tbl_Entry_t |
---|
120 | is represented as a linked list of such ranges (if the entry |
---|
121 | is of type Tbl_EntryNormal_c.] |
---|
122 | |
---|
123 | SeeAlso [ TblRangeAlloc TblRangeFree ] |
---|
124 | |
---|
125 | **********************************************************************/ |
---|
126 | |
---|
127 | struct TblRangeStruct { |
---|
128 | int begin; /* The beginning of the range */ |
---|
129 | int end; /* The end of the range */ |
---|
130 | }; |
---|
131 | |
---|
132 | /**Struct************************************************************* |
---|
133 | |
---|
134 | Synopsis [ This is the struct used to represent each entry in the table ] |
---|
135 | |
---|
136 | Description [ This struct has 4 fields; an enumerated type, an integer to |
---|
137 | indicate if it is an input or output, an integer for the column number, and |
---|
138 | a union with either a list of ranges or a var (this depends on the type of |
---|
139 | the struct.] |
---|
140 | |
---|
141 | SeeAlso [ TblRowStruct TblTableStruct TblDataStruct] |
---|
142 | |
---|
143 | **********************************************************************/ |
---|
144 | |
---|
145 | struct TblEntryStruct { |
---|
146 | Tbl_EntryType_t type; /* Type of the table entry. This may be one of 2 types; |
---|
147 | either equal or normal*/ |
---|
148 | int ioType; /* to indicate whether its input or output */ |
---|
149 | int varColNum; /* corresponding Var_Variable_t column number */ |
---|
150 | union{ |
---|
151 | int var; /* This indicates the related column if the entry is |
---|
152 | of the type equal */ |
---|
153 | lsList listOfRanges; /* This indicates the contents of the table |
---|
154 | entry if its type is normal */ |
---|
155 | }EntryData; |
---|
156 | }; |
---|
157 | |
---|
158 | |
---|
159 | /**Macro*********************************************************************** |
---|
160 | |
---|
161 | Synopsis [return refcount associated with table] |
---|
162 | |
---|
163 | Description [This functions returns the number of tables that share data |
---|
164 | with the given table. This count is used for memory management.] |
---|
165 | |
---|
166 | SideEffects [] |
---|
167 | |
---|
168 | SeeAlso [] |
---|
169 | |
---|
170 | ******************************************************************************/ |
---|
171 | #define TblTableReadRefCount( \ |
---|
172 | /* Tbl_Table_t * */ table /* The table to iterate over */ \ |
---|
173 | ) \ |
---|
174 | table->data->refCount |
---|
175 | |
---|
176 | /**Macro*********************************************************************** |
---|
177 | |
---|
178 | Synopsis [Return the data array associated with a table.] |
---|
179 | |
---|
180 | Description [] |
---|
181 | |
---|
182 | SideEffects [This array is NOT to be modified. The user is encouraged not |
---|
183 | to use this function. It is exported so as to make the macros for iteration over |
---|
184 | items in the table possible. The user should use these macros for accessing data. |
---|
185 | The macros that can be used are mentioned in the SeeAlso list] |
---|
186 | |
---|
187 | SeeAlso [Tbl_TableForEachEntry Tbl_TableForEachInputEntry Tbl_TableForEachOutputEntry |
---|
188 | Tbl_TableForEachInputVar Tbl_TableForEachOutputVar Tbl_TableForEachDefault] |
---|
189 | |
---|
190 | ******************************************************************************/ |
---|
191 | #define TblTableReadData( \ |
---|
192 | /* Tbl_Table_t * */ table /* The table to iterate over */ \ |
---|
193 | ) \ |
---|
194 | table->data->actualData |
---|
195 | |
---|
196 | /**Macro*********************************************************************** |
---|
197 | |
---|
198 | Synopsis [Return the defaults array associated with a table.] |
---|
199 | |
---|
200 | Description [] |
---|
201 | |
---|
202 | SideEffects [This array is NOT to be modified. The user is encouraged not |
---|
203 | to use this function. It is exported so as to make the macros for iteration over |
---|
204 | items in the table possible. The user should use these macros for accessing data. |
---|
205 | The macros that can be used are mentioned in the SeeAlso list] |
---|
206 | |
---|
207 | SeeAlso [Tbl_TableForEachEntry Tbl_TableForEachInputEntry Tbl_TableForEachOutputEntry |
---|
208 | Tbl_TableForEachInputVar Tbl_TableForEachOutputVar Tbl_TableForEachDefault] |
---|
209 | |
---|
210 | ******************************************************************************/ |
---|
211 | #define TblTableReadDefaults( \ |
---|
212 | /* Tbl_Table_t * */ table /* The table to iterate over */ \ |
---|
213 | ) \ |
---|
214 | table->data->defaults |
---|
215 | |
---|
216 | |
---|
217 | /**Macro*********************************************************************** |
---|
218 | |
---|
219 | Synopsis [ Generates all rows on the table ] |
---|
220 | |
---|
221 | Description [ Given a table this iterates over all its rows in smallest colum |
---|
222 | n |
---|
223 | first order.] |
---|
224 | |
---|
225 | SideEffects [ ] |
---|
226 | |
---|
227 | SeeAlso [ ] |
---|
228 | |
---|
229 | ******************************************************************************/ |
---|
230 | #define TblTableForEachRow( \ |
---|
231 | /* Tbl_Table_t * */ table /* The table to iterate over */, \ |
---|
232 | /* Tbl_Row_t * */ row /* The current row */, \ |
---|
233 | /* int */ rowNum /* The row number */ \ |
---|
234 | ) \ |
---|
235 | for(rowNum=0; (rowNum <array_n(TblTableReadData(table)))\ |
---|
236 | &&(row = array_fetch(Tbl_Row_t*,(TblTableReadData(table)),rowNum));rowNum++) |
---|
237 | |
---|
238 | /**AutomaticStart*************************************************************/ |
---|
239 | |
---|
240 | /*---------------------------------------------------------------------------*/ |
---|
241 | /* Function prototypes */ |
---|
242 | /*---------------------------------------------------------------------------*/ |
---|
243 | |
---|
244 | EXTERN mAigEdge_t TblEntryNormalConstructAig(mAig_Manager_t *manager, Tbl_Entry_t *entry, array_t *mAigArray); |
---|
245 | EXTERN mAigEdge_t TblEntryEqualConstructMAig(mAig_Manager_t * manager, Tbl_Entry_t * entry, MvfAig_Function_t * mAigArray, MvfAig_Function_t * mEigArray); |
---|
246 | EXTERN mdd_t * TblEntryNormalConstructMdd(mdd_manager *manager, Tbl_Entry_t * entry, array_t * mddArray); |
---|
247 | EXTERN mdd_t * TblEntryEqualConstructMdd(mdd_manager *manager, Tbl_Entry_t * entry, Mvf_Function_t * mddArray, Mvf_Function_t * mddEArray); |
---|
248 | EXTERN void TblEntryWriteBlifMv(Tbl_Table_t *table, Tbl_Entry_t *entry, FILE *fp); |
---|
249 | EXTERN void TblEntryWriteSmv(Tbl_Table_t *table, Tbl_Entry_t *entry, boolean varnameflag, FILE *fp); |
---|
250 | EXTERN void TblEntryWriteBlif(Tbl_Table_t *table, Tbl_Entry_t *entry, FILE *fp); |
---|
251 | EXTERN void TblRangeFree(Tbl_Range_t * range); |
---|
252 | EXTERN boolean TblTableDeleteLastRow(Tbl_Table_t* table); |
---|
253 | EXTERN void TblTableSetRow(Tbl_Table_t *table, Tbl_Row_t *row, int i); |
---|
254 | EXTERN array_t* TblRowReadOutputs(Tbl_Row_t * row); |
---|
255 | EXTERN array_t* TblRowReadInputs(Tbl_Row_t * row); |
---|
256 | EXTERN Tbl_Row_t* TblTableReadRow(Tbl_Table_t *table, int rowNum); |
---|
257 | EXTERN Tbl_Row_t* TblRowAlloc(void); |
---|
258 | EXTERN Tbl_Row_t* TblRowDup(Tbl_Row_t * row); |
---|
259 | EXTERN void TblRowSetEntry(Tbl_Row_t *row, Tbl_Entry_t * entry, int i, int flag); |
---|
260 | EXTERN void TblRowFree(Tbl_Row_t *row); |
---|
261 | EXTERN Tbl_Entry_t* TblRowReadEntry(Tbl_Row_t *row, int i, int flag); |
---|
262 | |
---|
263 | /**AutomaticEnd***************************************************************/ |
---|
264 | |
---|
265 | #endif /* _TBLINT */ |
---|