Exemplo n.º 1
0
//-------------------------------------------------------------------------------------------------
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;
}
Exemplo n.º 2
0
//-------------------------------------------------------------------------------------------------
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;
}