Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef dvector_INCLUDED
00037 #define dvector_INCLUDED
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00042
00195 #ifndef ND_RCS_ID
00196 #define ND_RCS_ID
00197 #ifdef _KEEP_RCS_ID
00198 #endif
00199 #endif
00200
00201 #include "defs.h"
00202 #include "errors.h"
00203 #include "mempool.h"
00204
00205
00206 typedef enum {
00207 DIR_POS=1,
00208 DIR_NEG=2,
00209 DIR_EQ=4,
00210 DIR_POSNEG=3,
00211 DIR_POSEQ=5,
00212 DIR_NEGEQ=6,
00213 DIR_STAR=7
00214 } DIRECTION;
00215
00216
00217
00218
00219
00220 typedef mINT16 DEP;
00221
00222 #define DISTANCE_FLAG_PRIVATE 0x8000
00223 #define DISTANCE_MASK_PRIVATE 0x0FFF
00224 #define DISTANCE_OFFSET_PRIVATE 2048
00225 #define DIRECTION_MASK_PRIVATE 0x7000
00226 #define MAX_BOUND_PRIVATE 4095
00227 #define MAX_DISTANCE_PRIVATE 2047
00228 #define MIN_DISTANCE_PRIVATE -2048
00229
00230 extern DEP DEP_SetDistance(INT32 distance);
00231 extern void DEP_Lex_Pos_Decompose(DEP dep,MEM_POOL *pool,DEP **pos,
00232 DEP **neg, BOOL keep_pos_equals,BOOL keep_neg_equals) ;
00233
00234 extern DEP DEP_Lex_Pos_Compose(DEP *pos, DEP *neg, BOOL *pos_has_eq,
00235 BOOL *neg_has_eq);
00236
00237 inline BOOL DEP_IsDistance(DEP dep)
00238 {
00239 return(dep & DISTANCE_FLAG_PRIVATE);
00240 }
00241
00242 inline INT32 DEP_Distance(DEP dep)
00243 {
00244 Is_True(DEP_IsDistance(dep),("DEP_Distance called on non-constant dist."));
00245 return(((INT32) (dep & DISTANCE_MASK_PRIVATE)) - DISTANCE_OFFSET_PRIVATE);
00246 }
00247
00248 inline UINT32 DEP_DistanceBound(DEP dep)
00249 {
00250 return(((UINT32) (dep & DISTANCE_MASK_PRIVATE)) - DISTANCE_OFFSET_PRIVATE);
00251 }
00252
00253 inline DIRECTION DEP_Direction(DEP dep)
00254 {
00255 return((DIRECTION) ((dep & DIRECTION_MASK_PRIVATE) >> 12));
00256 }
00257
00258 inline DEP DEP_MAKE_DIST_CONST_PRIVATE(DEP dep)
00259 {
00260 return (dep | DISTANCE_FLAG_PRIVATE);
00261 }
00262
00263 inline DEP DEP_MAKE_DIST_NON_CONST_PRIVATE(DEP dep)
00264 {
00265 return( dep & (~DISTANCE_FLAG_PRIVATE));
00266 }
00267
00268
00269 inline DEP DEP_SET_DIR_PRIVATE(DEP dep,DIRECTION direction)
00270 {
00271 dep &= (~DIRECTION_MASK_PRIVATE);
00272 dep |= ((mINT16) direction) << 12;
00273 return (dep);
00274 }
00275
00276
00277
00278 inline DEP DEP_SET_DIST_PRIVATE(DEP dep,INT32 distance)
00279 {
00280 dep &= (~DISTANCE_MASK_PRIVATE);
00281 dep = (mINT16) (dep | (distance + DISTANCE_OFFSET_PRIVATE));
00282 return (dep);
00283 }
00284
00285
00286
00287
00288
00289
00290
00291 typedef DEP DEPV;
00292
00293
00294 #define DEPV_Dep(depv,i) depv[i]
00295
00296
00297 inline void DEPV_Free(MEM_POOL *mem_pool,DEPV *depv)
00298 {
00299 MEM_POOL_FREE(mem_pool,depv);
00300 }
00301
00302 extern DEP DEP_SetDirection(DIRECTION direction);
00303 extern DEP DEP_UnionDirection(DEP dep,DIRECTION direction);
00304 extern DEP DEP_Negate(DEP dep);
00305 extern void DIRECTION_Print(DIRECTION dir,FILE *fp);
00306 extern void DEP_Print(const DEP dep,FILE *fp);
00307 extern void DEP_PrintBound(const DEP dep,FILE *fp);
00308 extern DEPV *DEPV_Create(MEM_POOL *mem_pool,UINT8 num_dim);
00309 extern DEPV *DEPV_CreateStar(MEM_POOL *mem_pool,UINT8 num_dim);
00310 extern DEPV *DEPV_CreateEqual(MEM_POOL *mem_pool,UINT8 num_dim);
00311 extern DEPV *DEPV_Copy(MEM_POOL *mem_pool, DEPV *depv, UINT8 num_dim);
00312 extern void DEPV_Print(const DEPV *depv,FILE *fp, UINT8 num_dim);
00313 extern void DEPV_PrintBound(const DEPV *depv,FILE *fp, UINT8 num_dim);
00314
00315 #ifdef __cplusplus
00316 }
00317 #endif
00318
00319 #endif
00320
00321
00322