| 1 | /**CHeaderFile***************************************************************** |
|---|
| 2 | |
|---|
| 3 | FileName [img.h] |
|---|
| 4 | |
|---|
| 5 | PackageName [img] |
|---|
| 6 | |
|---|
| 7 | Synopsis [Methods for performing image computations.] |
|---|
| 8 | |
|---|
| 9 | Description [The image package is used to compute the image (forward or |
|---|
| 10 | backward) of a set under a vector of functions. The functions are given by |
|---|
| 11 | a graph of multi-valued functions (MVFs). This graph is built using the |
|---|
| 12 | partition package. Each vertex in this graph has an MVF and an MDD id. The |
|---|
| 13 | fanins of a vertex v give those vertices upon which the MVF at v depends. |
|---|
| 14 | The vector of functions to use for an image computation, the "roots", is |
|---|
| 15 | specified by an array of (names of) vertices of the graph. The domain |
|---|
| 16 | variables are the variables over which "from" sets are defined for forward |
|---|
| 17 | images, and "to" sets are defined for backward images. The range variables |
|---|
| 18 | are the variables over which "to" sets are defined for forward images, and |
|---|
| 19 | "from" sets are defined for backward images. The quantify variables are |
|---|
| 20 | additional variables over which the functions are defined; this set is |
|---|
| 21 | disjoint from domain variables. These variables are existentially |
|---|
| 22 | quantified from the results of backward image computation. <p> |
|---|
| 23 | |
|---|
| 24 | Computing images is fundamental to many symbolic analysis techniques, and |
|---|
| 25 | methods for computing images efficiently is an area of ongoing research. |
|---|
| 26 | For this reason, the image package has been designed with lots of |
|---|
| 27 | flexibility to easily allow new methods to be integrated (to add a new |
|---|
| 28 | method, see the instructions in imgInt.h). Applications that use the image |
|---|
| 29 | package can switch among different image methods simply by specifying the |
|---|
| 30 | method type in the image initialization routine. By using the returned |
|---|
| 31 | structure (Img_ImageInfo_t) from the initialization routine, all subsequent |
|---|
| 32 | (forward or backward) image computations will be done using the specified |
|---|
| 33 | method.<p> |
|---|
| 34 | |
|---|
| 35 | VIS users can control which image method is used by appropriately setting |
|---|
| 36 | the "image_method" flag. Also, VIS users can set flags to control |
|---|
| 37 | parameters for different image computation methods. Because the user has |
|---|
| 38 | the ability to change the values of these flags, Img_ImageInfo_t structs |
|---|
| 39 | should be freed and re-initialized whenever the VIS user changes the value |
|---|
| 40 | of these flags.<p> |
|---|
| 41 | |
|---|
| 42 | Following are descriptions of the methods implemented. In the descriptions, |
|---|
| 43 | x=x_1,...x_n is the set of domain variables, u=u_1,...,u_k is the set of |
|---|
| 44 | quantify variables, y=y_1,...,y_m is the set of range variables, and |
|---|
| 45 | f=f_1(x,u),...,f_m(x,u) is the set of functions under which we wish to |
|---|
| 46 | compute images.<p> |
|---|
| 47 | |
|---|
| 48 | <b>Monolithic:</b> This is the most naive approach possible. A single |
|---|
| 49 | relation T(x,y) is constructed during the initialization phase, using the |
|---|
| 50 | computation (exists u (prod_i(y_i = f_i(x,u)))). To compute the forward |
|---|
| 51 | image, where fromUpperBound=U(x), fromLowerBound=L(x), and toCareSet=C(y), |
|---|
| 52 | we first compute a set A(x) between U(x) and L(x). Then, T(x,y) is |
|---|
| 53 | simplified with respect to A(x) and C(y) to get T*. Finally, x is |
|---|
| 54 | quantified from T* to produce the final answer. Backward images are |
|---|
| 55 | computed analogously. The monolithic method does not recognize any |
|---|
| 56 | user-settable flags for image computation.<p> |
|---|
| 57 | |
|---|
| 58 | <b>IWLS95:</b> This technique is based on the early quantification heuristic. |
|---|
| 59 | The initialization process consists of following steps: |
|---|
| 60 | <UL> |
|---|
| 61 | <LI> Create the relation of the roots at the bit level |
|---|
| 62 | in terms of the quantify and domain variables. |
|---|
| 63 | <LI> Order the bit level relations. |
|---|
| 64 | <LI> Group the relations of bits together, making a cluster |
|---|
| 65 | whenever the BDD size reaches a threshold. |
|---|
| 66 | <LI> For each cluster, quantify out the quantify variables which |
|---|
| 67 | are local to that particular cluster. |
|---|
| 68 | <LI> Order the clusters using the algorithm given in |
|---|
| 69 | "Efficient BDD Algorithms for FSM Synthesis and |
|---|
| 70 | Verification", by R. K. Ranjan et. al. in the proceedings of |
|---|
| 71 | IWLS'95{1}. |
|---|
| 72 | <LI> The orders of the clusters for forward and backward image are |
|---|
| 73 | calculated and stored. Also stored is the schedule of |
|---|
| 74 | variables for early quantification. |
|---|
| 75 | </UL> |
|---|
| 76 | For forward and backward image computation the corresponding |
|---|
| 77 | routines are called with appropriate ordering of clusters and |
|---|
| 78 | early quantification schedule. <p>] |
|---|
| 79 | |
|---|
| 80 | Author [Rajeev Ranjan, Tom Shiple, Abelardo Pardo, In-Ho Moon] |
|---|
| 81 | |
|---|
| 82 | Copyright [Copyright (c) 1994-1996 The Regents of the Univ. of California. |
|---|
| 83 | All rights reserved. |
|---|
| 84 | |
|---|
| 85 | Permission is hereby granted, without written agreement and without license |
|---|
| 86 | or royalty fees, to use, copy, modify, and distribute this software and its |
|---|
| 87 | documentation for any purpose, provided that the above copyright notice and |
|---|
| 88 | the following two paragraphs appear in all copies of this software. |
|---|
| 89 | |
|---|
| 90 | IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR |
|---|
| 91 | DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT |
|---|
| 92 | OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF |
|---|
| 93 | CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|---|
| 94 | |
|---|
| 95 | THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, |
|---|
| 96 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
|---|
| 97 | FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN |
|---|
| 98 | "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE |
|---|
| 99 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.] |
|---|
| 100 | |
|---|
| 101 | Revision [$Id: img.h,v 1.50 2005/05/15 01:03:36 jinh Exp $] |
|---|
| 102 | |
|---|
| 103 | ******************************************************************************/ |
|---|
| 104 | |
|---|
| 105 | #ifndef _IMG |
|---|
| 106 | #define _IMG |
|---|
| 107 | |
|---|
| 108 | #include "vm.h" |
|---|
| 109 | #include "ntk.h" |
|---|
| 110 | |
|---|
| 111 | /*---------------------------------------------------------------------------*/ |
|---|
| 112 | /* Constant declarations */ |
|---|
| 113 | /*---------------------------------------------------------------------------*/ |
|---|
| 114 | |
|---|
| 115 | /* This is a threshold for finding dependent variables. */ |
|---|
| 116 | #define IMG_MAX_DEP_SIZE 20 |
|---|
| 117 | |
|---|
| 118 | /*---------------------------------------------------------------------------*/ |
|---|
| 119 | /* Structure declarations */ |
|---|
| 120 | /*---------------------------------------------------------------------------*/ |
|---|
| 121 | |
|---|
| 122 | /*---------------------------------------------------------------------------*/ |
|---|
| 123 | /* Type declarations */ |
|---|
| 124 | /*---------------------------------------------------------------------------*/ |
|---|
| 125 | typedef struct ImgImageInfoStruct Img_ImageInfo_t; |
|---|
| 126 | |
|---|
| 127 | /**Enum************************************************************************ |
|---|
| 128 | |
|---|
| 129 | Synopsis [Methods for image computation. See the description in img.h.] |
|---|
| 130 | |
|---|
| 131 | ******************************************************************************/ |
|---|
| 132 | typedef enum { |
|---|
| 133 | Img_Monolithic_c, |
|---|
| 134 | Img_Iwls95_c, |
|---|
| 135 | Img_Mlp_c, |
|---|
| 136 | Img_Tfm_c, /* transition function method */ |
|---|
| 137 | Img_Hybrid_c, /* hybrid image comutation */ |
|---|
| 138 | Img_Linear_c, |
|---|
| 139 | Img_Linear_Range_c, |
|---|
| 140 | Img_Default_c |
|---|
| 141 | } Img_MethodType; |
|---|
| 142 | |
|---|
| 143 | |
|---|
| 144 | /**Enum************************************************************************ |
|---|
| 145 | |
|---|
| 146 | Synopsis [Type to indicate the direction of image computation.] |
|---|
| 147 | |
|---|
| 148 | Description [Type to indicate the direction of image computation. When an |
|---|
| 149 | imageInfo structure is initialized, the application must specify what |
|---|
| 150 | "directions" of image computation will be performed: forward, backward, or |
|---|
| 151 | both.] |
|---|
| 152 | |
|---|
| 153 | ******************************************************************************/ |
|---|
| 154 | typedef enum { |
|---|
| 155 | Img_Forward_c, |
|---|
| 156 | Img_Backward_c, |
|---|
| 157 | Img_Both_c |
|---|
| 158 | } Img_DirectionType; |
|---|
| 159 | |
|---|
| 160 | |
|---|
| 161 | /**Enum************************************************************************ |
|---|
| 162 | |
|---|
| 163 | Synopsis [Type to indicate image minimization method.] |
|---|
| 164 | |
|---|
| 165 | Description [Type to indicate image minimization method.] |
|---|
| 166 | |
|---|
| 167 | ******************************************************************************/ |
|---|
| 168 | typedef enum { |
|---|
| 169 | Img_Restrict_c, /* default */ |
|---|
| 170 | Img_Constrain_c, |
|---|
| 171 | Img_Compact_c, |
|---|
| 172 | Img_Squeeze_c, |
|---|
| 173 | Img_And_c, |
|---|
| 174 | Img_OrNot_c, |
|---|
| 175 | Img_DefaultMinimizeMethod_c /* refer to img_minimize_method */ |
|---|
| 176 | } Img_MinimizeType; |
|---|
| 177 | |
|---|
| 178 | /**Enum************************************************************************ |
|---|
| 179 | |
|---|
| 180 | Synopsis [Image substitute direction] |
|---|
| 181 | |
|---|
| 182 | ******************************************************************************/ |
|---|
| 183 | typedef enum { |
|---|
| 184 | Img_D2R_c, /* domain to range */ |
|---|
| 185 | Img_R2D_c /* range to domain */ |
|---|
| 186 | } Img_SubstituteDir; |
|---|
| 187 | |
|---|
| 188 | /**Enum************************************************************************ |
|---|
| 189 | |
|---|
| 190 | Synopsis [State variables optimization direction] |
|---|
| 191 | |
|---|
| 192 | ******************************************************************************/ |
|---|
| 193 | typedef enum { |
|---|
| 194 | Opt_None, |
|---|
| 195 | Opt_CS, |
|---|
| 196 | Opt_NS, |
|---|
| 197 | Opt_Both |
|---|
| 198 | } Img_OptimizeType; |
|---|
| 199 | |
|---|
| 200 | /*---------------------------------------------------------------------------*/ |
|---|
| 201 | /* Variable declarations */ |
|---|
| 202 | /*---------------------------------------------------------------------------*/ |
|---|
| 203 | |
|---|
| 204 | |
|---|
| 205 | /*---------------------------------------------------------------------------*/ |
|---|
| 206 | /* Macro declarations */ |
|---|
| 207 | /*---------------------------------------------------------------------------*/ |
|---|
| 208 | |
|---|
| 209 | /**AutomaticStart*************************************************************/ |
|---|
| 210 | |
|---|
| 211 | /*---------------------------------------------------------------------------*/ |
|---|
| 212 | /* Function prototypes */ |
|---|
| 213 | /*---------------------------------------------------------------------------*/ |
|---|
| 214 | |
|---|
| 215 | EXTERN int Img_ImageBuildFwdLFPRelation(Ntk_Network_t *network, Img_ImageInfo_t *imageInfo, mdd_t *constraint, int whichTime, int *maxTime, int *numBlocks); |
|---|
| 216 | EXTERN void Img_PrintHybridOptions(void); |
|---|
| 217 | EXTERN mdd_t* Img_MultiwayLinearAndSmooth(mdd_manager *mddManager, array_t *relationArray, array_t *smoothVarMddIdArray, array_t *introducedVarMddIdArray, Img_MethodType method, Img_DirectionType direction); |
|---|
| 218 | EXTERN void Img_PrintPartitionedTransitionRelation(mdd_manager *mddManager, Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 219 | EXTERN void Img_ReorderPartitionedTransitionRelation(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 220 | EXTERN void Img_UpdateQuantificationSchedule(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 221 | EXTERN void Img_ClusterRelationArray(mdd_manager *mddManager, Img_MethodType method, Img_DirectionType direction, array_t *relationArray, array_t *domainVarMddIdArray, array_t *rangeVarMddIdArray, array_t *quantifyVarMddIdArray, array_t **clusteredRelationArray, array_t **arraySmoothVarBddArray, array_t **smoothVarCubeArray, boolean freeRelationArray); |
|---|
| 222 | EXTERN void Img_PrintMlpOptions(void); |
|---|
| 223 | EXTERN int Img_TfmGetRecursionStatistics(Img_ImageInfo_t *imageInfo, int preFlag, int *nRecurs, int *nLeaves, int *nTurns, float *averageDepth, int *maxDepth, int *nDecomps, int *topDecomp, int *maxDecomp, float *averageDecomp); |
|---|
| 224 | EXTERN void Img_TfmPrintStatistics(Img_ImageInfo_t *imageInfo, Img_DirectionType dir); |
|---|
| 225 | EXTERN void Img_TfmPrintRecursionStatistics(Img_ImageInfo_t *imageInfo, int preFlag); |
|---|
| 226 | EXTERN void Img_PrintTfmOptions(void); |
|---|
| 227 | EXTERN int Img_TfmGetCacheStatistics(Img_ImageInfo_t *imageInfo, int preFlag, double *inserts, double *lookups, double *hits, double *entries, int *nSlots, int *maxChainLength); |
|---|
| 228 | EXTERN int Img_TfmCheckGlobalCache(int preFlag); |
|---|
| 229 | EXTERN void Img_TfmPrintCacheStatistics(Img_ImageInfo_t *imageInfo, int preFlag); |
|---|
| 230 | EXTERN void Img_TfmFlushCache(Img_ImageInfo_t *imageInfo, int preFlag); |
|---|
| 231 | EXTERN void Img_Init(void); |
|---|
| 232 | EXTERN void Img_End(void); |
|---|
| 233 | EXTERN Img_MethodType Img_UserSpecifiedMethod(void); |
|---|
| 234 | EXTERN Img_ImageInfo_t * Img_ImageInfoInitialize(Img_ImageInfo_t *imageInfo, graph_t * mddNetwork, array_t * roots, array_t * domainVars, array_t * rangeVars, array_t * quantifyVars, mdd_t * domainCube, mdd_t * rangeCube, mdd_t * quantifyCube, Ntk_Network_t * network, Img_MethodType methodType, Img_DirectionType directionType, int FAFWFlag, mdd_t *winning); |
|---|
| 235 | EXTERN void Img_ImageInfoUpdateVariables(Img_ImageInfo_t *imageInfo, graph_t * mddNetwork, array_t * domainVars, array_t * quantifyVars, mdd_t * domainCube, mdd_t * quantifyCube); |
|---|
| 236 | EXTERN void Img_ImageAllowPartialImage(Img_ImageInfo_t *info, boolean value); |
|---|
| 237 | EXTERN void Img_ImagePrintPartialImageOptions(void); |
|---|
| 238 | EXTERN boolean Img_ImageWasPartial(Img_ImageInfo_t *info); |
|---|
| 239 | EXTERN mdd_t * Img_ImageInfoComputeImageWithDomainVars(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, array_t * toCareSetArray); |
|---|
| 240 | EXTERN mdd_t * Img_ImageInfoComputeFwdWithDomainVars(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, mdd_t * toCareSet); |
|---|
| 241 | EXTERN mdd_t * Img_ImageInfoComputeFwd(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, array_t * toCareSetArray); |
|---|
| 242 | EXTERN mdd_t * Img_ImageInfoComputePreImageWithDomainVars(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, array_t * toCareSetArray); |
|---|
| 243 | EXTERN mdd_t * Img_ImageInfoComputeEXWithDomainVars(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, array_t * toCareSetArray); |
|---|
| 244 | EXTERN mdd_t * Img_ImageInfoComputeBwdWithDomainVars(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, mdd_t * toCareSet); |
|---|
| 245 | EXTERN mdd_t * Img_ImageInfoComputeBwd(Img_ImageInfo_t * imageInfo, mdd_t * fromLowerBound, mdd_t * fromUpperBound, array_t * toCareSetArray); |
|---|
| 246 | EXTERN void Img_ImageInfoFree(Img_ImageInfo_t * imageInfo); |
|---|
| 247 | EXTERN char * Img_ImageInfoObtainMethodTypeAsString(Img_ImageInfo_t * imageInfo); |
|---|
| 248 | EXTERN Img_MethodType Img_ImageInfoObtainMethodType(Img_ImageInfo_t * imageInfo); |
|---|
| 249 | EXTERN void Img_ImageInfoPrintMethodParams(Img_ImageInfo_t *imageInfo, FILE *fp); |
|---|
| 250 | EXTERN void Img_ResetTrMinimizedFlag(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 251 | EXTERN Img_MinimizeType Img_ReadMinimizeMethod(void); |
|---|
| 252 | EXTERN void Img_MinimizeTransitionRelation(Img_ImageInfo_t *imageInfo, array_t *constrainArray, Img_MinimizeType minimizeMethod, Img_DirectionType directionType, boolean reorderIwls95Clusters); |
|---|
| 253 | EXTERN mdd_t * Img_MinimizeImage(mdd_t *image, mdd_t *constraint, Img_MinimizeType method, boolean underapprox); |
|---|
| 254 | EXTERN mdd_t * Img_AddDontCareToImage(mdd_t *image, mdd_t *constraint, Img_MinimizeType method); |
|---|
| 255 | EXTERN mdd_t * Img_MinimizeImageArray(mdd_t *image, array_t *constraintArray, Img_MinimizeType method, boolean underapprox); |
|---|
| 256 | EXTERN void Img_SetPrintMinimizeStatus(Img_ImageInfo_t *imageInfo, int status); |
|---|
| 257 | EXTERN int Img_ReadPrintMinimizeStatus(Img_ImageInfo_t *imageInfo); |
|---|
| 258 | EXTERN void Img_AbstractTransitionRelation(Img_ImageInfo_t *imageInfo, array_t *abstractVars, mdd_t *abstractCube, Img_DirectionType directionType); |
|---|
| 259 | EXTERN void Img_DupTransitionRelation(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 260 | EXTERN void Img_RestoreTransitionRelation(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 261 | EXTERN int Img_ApproximateTransitionRelation(Img_ImageInfo_t *imageInfo, bdd_approx_dir_t approxDir, bdd_approx_type_t approxMethod, int approxThreshold, double approxQuality, double approxQualityBias, Img_DirectionType directionType, mdd_t *bias); |
|---|
| 262 | EXTERN mdd_t * Img_ApproximateImage(mdd_manager *mgr, mdd_t *image, bdd_approx_dir_t approxDir, bdd_approx_type_t approxMethod, int approxThreshold, double approxQuality, double approxQualityBias, mdd_t *bias); |
|---|
| 263 | EXTERN int Img_IsPartitionedTransitionRelation(Img_ImageInfo_t *imageInfo); |
|---|
| 264 | EXTERN void Img_ResetNumberOfImageComputation(Img_DirectionType imgDir); |
|---|
| 265 | EXTERN int Img_GetNumberOfImageComputation(Img_DirectionType imgDir); |
|---|
| 266 | EXTERN array_t * Img_GetPartitionedTransitionRelation(Img_ImageInfo_t *imageInfo, Img_DirectionType directionType); |
|---|
| 267 | EXTERN void Img_ReplaceIthPartitionedTransitionRelation(Img_ImageInfo_t *imageInfo, int i, mdd_t *relation, Img_DirectionType directionType); |
|---|
| 268 | EXTERN void Img_ReplacePartitionedTransitionRelation(Img_ImageInfo_t *imageInfo, array_t *relationArray, Img_DirectionType directionType); |
|---|
| 269 | EXTERN mdd_t * Img_ComposeIntermediateNodes(graph_t *partition, mdd_t *node, array_t *psVars, array_t *nsVars, array_t *inputVars); |
|---|
| 270 | EXTERN void Img_ImageConstrainAndClusterTransitionRelation(Img_ImageInfo_t *imageInfo, Img_DirectionType direction, mdd_t *constrain, Img_MinimizeType minimizeMethod, boolean underApprox, boolean cleanUp, boolean forceReorder, int printStatus); |
|---|
| 271 | EXTERN Img_MinimizeType Img_GuidedSearchReadUnderApproxMinimizeMethod(void); |
|---|
| 272 | EXTERN Img_MinimizeType Img_GuidedSearchReadOverApproxMinimizeMethod(void); |
|---|
| 273 | EXTERN mdd_t * Img_Substitute(Img_ImageInfo_t *imageInfo, mdd_t *f, Img_SubstituteDir dir); |
|---|
| 274 | EXTERN mdd_t * Img_ImageGetUnreachableStates(Img_ImageInfo_t * imageInfo); |
|---|
| 275 | EXTERN void Img_ImageInfoSetUseOptimizedRelationFlag(Img_ImageInfo_t * imageInfo); |
|---|
| 276 | EXTERN void Img_ImageInfoResetUseOptimizedRelationFlag(Img_ImageInfo_t * imageInfo); |
|---|
| 277 | EXTERN void Img_ImageInfoResetLinearComputeRange(Img_ImageInfo_t * imageInfo); |
|---|
| 278 | EXTERN void Img_ImageInfoSetLinearComputeRange(Img_ImageInfo_t * imageInfo); |
|---|
| 279 | EXTERN int Img_IsTransitionRelationOptimized(Img_ImageInfo_t * imageInfo); |
|---|
| 280 | EXTERN void Img_ForwardImageInfoConjoinWithWinningStrategy( Img_ImageInfo_t * imageInfo, mdd_t *winningStrategy); |
|---|
| 281 | EXTERN void Img_ForwardImageInfoRecoverFromWinningStrategy( Img_ImageInfo_t * imageInfo); |
|---|
| 282 | EXTERN Img_OptimizeType Img_ImageInfoObtainOptimizeType(Img_ImageInfo_t * imageInfo); |
|---|
| 283 | EXTERN int Img_IsQuantifyCubeSame( Img_ImageInfo_t *imageInfo, mdd_t *quantifyCube); |
|---|
| 284 | EXTERN int Img_IsQuantifyArraySame( Img_ImageInfo_t *imageInfo, array_t *quantifyArray); |
|---|
| 285 | EXTERN void Img_ImageInfoFreeFAFW(Img_ImageInfo_t * imageInfo); |
|---|
| 286 | |
|---|
| 287 | |
|---|
| 288 | |
|---|
| 289 | |
|---|
| 290 | /** |
|---|
| 291 | EXTERN void ImgLinearClusterRelationArray(mdd_manager *mgr, ImgFunctionData_t *functionData, array_t *relationArray, Img_DirectionType direction, array_t **clusteredRelationArrayPtr, array_t **arraySmoothVarBddArrayPtr, array_t **optClusteredRelationArrayPtr, array_t **optArraySmoothVarBddArrayPtr, ImgTrmOption_t *option); |
|---|
| 292 | **/ |
|---|
| 293 | |
|---|
| 294 | |
|---|
| 295 | |
|---|
| 296 | /**AutomaticEnd***************************************************************/ |
|---|
| 297 | |
|---|
| 298 | #endif /* _IMG */ |
|---|