+SceneNode *MetaScene::find_node(const char *name) const
+{
+ int num = scenes.size();
+ for(int i=0; i<num; i++) {
+ SceneNode *n = scenes[i]->find_node(name);
+ if(n) return n;
+ }
+ return 0;
+}
+
+SceneNode *MetaScene::match_node(const char *qstr) const
+{
+ int num = scenes.size();
+ for(int i=0; i<num; i++) {
+ SceneNode *n = scenes[i]->match_node(qstr);
+ if(n) return n;
+ }
+ return 0;
+}
+
+std::list<SceneNode*> MetaScene::match_nodes(const char *qstr) const
+{
+ std::list<SceneNode*> res;
+ int num = scenes.size();
+ for(int i=0; i<num; i++) {
+ std::list<SceneNode*> tmp = scenes[i]->match_nodes(qstr);
+ if(!tmp.empty()) {
+ res.splice(res.end(), tmp);
+ }
+ }
+ return std::move(res);
+}
+
+Scene *MetaScene::extract_nodes(const char *qstr)
+{
+ Scene *scn = 0;
+ int nscn = scenes.size();
+ for(int i=0; i<nscn; i++) {
+ Scene *tmp = scenes[i]->extract_nodes(qstr);
+ if(tmp) {
+ if(!scn) {
+ scn = tmp;
+ } else {
+ scn->merge(tmp);
+ delete tmp;
+ }
+ }
+ }
+ return scn;
+}
+