00001 #include <esg/explorer/NodesByNameExpl.h> 00002 00003 using namespace esg; 00004 00005 bool NodesByNameExpl::_explore(SceneGraphObject& obj) 00006 { 00007 /* 00008 * Chack name of the node 00009 */ 00010 if (!_name) return false; 00011 00012 const char * n = obj.getName(); 00013 bool found = false; 00014 00015 if (!n || strlen(n) == 0) { 00016 if (_falsePositives) { 00017 _foundObjects.append(&obj); 00018 found = true; 00019 } 00020 } else { 00021 if (strcmp(_name, n) == 0) { 00022 _foundObjects.append(&obj); 00023 found = true; 00024 } 00025 } 00026 00027 /* 00028 * Inspect subnodes and/or attributes 00029 */ 00030 return (((obj.hasSubnodes()) ? _iterate(obj) : false) | found); 00031 } 00032 00033 NodesByNameExpl::NodesByNameExpl(const char * name, bool falsePositives) 00034 : _falsePositives(falsePositives) 00035 { 00036 setName(name); 00037 } 00038 00039 NodesByNameExpl::~NodesByNameExpl() 00040 { 00041 delete _name; 00042 } 00043 00044 void NodesByNameExpl::setName(const char * name) 00045 { 00046 if (_name) delete _name; 00047 size_t size = strlen(name) + 1; 00048 _name = (char*) malloc(sizeof(char) * size); 00049 _name = strncpy(_name, name, size); 00050 } 00051 00052 SceneGraphObject* NodesByNameExpl::result() 00053 { 00054 return _foundObjects.remove(_foundObjects.firstItem()); 00055 }