exhibit manager progress
[laserbrain_demo] / src / metascene.cc
index 6059664..985ac1c 100644 (file)
@@ -75,6 +75,57 @@ void MetaScene::draw() const
        }
 }
 
+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;
+}
+
 static bool proc_node(MetaScene *mscn, struct ts_node *node)
 {
        struct ts_node *c = node->child_list;