liCondition* li_value_extract_condition(liValue *val) { liCondition* result; if (NULL == val || val->type != LI_VALUE_CONDITION) return NULL; result = val->data.val_cond.cond; _li_value_clear(val); return result; }
void li_value_clear(liValue *val) { if (NULL == val) return; switch (val->type) { case LI_VALUE_NONE: case LI_VALUE_BOOLEAN: case LI_VALUE_NUMBER: /* Nothing to free */ break; case LI_VALUE_STRING: g_string_free(val->data.string, TRUE); break; case LI_VALUE_LIST: li_value_list_free(val->data.list); break; case LI_VALUE_HASH: g_hash_table_destroy(val->data.hash); break; case LI_VALUE_ACTION: li_action_release(val->data.val_action.srv, val->data.val_action.action); break; case LI_VALUE_CONDITION: li_condition_release(val->data.val_cond.srv, val->data.val_cond.cond); break; } _li_value_clear(val); }
void li_value_clear(liValue *val) { if (NULL == val) return; switch (val->type) { case LI_VALUE_ACTION: li_action_release(val->data.val_action.srv, val->data.val_action.action); _li_value_clear(val); break; case LI_VALUE_CONDITION: li_condition_release(val->data.val_cond.srv, val->data.val_cond.cond); _li_value_clear(val); break; default: li_common_value_clear_(val); } }
GPtrArray* li_value_extract_list(liValue *val) { GPtrArray* result; if (NULL == val || val->type != LI_VALUE_LIST) return NULL; result = val->data.list; _li_value_clear(val); return result; }
liAction* li_value_extract_action(liValue *val) { liAction* result; if (NULL == val || val->type != LI_VALUE_ACTION) return NULL; result = val->data.val_action.action; _li_value_clear(val); return result; }
GString* li_value_extract_string(liValue *val) { GString* result; if (NULL == val || val->type != LI_VALUE_STRING) return NULL; result = val->data.string; _li_value_clear(val); return result; }
liValue* li_value_extract(liValue *val) { liValue *v; if (NULL == val) return NULL; v = li_value_new_none(); *v = *val; _li_value_clear(val); return v; }
gpointer li_value_extract_ptr(liValue *val) { gpointer ptr; if (NULL == val) return NULL; switch (val->type) { case LI_VALUE_ACTION: ptr = val->data.val_action.action; _li_value_clear(val); return ptr; case LI_VALUE_CONDITION: ptr = val->data.val_action.action; _li_value_clear(val); return ptr; default: return li_common_value_extract_ptr_(val); } }
void li_common_value_clear_(liValue *val) { if (NULL == val) return; switch (val->type) { case LI_VALUE_NONE: case LI_VALUE_BOOLEAN: case LI_VALUE_NUMBER: /* Nothing to free */ break; case LI_VALUE_STRING: g_string_free(val->data.string, TRUE); break; case LI_VALUE_LIST: li_value_list_free(val->data.list); break; } _li_value_clear(val); }
gpointer li_common_value_extract_ptr_(liValue *val) { gpointer ptr = NULL; if (NULL == val) return NULL; switch (val->type) { case LI_VALUE_NONE: break; case LI_VALUE_BOOLEAN: break; case LI_VALUE_NUMBER: break; case LI_VALUE_STRING: ptr = val->data.string; break; case LI_VALUE_LIST: ptr = val->data.list; break; } _li_value_clear(val); return ptr; }
void li_value_move(liValue *dest, liValue *src) { assert(NULL != dest && NULL != src && dest != src); li_value_clear(dest); *dest = *src; _li_value_clear(src); }
void li_value_move(liValue *dest, liValue *src) { LI_FORCE_ASSERT(NULL != dest && NULL != src && dest != src); li_value_clear(dest); *dest = *src; _li_value_clear(src); }