added the rctx field to mio_json_t
changed mio_json_instcb_t to get passed the content pointer
This commit is contained in:
		@ -155,7 +155,7 @@ static int invoke_data_inst (mio_json_t* json, mio_json_inst_t inst)
 | 
			
		||||
		inst = MIO_JSON_INST_KEY;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return json->instcb(json, inst, json->state_stack->level, &json->tok);
 | 
			
		||||
	return json->instcb(json, inst, json->state_stack->level, &json->tok, json->rctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int handle_string_value_char (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
@ -333,7 +333,7 @@ printf ("HANDLE START CHAR [%c]\n", c);
 | 
			
		||||
	{
 | 
			
		||||
		if (push_read_state(json, MIO_JSON_STATE_IN_ARRAY) <= -1) return -1;
 | 
			
		||||
		json->state_stack->u.ia.got_value = 0;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
		json->state_stack->level++;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
@ -341,7 +341,7 @@ printf ("HANDLE START CHAR [%c]\n", c);
 | 
			
		||||
	{
 | 
			
		||||
		if (push_read_state(json, MIO_JSON_STATE_IN_DIC) <= -1) return -1;
 | 
			
		||||
		json->state_stack->u.id.state = 0;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
		json->state_stack->level++;
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
@ -364,7 +364,7 @@ static int handle_char_in_array (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
{
 | 
			
		||||
	if (c == ']')
 | 
			
		||||
	{
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_END_ARRAY, json->state_stack->level - 1, MIO_NULL) <= -1) return -1;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_END_ARRAY, json->state_stack->level - 1, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
		pop_read_state (json);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
@ -416,7 +416,7 @@ static int handle_char_in_array (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
		{
 | 
			
		||||
			if (push_read_state(json, MIO_JSON_STATE_IN_ARRAY) <= -1) return -1;
 | 
			
		||||
			json->state_stack->u.ia.got_value = 0;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
			json->state_stack->level++;
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
@ -424,7 +424,7 @@ static int handle_char_in_array (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
		{
 | 
			
		||||
			if (push_read_state(json, MIO_JSON_STATE_IN_DIC) <= -1) return -1;
 | 
			
		||||
			json->state_stack->u.id.state = 0;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
			json->state_stack->level++;
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
@ -440,7 +440,7 @@ static int handle_char_in_dic (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
{
 | 
			
		||||
	if (c == '}')
 | 
			
		||||
	{
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_END_DIC, json->state_stack->level - 1, MIO_NULL) <= -1) return -1;
 | 
			
		||||
		if (json->instcb(json, MIO_JSON_INST_END_DIC, json->state_stack->level - 1, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
		pop_read_state (json);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
@ -508,7 +508,7 @@ static int handle_char_in_dic (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
			if (push_read_state(json, MIO_JSON_STATE_IN_ARRAY) <= -1) return -1;
 | 
			
		||||
			json->state_stack->u.ia.got_value = 0;
 | 
			
		||||
			json->state_stack->level++;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_ARRAY, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		else if (c == '{')
 | 
			
		||||
@ -516,7 +516,7 @@ static int handle_char_in_dic (mio_json_t* json, mio_ooci_t c)
 | 
			
		||||
			if (push_read_state(json, MIO_JSON_STATE_IN_DIC) <= -1) return -1;
 | 
			
		||||
			json->state_stack->u.id.state = 0;
 | 
			
		||||
			json->state_stack->level++;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL) <= -1) return -1;
 | 
			
		||||
			if (json->instcb(json, MIO_JSON_INST_START_DIC, json->state_stack->level, MIO_NULL, json->rctx) <= -1) return -1;
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
@ -709,9 +709,10 @@ void mio_json_fini (mio_json_t* json)
 | 
			
		||||
}
 | 
			
		||||
/* ========================================================================= */
 | 
			
		||||
 | 
			
		||||
void mio_json_setinstcb (mio_json_t* json, mio_json_instcb_t instcb)
 | 
			
		||||
void mio_json_setinstcb (mio_json_t* json, mio_json_instcb_t instcb, void* ctx)
 | 
			
		||||
{
 | 
			
		||||
	json->instcb = instcb;
 | 
			
		||||
	json->rctx = ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mio_json_state_t mio_json_getstate (mio_json_t* json)
 | 
			
		||||
 | 
			
		||||
@ -70,7 +70,8 @@ typedef int (*mio_json_instcb_t) (
 | 
			
		||||
	mio_json_t*           json,
 | 
			
		||||
	mio_json_inst_t       inst,
 | 
			
		||||
	mio_oow_t             level,
 | 
			
		||||
	const mio_oocs_t*     str
 | 
			
		||||
	const mio_oocs_t*     str,
 | 
			
		||||
	void*                 ctx
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -120,6 +121,7 @@ struct mio_json_t
 | 
			
		||||
{
 | 
			
		||||
	mio_t* mio;
 | 
			
		||||
	mio_json_instcb_t instcb;
 | 
			
		||||
	void* rctx;
 | 
			
		||||
 | 
			
		||||
	mio_json_state_node_t state_top;
 | 
			
		||||
	mio_json_state_node_t* state_stack;
 | 
			
		||||
@ -199,7 +201,8 @@ static MIO_INLINE void* mio_json_getxtn (mio_json_t* json) { return (void*)(json
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT void mio_json_setinstcb (
 | 
			
		||||
	mio_json_t*       json,
 | 
			
		||||
	mio_json_instcb_t instcb
 | 
			
		||||
	mio_json_instcb_t instcb,
 | 
			
		||||
	void*             ctx
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
MIO_EXPORT mio_json_state_t mio_json_getstate (
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user