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