[14] | 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 */ |
---|