00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef PS_TYPE_H
00019 #define PS_TYPE_H
00020
00021 #include <complex.h>
00022 #include <stdint.h>
00023 #include <float.h>
00024 #include <stdbool.h>
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 typedef uint8_t psU8;
00043 typedef uint16_t psU16;
00044 typedef uint32_t psU32;
00045 typedef uint64_t psU64;
00046 typedef int8_t psS8;
00047 typedef int16_t psS16;
00048 typedef int32_t psS32;
00049 typedef int64_t psS64;
00050 typedef float psF32;
00051 typedef double psF64;
00052
00053 #ifdef SWIG
00054
00055 typedef struct
00056 {
00057 float re, im;
00058 }
00059 psC32;
00060
00061
00062 typedef struct
00063 {
00064 double re,im;
00065 }
00066 psC64;
00067
00068 #else // SWIG
00069 typedef float complex psC32;
00070 typedef double complex psC64;
00071 #endif // !SWIG
00072
00073 typedef char* psString;
00074 typedef void* psPtr;
00075 typedef bool psBool;
00076
00077
00078
00079
00080 typedef enum {
00081 PS_TYPE_S8 = 0x0101,
00082 PS_TYPE_S16 = 0x0102,
00083 PS_TYPE_S32 = 0x0104,
00084 PS_TYPE_S64 = 0x0108,
00085 PS_TYPE_U8 = 0x0301,
00086 PS_TYPE_U16 = 0x0302,
00087 PS_TYPE_U32 = 0x0304,
00088 PS_TYPE_U64 = 0x0308,
00089 PS_TYPE_F32 = 0x0404,
00090 PS_TYPE_F64 = 0x0408,
00091 PS_TYPE_C32 = 0x0808,
00092 PS_TYPE_C64 = 0x0810,
00093 PS_TYPE_BOOL = 0x1301
00094 } psElemType;
00095
00096
00097
00098
00099 typedef enum {
00100 PS_DATA_S8 = PS_TYPE_S8,
00101 PS_DATA_S16 = PS_TYPE_S16,
00102 PS_DATA_S32 = PS_TYPE_S32,
00103 PS_DATA_S64 = PS_TYPE_S64,
00104 PS_DATA_U8 = PS_TYPE_U8,
00105 PS_DATA_U16 = PS_TYPE_U16,
00106 PS_DATA_U32 = PS_TYPE_U32,
00107 PS_DATA_U64 = PS_TYPE_U64,
00108 PS_DATA_F32 = PS_TYPE_F32,
00109 PS_DATA_F64 = PS_TYPE_F64,
00110 PS_DATA_BOOL = PS_TYPE_BOOL,
00111 PS_DATA_STRING = 0x10000,
00112 PS_DATA_ARRAY,
00113 PS_DATA_BITSET,
00114 PS_DATA_CUBE,
00115 PS_DATA_FITS,
00116 PS_DATA_HASH,
00117 PS_DATA_HISTOGRAM,
00118 PS_DATA_IMAGE,
00119 PS_DATA_KERNEL,
00120 PS_DATA_LIST,
00121 PS_DATA_LOOKUPTABLE,
00122 PS_DATA_METADATA,
00123 PS_DATA_METADATAITEM,
00124 PS_DATA_MINIMIZATION,
00125 PS_DATA_PIXELS,
00126 PS_DATA_PLANE,
00127 PS_DATA_PLANEDISTORT,
00128 PS_DATA_PLANETRANSFORM,
00129 PS_DATA_POLYNOMIAL1D,
00130 PS_DATA_POLYNOMIAL2D,
00131 PS_DATA_POLYNOMIAL3D,
00132 PS_DATA_POLYNOMIAL4D,
00133 PS_DATA_PROJECTION,
00134 PS_DATA_REGION,
00135 PS_DATA_SCALAR,
00136 PS_DATA_SPHERE,
00137 PS_DATA_SPHEREROT,
00138 PS_DATA_SPLINE1D,
00139 PS_DATA_STATS,
00140 PS_DATA_TIME,
00141 PS_DATA_VECTOR,
00142 PS_DATA_UNKNOWN,
00143 PS_DATA_METADATA_MULTI
00144 } psDataType;
00145
00146 #define PS_TYPE_MASK PS_TYPE_U8
00147 #define PS_TYPE_MASK_DATA U8
00148 #define PS_TYPE_MASK_NAME "psU8"
00149
00150 typedef psU8 psMaskType;
00151 typedef psBool psBOOL;
00152
00153 #define PS_MIN_S8 INT8_MIN
00154 #define PS_MIN_S16 INT16_MIN
00155 #define PS_MIN_S32 INT32_MIN
00156 #define PS_MIN_S64 INT64_MIN
00157 #define PS_MIN_U8 0
00158 #define PS_MIN_U16 0
00159 #define PS_MIN_U32 0
00160 #define PS_MIN_U64 0
00161 #define PS_MIN_F32 -FLT_MAX
00162 #define PS_MIN_F64 -DBL_MAX
00163 #define PS_MIN_C32 -FLT_MAX
00164 #define PS_MIN_C64 -DBL_MAX
00165
00166 #define PS_MAX_S8 INT8_MAX
00167 #define PS_MAX_S16 INT16_MAX
00168 #define PS_MAX_S32 INT32_MAX
00169 #define PS_MAX_S64 INT64_MAX
00170 #define PS_MAX_U8 UINT8_MAX
00171 #define PS_MAX_U16 UINT16_MAX
00172 #define PS_MAX_U32 UINT32_MAX
00173 #define PS_MAX_U64 UINT64_MAX
00174 #define PS_MAX_F32 FLT_MAX
00175 #define PS_MAX_F64 DBL_MAX
00176 #define PS_MAX_C32 FLT_MAX
00177 #define PS_MAX_C64 DBL_MAX
00178
00179 #define PS_TYPE_BOOL_NAME "psBool"
00180 #define PS_TYPE_S8_NAME "psS8"
00181 #define PS_TYPE_S16_NAME "psS16"
00182 #define PS_TYPE_S32_NAME "psS32"
00183 #define PS_TYPE_S64_NAME "psS64"
00184 #define PS_TYPE_U8_NAME "psU8"
00185 #define PS_TYPE_U16_NAME "psU16"
00186 #define PS_TYPE_U32_NAME "psU32"
00187 #define PS_TYPE_U64_NAME "psU64"
00188 #define PS_TYPE_F32_NAME "psF32"
00189 #define PS_TYPE_F64_NAME "psF64"
00190 #define PS_TYPE_C32_NAME "psC32"
00191 #define PS_TYPE_C64_NAME "psC64"
00192
00193 #define PS_TYPE_NAME(value,type) \
00194 switch(type) { \
00195 case PS_TYPE_BOOL: \
00196 value = PS_TYPE_BOOL_NAME; \
00197 break; \
00198 case PS_TYPE_S8: \
00199 value = PS_TYPE_S8_NAME; \
00200 break; \
00201 case PS_TYPE_S16: \
00202 value = PS_TYPE_S16_NAME; \
00203 break; \
00204 case PS_TYPE_S32: \
00205 value = PS_TYPE_S32_NAME; \
00206 break; \
00207 case PS_TYPE_S64: \
00208 value = PS_TYPE_S64_NAME; \
00209 break; \
00210 case PS_TYPE_U8: \
00211 value = PS_TYPE_U8_NAME; \
00212 break; \
00213 case PS_TYPE_U16: \
00214 value = PS_TYPE_U16_NAME; \
00215 break; \
00216 case PS_TYPE_U32: \
00217 value = PS_TYPE_U32_NAME; \
00218 break; \
00219 case PS_TYPE_U64: \
00220 value = PS_TYPE_U64_NAME; \
00221 break; \
00222 case PS_TYPE_F32: \
00223 value = PS_TYPE_F32_NAME; \
00224 break; \
00225 case PS_TYPE_F64: \
00226 value = PS_TYPE_F64_NAME; \
00227 break; \
00228 case PS_TYPE_C32: \
00229 value = PS_TYPE_C32_NAME; \
00230 break; \
00231 case PS_TYPE_C64: \
00232 value = PS_TYPE_C64_NAME; \
00233 break; \
00234 default: \
00235 value = "unknown"; \
00236 };
00237
00238
00239 #define PS_BADPIXEL_BITMASK 0x0f
00240 #define PS_GET_BADPIXEL(maskValue) (maskValue & PS_BADPIXEL_BITMASK)
00241
00242 #define PS_IS_BADPIXEL(maskValue) (PS_GET_BADPIXEL(maskValue) != 0)
00243
00244
00245 #define PS_SET_BADPIXEL(maskValue, reasonCode) \
00246 { \
00247 maskValue = (psMaskType)((reasonCode & PS_BADPIXEL_BITMASK) | (maskValue & ~PS_BADPIXEL_BITMASK)); \
00248 }
00249
00250
00251 #define PS_IS_PSELEMTYPE_INT(x) ((x & 0x100) == 0x100)
00252
00253 #define PS_IS_PSELEMTYPE_UNSIGNED(x) ((x & 0x200) == 0x200)
00254
00255 #define PS_IS_PSELEMTYPE_REAL(x) ((x & 0x400) == 0x400)
00256
00257 #define PS_IS_PSELEMTYPE_COMPLEX(x) ((x & 0x800) == 0x800)
00258
00259 #define PS_IS_PSELEMTYPE_BOOL(x) ((x & 0x1000) == 0x1000)
00260
00261 #define PSELEMTYPE_SIZEOF(x) (x & 0xFF)
00262
00263
00264
00265
00266
00267
00268 typedef enum {
00269 PS_DIMEN_SCALAR,
00270 PS_DIMEN_VECTOR,
00271 PS_DIMEN_TRANSV,
00272 PS_DIMEN_IMAGE,
00273 PS_DIMEN_OTHER
00274 } psDimen;
00275
00276
00277
00278
00279
00280
00281
00282 typedef struct
00283 {
00284 psElemType type;
00285 psDimen dimen;
00286 }
00287 psType;
00288
00289 typedef struct
00290 {
00291 psElemType type;
00292 psDimen dimen;
00293 }
00294 psMathType;
00295
00296
00297
00298
00299
00300
00301
00302 typedef struct
00303 {
00304 psMathType type;
00305 }
00306 psMath;
00307
00308
00309
00310 #endif // #ifndef PS_TYPE_H