//------------------------------------------------------------------------------------------------- Class& ClassManager::addClass(StringId id, const char* name) { // First make sure that the class doesn't already exist SortedClassVector::const_iterator iterator = std::lower_bound(m_classes.cbegin(), m_classes.cend(), id, OrderByClassId()); if (iterator != m_classes.end() && iterator->id == id) { CAMP_ERROR(ClassAlreadyCreated(name)); } // Create the new class Class* newClass = new Class(id, name); // Insert it into the sorted vector m_classes.emplace(iterator, ClassEntry(id, newClass)); // Notify observers notifyClassAdded(*newClass); // Done return *newClass; }
//------------------------------------------------------------------------------------------------- Class& ClassManager::addClass(const std::string& name, const std::string& id) { const IdIndex& ids = m_classes.get<Id>(); const NameIndex& names = m_classes.get<Name>(); // First make sure that the class doesn't already exist if ((ids.find(id) != ids.end()) || (names.find(name) != names.end())) CAMP_ERROR(ClassAlreadyCreated(name, id)); // Create the new class std::shared_ptr<Class> newClass(new Class(name)); // Insert it into the table ClassInfo info; info.id = id; info.name = name; info.classPtr = newClass; m_classes.insert(info); // Notify observers notifyClassAdded(*newClass); return *newClass; }