void debug_value(BSP_VALUE *val) { if (!val) { fprintf(stderr, "\n\033[1;37m === [NOTHING TO DEBUG] ===\033[0m\n\n"); return; } fprintf(stderr, "\n\033[1;37m=== [Debug Value] === < START > ===\033[0m\n"); _dump_value(val, 0); fprintf(stderr, "\033[1;37m=== [Debug Value] === < END > ===\033[0m\n\n"); return; }
static void _dump_object(BSP_OBJECT *obj, int layer) { if (!obj) { return; } int i; BSP_VALUE *val; reset_object(obj); switch (obj->type) { case OBJECT_TYPE_SINGLE : // Single fprintf(stderr, "\033[1;37mObject type : [SINGLE]\033[0m\n"); val = object_get_single(obj); _dump_value(val, layer); break; case OBJECT_TYPE_ARRAY : // Array fprintf(stderr, "\033[1;37mObject type : [ARRAY]\033[0m\n"); size_t idx = 0; for (idx = 0; idx < object_size(obj); idx ++) { for (i = 0; i <= layer; i ++) { fprintf(stderr, "\t"); } fprintf(stderr, "\033[1;35m%lld\033[0m\t=> ", (long long int) idx); val = object_get_array(obj, idx); _dump_value(val, layer); } fprintf(stderr, "\n"); break; case OBJECT_TYPE_HASH : // Dict fprintf(stderr, "\033[1;37mObject type : [HASH]\033[0m\n"); val = curr_item(obj); BSP_STRING *key; while (val) { key = curr_hash_key(obj); for (i = 0; i <= layer; i ++) { fprintf(stderr, "\t"); } if (key) { fprintf(stderr, "\033[1;33m"); write(STDERR_FILENO, STR_STR(key), STR_LEN(key)); fprintf(stderr, "\033[0m"); } else { fprintf(stderr, "### NO KEY ###"); } fprintf(stderr, "\t=> "); _dump_value(val, layer); next_item(obj); val = curr_item(obj); } fprintf(stderr, "\n"); break; case OBJECT_TYPE_UNDETERMINED : default : // Null fprintf(stderr, "\033[1;36mObject type : [UNKNOWN]\033[0m\n"); break; } return; }
static void _dump_object(BSP_OBJECT *obj, int layer) { if (!obj) { return; } int i; size_t idx, total; BSP_VALUE *val; BSP_STRING *key; bsp_object_reset(obj); switch (obj->type) { case BSP_OBJECT_SINGLE : // Single fprintf(stderr, "\033[1;37mObject type : [SINGLE]\033[0m\n"); val = bsp_object_value_single(obj); _dump_value(val, layer); break; case BSP_OBJECT_ARRAY : // Array fprintf(stderr, "\033[1;37mObject type : [ARRAY]\033[0m\n"); total = bsp_object_size(obj); for (idx = 0; idx < total; idx ++) { for (i = 0; i <= layer; i ++) { fprintf(stderr, " "); } fprintf(stderr, "\033[1;35m%lld\033[0m\t=> ", (long long int) idx); val = bsp_object_value_array(obj, idx); _dump_value(val, layer); } fprintf(stderr, "\n"); break; case BSP_OBJECT_HASH : // Hash fprintf(stderr, "\033[1;37mObject type : [HASH]\033[0m\n"); val = bsp_object_curr(obj, (void **) &key); while (val && key) { for (i = 0; i <= layer; i ++) { fprintf(stderr, " "); } fprintf(stderr, "\033[1;33m"); write(STDERR_FILENO, STR_STR(key), STR_LEN(key)); fprintf(stderr, "\033[0m => "); _dump_value(val, layer); bsp_object_next(obj); val = bsp_object_curr(obj, (void **) &key); } fprintf(stderr, "\n"); break; case BSP_OBJECT_UNDETERMINED : default : // NullS fprintf(stderr, "\033[1;36mObject type : [UNKNOWN]\033[0m\n"); break; } return; }