void EClassManager::realise() { if (_realised) { return; // nothing to do anymore } _realised = true; parseDefFiles(); resolveInheritance(); }
void EClassManager::reloadDefs() { // greebo: Leave all current entityclasses as they are, just invoke the // FileLoader again. It will parse the files again, and look up // the eclass names in the existing map. If found, the eclass // will be asked to clear itself and re-parse from the tokens. // This is to assure that any IEntityClassPtrs remain intakt during // the process, only the class contents change. parseDefFiles(); // Resolve the eclass inheritance again resolveInheritance(); _defsReloadedSignal.emit(); }
void EClassManager::reloadDefs() { // greebo: Leave all current entityclasses as they are, just invoke the // FileLoader again. It will parse the files again, and look up // the eclass names in the existing map. If found, the eclass // will be asked to clear itself and re-parse from the tokens. // This is to assure that any IEntityClassPtrs remain intakt during // the process, only the class contents change. parseDefFiles(); // Resolve the eclass inheritance again resolveInheritance(); for (Observers::const_iterator i = _observers.begin(); i != _observers.end(); ++i) { (*i)->onEClassReload(); } }
void Properties::resolveInheritance(const char* id) { // Namespaces can be defined like so: // "name id : parentID { }" // This method merges data from the parent namespace into the child. // Get a top-level namespace. Properties* derived; if (id) { derived = getNamespace(id); } else { derived = getNextNamespace(); } while (derived) { // If the namespace has a parent ID, find the parent. if (!derived->_parentID.empty()) { Properties* parent = getNamespace(derived->_parentID.c_str()); if (parent) { resolveInheritance(parent->getId()); // Copy the child. Properties* overrides = new (std::nothrow) Properties(*derived); // Delete the child's data. for (size_t i = 0, count = derived->_namespaces.size(); i < count; i++) { CC_SAFE_DELETE(derived->_namespaces[i]); } // Copy data from the parent into the child. derived->_properties = parent->_properties; derived->_namespaces = std::vector<Properties*>(); std::vector<Properties*>::const_iterator itt; for (const auto space: parent->_namespaces) { derived->_namespaces.push_back(new (std::nothrow) Properties(*space)); } derived->rewind(); // Take the original copy of the child and override the data copied from the parent. derived->mergeWith(overrides); // Delete the child copy. CC_SAFE_DELETE(overrides); } } // Resolve inheritance within this namespace. derived->resolveInheritance(); // Get the next top-level namespace and check again. if (!id) { derived = getNextNamespace(); } else { derived = NULL; } } }