NODE* n=m_child;
m_child=m_child->m_next;
delete n;
return m_child;
}
for(int i=0;i
n1=n;
n=n->m_next;
}
n1->m_next=n->m_next;
delete n;
return n1->m_next;
}
_NODE* Remove(CJson* oCj) //remove self
{
if(!oCj)
{
return 0;
}
NODE* nNext=m_next;
if(!m_parent)
{
if(!oCj->m_root)
{
return 0;
}
if(oCj->m_root==this)
{
oCj->m_root=nNext;
delete this;
}
else
{
NODE *n=oCj->m_root;
while(n->m_next!=this)
{
n=n->m_next;
}
NODE* n1=n->m_next;
n->m_next=n1->m_next;
delete n1;
}
}
else
{
if(!m_parent->m_child)
{
return 0;
}
if(m_parent->m_child==this)
{
m_parent->m_child=nNext;
delete this;
}
else
{
NODE *n=m_parent->m_child;
while(n->m_next!=this)
{
n=n->m_next;
}
NODE* n1=n->m_next;
n->m_next=n1->m_next;
delete n1;
}
return nNext;
}
_NODE* Insert(_NODE* node,int index)
{
if(!node)
{
return 0;
}
if(!m_child)
{
m_child=node;
return node;
}
NODE* n=m_child;
for(int i=0;i
if(!n->m_next)
{
break;
}
n=n->m_next;
}
node->m_next=n->m_next;
n->m_next=node;
node->m_parent=this;
return node;
}
_NODE* Copy()
{
_NODE* n=new _NODE;
*n=*this;
n->m_child=0;
n->m_parent=0;
n->m_child=0;
return n;
}
private:
_NODE *m_child;
_NODE *m_next;
_NODE *m_parent;
}NODE;
CJson();
~CJson();
friend _NODE;
bool Load(char*);
NODE* GetRoot();
string GetJsonString();
NODE* Get(char*);
NODE* Append(TYPE,char*,char*,long);
NODE* Remove(NODE*); //return next node
NODE* Insert(NODE*,int);
private:
void Release(NODE*);
void output(NODE *);
inline string GetTab(int num){
string tab;
for(int i=0;i
tab+="\t";
}
return tab;
}
char