项目需求,从一个树结构中获取所有节点的名称,写了个递归方法,记录下来,方便以后查询。
void getAllStringIds(mpc::nsdk::IMediaIterator *it)
{
IMediaNode *self = nullptr;
IMediaIterator *curr = nullptr;
IMediaIterator *next = nullptr;
IMediaIterator *down = nullptr;
curr = it;
do{
self = curr->self();
next = curr->next();
down = curr->down();
mpc::nsdk::IMediaRes *resPtr = nullptr;
mpc::nsdk::SResId resId;
if(self->isRes())
{
resPtr = dynamic_cast< mpc::nsdk::IMediaRes* > ( self );
resId = resPtr->msid();
string stringId;
resIdStr(resId,stringId);
ost.write(stringId.c_str(),stringId.size());
string interval ="\r\n";
ost.write(interval.c_str(), interval.size());
}
// 如果有子节点,继续找子节点,知道找到最后一个子节点。
if(down)
{
getAllStringIds(down);
}
//递归从底层向,将每个子节点同一层的节点作为current节点继续循环下去。
//这种递归借助于堆栈嵌套,层数太多,可能会引起堆栈溢出。
if(next)
{
curr = next;
}
}while(next);
}