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
00022
00023
00024 #include <complex.h>
00025 #include <stdint.h>
00026 #include <float.h>
00027 #include <stdbool.h>
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_LINE,
00121 PS_DATA_LIST,
00122 PS_DATA_LOOKUPTABLE,
00123 PS_DATA_METADATA,
00124 PS_DATA_METADATAITEM,
00125 PS_DATA_MINIMIZATION,
00126 PS_DATA_PIXELS,
00127 PS_DATA_PLANE,
00128 PS_DATA_PLANEDISTORT,
00129 PS_DATA_PLANETRANSFORM,
00130 PS_DATA_POLYNOMIAL1D,
00131 PS_DATA_POLYNOMIAL2D,
00132 PS_DATA_POLYNOMIAL3D,
00133 PS_DATA_POLYNOMIAL4D,
00134 PS_DATA_PROJECTION,
00135 PS_DATA_REGION,
00136 PS_DATA_SCALAR,
00137 PS_DATA_SPHERE,
00138 PS_DATA_SPHEREROT,
00139 PS_DATA_SPLINE1D,
00140 PS_DATA_STATS,
00141 PS_DATA_TIME,
00142 PS_DATA_VECTOR,
00143 PS_DATA_UNKNOWN,
00144 PS_DATA_METADATA_MULTI
00145 } psDataType;
00146
00147 #define PS_TYPE_MASK PS_TYPE_U8
00148 #define PS_TYPE_MASK_DATA U8
00149 #define PS_TYPE_MASK_NAME "psU8"
00150
00151 typedef psU8 psMaskType;
00152 typedef psBool psBOOL;
00153
00154 #define PS_MIN_S8 INT8_MIN
00155 #define PS_MIN_S16 INT16_MIN
00156 #define PS_MIN_S32 INT32_MIN
00157 #define PS_MIN_S64 INT64_MIN
00158 #define PS_MIN_U8 0
00159 #define PS_MIN_U16 0
00160 #define PS_MIN_U32 0
00161 #define PS_MIN_U64 0
00162 #define PS_MIN_F32 -FLT_MAX
00163 #define PS_MIN_F64 -DBL_MAX
00164 #define PS_MIN_C32 -FLT_MAX
00165 #define PS_MIN_C64 -DBL_MAX
00166
00167 #define PS_MAX_S8 INT8_MAX
00168 #define PS_MAX_S16 INT16_MAX
00169 #define PS_MAX_S32 INT32_MAX
00170 #define PS_MAX_S64 INT64_MAX
00171 #define PS_MAX_U8 UINT8_MAX
00172 #define PS_MAX_U16 UINT16_MAX
00173 #define PS_MAX_U32 UINT32_MAX
00174 #define PS_MAX_U64 UINT64_MAX
00175 #define PS_MAX_F32 FLT_MAX
00176 #define PS_MAX_F64 DBL_MAX
00177 #define PS_MAX_C32 FLT_MAX
00178 #define PS_MAX_C64 DBL_MAX
00179
00180 #define PS_TYPE_BOOL_NAME "psBool"
00181 #define PS_TYPE_S8_NAME "psS8"
00182 #define PS_TYPE_S16_NAME "psS16"
00183 #define PS_TYPE_S32_NAME "psS32"
00184 #define PS_TYPE_S64_NAME "psS64"
00185 #define PS_TYPE_U8_NAME "psU8"
00186 #define PS_TYPE_U16_NAME "psU16"
00187 #define PS_TYPE_U32_NAME "psU32"
00188 #define PS_TYPE_U64_NAME "psU64"
00189 #define PS_TYPE_F32_NAME "psF32"
00190 #define PS_TYPE_F64_NAME "psF64"
00191 #define PS_TYPE_C32_NAME "psC32"
00192 #define PS_TYPE_C64_NAME "psC64"
00193
00194 #define PS_TYPE_NAME(value,type) \
00195 switch(type) { \
00196 case PS_TYPE_BOOL: \
00197 value = PS_TYPE_BOOL_NAME; \
00198 break; \
00199 case PS_TYPE_S8: \
00200 value = PS_TYPE_S8_NAME; \
00201 break; \
00202 case PS_TYPE_S16: \
00203 value = PS_TYPE_S16_NAME; \
00204 break; \
00205 case PS_TYPE_S32: \
00206 value = PS_TYPE_S32_NAME; \
00207 break; \
00208 case PS_TYPE_S64: \
00209 value = PS_TYPE_S64_NAME; \
00210 break; \
00211 case PS_TYPE_U8: \
00212 value = PS_TYPE_U8_NAME; \
00213 break; \
00214 case PS_TYPE_U16: \
00215 value = PS_TYPE_U16_NAME; \
00216 break; \
00217 case PS_TYPE_U32: \
00218 value = PS_TYPE_U32_NAME; \
00219 break; \
00220 case PS_TYPE_U64: \
00221 value = PS_TYPE_U64_NAME; \
00222 break; \
00223 case PS_TYPE_F32: \
00224 value = PS_TYPE_F32_NAME; \
00225 break; \
00226 case PS_TYPE_F64: \
00227 value = PS_TYPE_F64_NAME; \
00228 break; \
00229 case PS_TYPE_C32: \
00230 value = PS_TYPE_C32_NAME; \
00231 break; \
00232 case PS_TYPE_C64: \
00233 value = PS_TYPE_C64_NAME; \
00234 break; \
00235 default: \
00236 value = "unknown"; \
00237 };
00238
00239
00240 #define PS_BADPIXEL_BITMASK 0x0f
00241 #define PS_GET_BADPIXEL(maskValue) (maskValue & PS_BADPIXEL_BITMASK)
00242
00243 #define PS_IS_BADPIXEL(maskValue) (PS_GET_BADPIXEL(maskValue) != 0)
00244
00245
00246 #define PS_SET_BADPIXEL(maskValue, reasonCode) \
00247 { \
00248 maskValue = (psMaskType)((reasonCode & PS_BADPIXEL_BITMASK) | (maskValue & ~PS_BADPIXEL_BITMASK)); \
00249 }
00250
00251
00252 #define PS_IS_PSELEMTYPE_INT(x) ((x & 0x100) == 0x100)
00253
00254 #define PS_IS_PSELEMTYPE_UNSIGNED(x) ((x & 0x200) == 0x200)
00255
00256 #define PS_IS_PSELEMTYPE_REAL(x) ((x & 0x400) == 0x400)
00257
00258 #define PS_IS_PSELEMTYPE_COMPLEX(x) ((x & 0x800) == 0x800)
00259
00260 #define PS_IS_PSELEMTYPE_BOOL(x) ((x & 0x1000) == 0x1000)
00261
00262 #define PSELEMTYPE_SIZEOF(x) (x & 0xFF)
00263
00264
00265
00266
00267
00268
00269 typedef enum {
00270 PS_DIMEN_SCALAR,
00271 PS_DIMEN_VECTOR,
00272 PS_DIMEN_TRANSV,
00273 PS_DIMEN_IMAGE,
00274 PS_DIMEN_OTHER
00275 } psDimen;
00276
00277
00278
00279
00280
00281
00282
00283 typedef struct
00284 {
00285 psElemType type;
00286 psDimen dimen;
00287 }
00288 psMathType;
00289
00290
00291
00292
00293
00294
00295
00296 typedef struct
00297 {
00298 psMathType type;
00299 }
00300 psMath;
00301
00302
00303
00304
00305
00306 bool psMemCheckType(
00307 psDataType type,
00308 psPtr ptr
00309 );
00310
00311
00312 #endif // #ifndef PS_TYPE_H