obj.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __OBJ_H__
00017 #define __OBJ_H__
00018
00019
00029 #define OD_MARK_SHIFT 14
00030 #define OD_FREE_SHIFT 15
00031 #define OD_MARK_BIT (uint16_t)(1 << OD_MARK_SHIFT)
00032 #define OD_FREE_BIT (uint16_t)(1 << OD_FREE_SHIFT)
00033 #define OD_SIZE_MASK (uint16_t)(0x01FF)
00034 #define OD_TYPE_MASK (uint16_t)(0x3E00)
00035 #define OD_TYPE_SHIFT 9
00036
00038 #define HD_SIZE_MASK (uint16_t)(0x3FFF)
00039
00040
00045 #define OBJ_GET_FREE(pobj) \
00046 ((((pPmObj_t)pobj)->od >> OD_FREE_SHIFT) & (uint8_t)1)
00047
00053 #define OBJ_SET_FREE(pobj, free) \
00054 do \
00055 { \
00056 ((pPmObj_t)pobj)->od = ((uint8_t)free) \
00057 ? ((pPmObj_t)pobj)->od | OD_FREE_BIT \
00058 : ((pPmObj_t)pobj)->od & ~OD_FREE_BIT;\
00059 } \
00060 while (0)
00061
00062
00063
00064
00065
00066
00073 #define OBJ_GET_SIZE(pobj) \
00074 ((((pPmObj_t)pobj)->od & OD_FREE_BIT) \
00075 ? ((((pPmObj_t)pobj)->od & HD_SIZE_MASK) << 2) \
00076 : ((((pPmObj_t)pobj)->od & OD_SIZE_MASK) << 2))
00077
00084 #define OBJ_SET_SIZE(pobj, size) \
00085 do \
00086 { \
00087 if (((pPmObj_t)pobj)->od & OD_FREE_BIT) \
00088 { \
00089 ((pPmObj_t)pobj)->od &= ~HD_SIZE_MASK; \
00090 ((pPmObj_t)pobj)->od |= (((size) >> 2) & HD_SIZE_MASK); \
00091 } \
00092 else \
00093 { \
00094 ((pPmObj_t)pobj)->od &= ~OD_SIZE_MASK; \
00095 ((pPmObj_t)pobj)->od |= (((size) >> 2) & OD_SIZE_MASK); \
00096 } \
00097 } \
00098 while (0)
00099
00104 #define OBJ_GET_TYPE(pobj) \
00105 (((((pPmObj_t)pobj)->od) & OD_TYPE_MASK) >> OD_TYPE_SHIFT)
00106
00111 #define OBJ_SET_TYPE(pobj, type) \
00112 do \
00113 { \
00114 ((pPmObj_t)pobj)->od &= ~OD_TYPE_MASK; \
00115 ((pPmObj_t)pobj)->od |= (((type) << OD_TYPE_SHIFT) & OD_TYPE_MASK); \
00116 } \
00117 while (0)
00118
00119
00130 typedef enum PmType_e
00131 {
00132 OBJ_TYPE_HASHABLE_MIN = 0x00,
00133
00135 OBJ_TYPE_NON = 0x00,
00136
00138 OBJ_TYPE_INT = 0x01,
00139
00141 OBJ_TYPE_FLT = 0x02,
00142
00144 OBJ_TYPE_STR = 0x03,
00145
00147 OBJ_TYPE_TUP = 0x04,
00148
00150 OBJ_TYPE_COB = 0x05,
00151
00153 OBJ_TYPE_MOD = 0x06,
00154
00156 OBJ_TYPE_CLO = 0x07,
00157
00159 OBJ_TYPE_FXN = 0x08,
00160
00162 OBJ_TYPE_CLI = 0x09,
00163
00165 OBJ_TYPE_CIM = 0x0A,
00166
00168 OBJ_TYPE_NIM = 0x0B,
00169
00171 OBJ_TYPE_NOB = 0x0C,
00172
00174 OBJ_TYPE_THR = 0x0D,
00175
00177 OBJ_TYPE_BOOL = 0x0F,
00178
00180 OBJ_TYPE_CIO = 0x10,
00181
00183 OBJ_TYPE_MTH = 0x11,
00184
00185
00186 OBJ_TYPE_HASHABLE_MAX = 0x11,
00187
00189 OBJ_TYPE_LST = 0x12,
00190
00192 OBJ_TYPE_DIC = 0x13,
00193
00194
00195 OBJ_TYPE_ACCESSIBLE_MAX = 0x19,
00196
00198 OBJ_TYPE_FRM = 0x19,
00199
00201 OBJ_TYPE_BLK = 0x1A,
00202
00204 OBJ_TYPE_SEG = 0x1B,
00205
00207 OBJ_TYPE_SGL = 0x1C,
00208
00210 OBJ_TYPE_SQI = 0x1D,
00211
00213 OBJ_TYPE_NFM = 0x1E,
00214 } PmType_t, *pPmType_t;
00215
00216
00241 typedef uint16_t PmObjDesc_t,
00242 *pPmObjDesc_t;
00243
00249 typedef struct PmObj_s
00250 {
00252 PmObjDesc_t od;
00253 } PmObj_t,
00254 *pPmObj_t;
00255
00257 typedef struct PmBoolean_s
00258 {
00260 PmObjDesc_t od;
00261
00263 int32_t val;
00264 }
00265 PmBoolean_t, *pPmBoolean_t;
00266
00267
00298 PmReturn_t obj_loadFromImg(PmMemSpace_t memspace,
00299 uint8_t const **paddr, pPmObj_t *r_pobj);
00300
00308 PmReturn_t obj_loadFromImgObj(pPmObj_t pimg, pPmObj_t *r_pobj);
00309
00316 int8_t obj_isFalse(pPmObj_t pobj);
00317
00324 PmReturn_t obj_isIn(pPmObj_t pobj, pPmObj_t pitem);
00325
00333 int8_t obj_compare(pPmObj_t pobj1, pPmObj_t pobj2);
00334
00345 PmReturn_t obj_print(pPmObj_t pobj, uint8_t marshallString);
00346
00347 #ifdef HAVE_BACKTICK
00348
00356 PmReturn_t obj_repr(pPmObj_t pobj, pPmObj_t *r_pstr);
00357 #endif
00358
00359 #endif