void SceneManager::clearSceneObjMap(SceneObjectMap& map) {
    for (SceneObjectMap::iterator it = map.begin(); it != map.end(); ++it) {
        if (it->second) {
            delete it->second;
        }
    }
    map.clear();
}
   void ParseScene(SceneObjectList& objList, const char *ScenePath) {
      objList.clear();

      std::string line;
      RTextFile scenefile(ScenePath);

      K_LOG("ESceneParser -- Start parsing: %s",ScenePath);
      SceneObjectMap obj;
      while (scenefile.GetLine(line)) {
         ParseLine(obj,line);
         if (obj.size() > 0)
            objList.push_back(obj);
      }
      K_LOG("ESceneParser -- End parsing: %s",ScenePath); 
   }
   void ParseLine(SceneObjectMap& obj, std::string& line) {
      std::string key, value;
      obj.clear();

      if (line[0] == '#') // suppress comment line
         return;

      const char *start = line.c_str(), *end, *last=line.c_str() + strlen(line.c_str());

      while (start < last) {
         end = strchr(start,':');
         if (end == NULL)
            break;
         key.assign(start,end);
         strip(key);
         start = end+1;

         end = strchr(start,'|');
         if (end == NULL)
            end=last;
         value.assign(start,end);
         strip(value);
         start = end+1;

         obj[key] = value;
      }
   }
SceneObj* SceneManager::createSceneObj(const string& objName,
                                       const string& objClassName,
                                       const KeyValuePairStringMap* params) {
	SceneObj* factory = getSceneObjFactory(objClassName);
    assert(factory != NULL);
	ThreadSafeSceneObjMap* objMap = getSceneObjMap(objClassName);
    assert(objMap != NULL);

    SceneObj* obj = NULL;
    obj = factory->create(this, objName, params);
    assert(obj != NULL);
    obj->setSceneManager(this);

    SceneObjBaseNameMap::iterator iter = objMap->sceneObjs.find(objName);
    if (iter == objMap->sceneObjs.end()) {
        SceneObjectMap map;
        map.insert(SceneObjectMap::value_type(obj->getFullName(), obj));
        objMap->sceneObjs.insert(SceneObjBaseNameMap::value_type(objName, map));
    } else {
        iter->second.insert(SceneObjectMap::value_type(obj->getFullName(), obj));
    }

    return obj;
}