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