switch(type) { \
case string_type: return (*data.STRING OP *d.data.STRING); \
case u32_int_type: return (data.U32_INT OP d.data.U32_INT); \
case s32_int_type: return (data.S32_INT OP d.data.S32_INT); \
case u16_int_type: return (data.U16_INT OP d.data.U16_INT); \
case s16_int_type: return (data.S16_INT OP d.data.S16_INT); \
case s8_int_type: return (data.S8_INT OP d.data.S8_INT); \
case u8_int_type: return (data.U8_INT OP d.data.U8_INT); \
case s64_int_type: return (data.S64_INT OP d.data.S64_INT); \
case u64_int_type: return (data.U64_INT OP d.data.U64_INT); \
case float_type: return (data.FLOAT OP d.data.FLOAT); \
case double_type: return (data.DOUBLE OP d.data.DOUBLE); \
case bool_type: return (data.BOOL OP d.data.BOOL); \
case date_type: return (data.DATE OP d.data.DATE); \
case time_type: return (data.TIME OP d.data.TIME); \
case enum_type: return (*data.ENUMERATION OP *d.data.ENUMERATION); \
case class_type: return (data.CLASS->get_name() OP d.data.CLASS->get_name()); \
case object_type: \
case uid_type: \
case uid2_type: \
return CMP_OBJ ( OP, __cn(), d.__cn(), __oid(), d.__oid() ); \
default: return false; \
}
#define CMP_OBJ(OP, c1, c2, id1, id2)