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 typedef struct
00055 {
00056 float re, im;
00057 }
00058 psC32;
00059 typedef struct
00060 {
00061 double re,im;
00062 }
00063 psC64;
00064 #else
00065 typedef float _Complex psC32;
00066 typedef double _Complex psC64;
00067 #endif
00068
00069 typedef void* psPtr;
00070 typedef bool psBool;
00071
00072 typedef enum {
00073 PS_TYPE_S8 = 0x0101,
00074 PS_TYPE_S16 = 0x0102,
00075 PS_TYPE_S32 = 0x0104,
00076 PS_TYPE_S64 = 0x0108,
00077 PS_TYPE_U8 = 0x0301,
00078 PS_TYPE_U16 = 0x0302,
00079 PS_TYPE_U32 = 0x0304,
00080 PS_TYPE_U64 = 0x0308,
00081 PS_TYPE_F32 = 0x0404,
00082 PS_TYPE_F64 = 0x0408,
00083 PS_TYPE_C32 = 0x0808,
00084 PS_TYPE_C64 = 0x0810,
00085 PS_TYPE_BOOL = 0x1301,
00086 PS_TYPE_PTR = 0x0000
00087 } psElemType;
00088
00089 #define PS_TYPE_MASK PS_TYPE_U8
00090 #define PS_TYPE_MASK_DATA U8
00091 #define PS_TYPE_MASK_NAME "psU8"
00092
00093 typedef psU8 psMaskType;
00094 typedef psBool psBOOL;
00095
00096 #define PS_MIN_S8 INT8_MIN
00097 #define PS_MIN_S16 INT16_MIN
00098 #define PS_MIN_S32 INT32_MIN
00099 #define PS_MIN_S64 INT64_MIN
00100 #define PS_MIN_U8 0
00101 #define PS_MIN_U16 0
00102 #define PS_MIN_U32 0
00103 #define PS_MIN_U64 0
00104 #define PS_MIN_F32 -FLT_MAX
00105 #define PS_MIN_F64 -DBL_MAX
00106 #define PS_MIN_C32 -FLT_MAX
00107 #define PS_MIN_C64 -DBL_MAX
00108
00109 #define PS_MAX_S8 INT8_MAX
00110 #define PS_MAX_S16 INT16_MAX
00111 #define PS_MAX_S32 INT32_MAX
00112 #define PS_MAX_S64 INT64_MAX
00113 #define PS_MAX_U8 UINT8_MAX
00114 #define PS_MAX_U16 UINT16_MAX
00115 #define PS_MAX_U32 UINT32_MAX
00116 #define PS_MAX_U64 UINT64_MAX
00117 #define PS_MAX_F32 FLT_MAX
00118 #define PS_MAX_F64 DBL_MAX
00119 #define PS_MAX_C32 FLT_MAX
00120 #define PS_MAX_C64 DBL_MAX
00121
00122 #define PS_TYPE_BOOL_NAME "psBool"
00123 #define PS_TYPE_S8_NAME "psS8"
00124 #define PS_TYPE_S16_NAME "psS16"
00125 #define PS_TYPE_S32_NAME "psS32"
00126 #define PS_TYPE_S64_NAME "psS64"
00127 #define PS_TYPE_U8_NAME "psU8"
00128 #define PS_TYPE_U16_NAME "psU16"
00129 #define PS_TYPE_U32_NAME "psU32"
00130 #define PS_TYPE_U64_NAME "psU64"
00131 #define PS_TYPE_F32_NAME "psF32"
00132 #define PS_TYPE_F64_NAME "psF64"
00133 #define PS_TYPE_C32_NAME "psC32"
00134 #define PS_TYPE_C64_NAME "psC64"
00135 #define PS_TYPE_PTR_NAME "psPtr"
00136
00137 #define PS_TYPE_NAME(value,type) \
00138 switch(type) { \
00139 case PS_TYPE_BOOL: \
00140 value = PS_TYPE_BOOL_NAME; \
00141 break; \
00142 case PS_TYPE_S8: \
00143 value = PS_TYPE_S8_NAME; \
00144 break; \
00145 case PS_TYPE_S16: \
00146 value = PS_TYPE_S16_NAME; \
00147 break; \
00148 case PS_TYPE_S32: \
00149 value = PS_TYPE_S32_NAME; \
00150 break; \
00151 case PS_TYPE_S64: \
00152 value = PS_TYPE_S64_NAME; \
00153 break; \
00154 case PS_TYPE_U8: \
00155 value = PS_TYPE_U8_NAME; \
00156 break; \
00157 case PS_TYPE_U16: \
00158 value = PS_TYPE_U16_NAME; \
00159 break; \
00160 case PS_TYPE_U32: \
00161 value = PS_TYPE_U32_NAME; \
00162 break; \
00163 case PS_TYPE_U64: \
00164 value = PS_TYPE_U64_NAME; \
00165 break; \
00166 case PS_TYPE_F32: \
00167 value = PS_TYPE_F32_NAME; \
00168 break; \
00169 case PS_TYPE_F64: \
00170 value = PS_TYPE_F64_NAME; \
00171 break; \
00172 case PS_TYPE_C32: \
00173 value = PS_TYPE_C32_NAME; \
00174 break; \
00175 case PS_TYPE_C64: \
00176 value = PS_TYPE_C64_NAME; \
00177 break; \
00178 case PS_TYPE_PTR: \
00179 value = PS_TYPE_PTR_NAME; \
00180 break; \
00181 default: \
00182 value = "unknown"; \
00183 };
00184
00185
00186 #define PS_BADPIXEL_BITMASK 0x0f
00187 #define PS_GET_BADPIXEL(maskValue) (maskValue & PS_BADPIXEL_BITMASK)
00188
00189 #define PS_IS_BADPIXEL(maskValue) (PS_GET_BADPIXEL(maskValue) != 0)
00190
00191
00192 #define PS_SET_BADPIXEL(maskValue, reasonCode) \
00193 { \
00194 maskValue = (psMaskType)((reasonCode & PS_BADPIXEL_BITMASK) | (maskValue & ~PS_BADPIXEL_BITMASK)); \
00195 }
00196
00197
00198 #define PS_IS_PSELEMTYPE_INT(x) ((x & 0x100) == 0x100)
00199
00200 #define PS_IS_PSELEMTYPE_UNSIGNED(x) ((x & 0x200) == 0x200)
00201
00202 #define PS_IS_PSELEMTYPE_REAL(x) ((x & 0x400) == 0x400)
00203
00204 #define PS_IS_PSELEMTYPE_COMPLEX(x) ((x & 0x800) == 0x800)
00205
00206 #define PS_IS_PSELEMTYPE_BOOL(x) ((x & 0x1000) == 0x1000)
00207
00208 #define PSELEMTYPE_SIZEOF(x) ( (x==(PS_TYPE_PTR&0xFFFF)) ? sizeof(psPtr) :(x & 0xFF) )
00209
00210
00211
00212
00213
00214
00215 typedef enum {
00216 PS_DIMEN_SCALAR,
00217 PS_DIMEN_VECTOR,
00218 PS_DIMEN_TRANSV,
00219 PS_DIMEN_IMAGE,
00220 PS_DIMEN_OTHER
00221 } psDimen;
00222
00223
00224
00225
00226
00227
00228
00229 typedef struct
00230 {
00231 psElemType type;
00232 psDimen dimen;
00233 }
00234 psType;
00235
00236
00237
00238
00239
00240
00241
00242 typedef struct
00243 {
00244 psType type;
00245 }
00246 psMath;
00247
00248
00249
00250 #endif