修复遍历时,删除第一个元素后不能继续遍历的BUG
This commit is contained in:
parent
45c733cda7
commit
6e367f54da
|
@ -32,10 +32,12 @@ namespace gb
|
|||
|
||||
json::json(char* json_txt) : obj_(0), cur_child_(0), is_array_(false)
|
||||
{
|
||||
memset(&walk_head_, 0, sizeof(walk_head_));
|
||||
attach_text(json_txt);
|
||||
}
|
||||
json::~json()
|
||||
{
|
||||
memset(&walk_head_, 0, sizeof(walk_head_));
|
||||
clear();
|
||||
}
|
||||
|
||||
|
@ -100,7 +102,7 @@ namespace gb
|
|||
{
|
||||
cJSON* obj = is_array ? cJSON_CreateArray() : cJSON_CreateObject();
|
||||
|
||||
bzero(obj, sizeof(*obj));
|
||||
// bzero(obj, sizeof(*obj)); // cleared in constructor already !
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
@ -571,10 +573,20 @@ namespace gb
|
|||
|
||||
if(ele)
|
||||
{
|
||||
//if(addr)
|
||||
// *addr = ele->next;
|
||||
bool cur_child = cur_child_ == obj_->child;
|
||||
|
||||
if(addr)
|
||||
*addr = ele->next;
|
||||
if (cur_child_ == ele)
|
||||
cur_child_ = ele->prev;
|
||||
{
|
||||
if (cur_child)
|
||||
{
|
||||
walk_head_.next = obj_->child;
|
||||
cur_child_ = &walk_head_;
|
||||
}
|
||||
else
|
||||
cur_child_ = ele->prev;
|
||||
}
|
||||
if (ele->prev)
|
||||
ele->prev->next = ele->next;
|
||||
if (ele->next)
|
||||
|
|
|
@ -15,7 +15,8 @@ namespace gb
|
|||
class json
|
||||
{
|
||||
cJSON *obj_;
|
||||
cJSON* cur_child_;
|
||||
cJSON *cur_child_;
|
||||
cJSON walk_head_;
|
||||
bool is_array_;
|
||||
|
||||
cJSON* find_sibling(cJSON* first, const char* name, cJSON*** addr);
|
||||
|
|
Loading…
Reference in New Issue