class CCL::ClassFactory

Overview

#include <classfactory.h>

class ClassFactory:
    public CCL::Unknown,
    public CCL::IClassFactory
{
public:
    // typedefs

    typedef IUnknown*  (*UnknownCreateFunc)(
        UIDRef cid,
        void *userData
        );

    // structs

    struct ClassHashEntry;

    // fields

    VersionDesc version;
    Vector <ClassEntry*> classes;
    HashTable <ClassHashEntry, LinkedList <ClassHashEntry>> classIdTable;
    static ClassFactory* theInstance = nullptr;

    // methods

    void setVersion (const VersionDesc& version);
    bool isEmpty () const;
    const ClassDesc* findClass (UIDRef cid) const;

    bool registerClass (
        const ClassDesc& description,
        UnknownCreateFunc createFunc,
        void* userData = nullptr,
        IAttributeList* attributes = nullptr
    );

    bool unregisterClass (UIDRef cid);
    bool unregisterAll ();
    PROPERTY_BOOL (subCategoryAsFolder, SubCategoryAsFolder);

    LocalizationEnabled PROPERTY_POINTER (
        ClassAttributeProvider,
        attributeProvider,
        AttributeProvider
    ) const;

    virtual int CCL_API getNumClasses () const;
    virtual tbool CCL_API getClassDescription (ClassDesc& description, int index) const;

    virtual tbool CCL_API getClassAttributes (
        IAttributeList& attributes,
        UIDRef cid,
        StringID language
    ) const;

    virtual tresult CCL_API createInstance (UIDRef cid, UIDRef iid, void** obj);
    ClassEntry* lookup (UIDRef cid) const;
    static ClassFactory* instance ();
    static int hashClassEntry (const ClassHashEntry& entry, int size);
};

Inherited Members

public:
    // methods

    virtual tresult CCL_API queryInterface (UIDRef iid, void** ptr) = 0;
    virtual unsigned int CCL_API retain () = 0;
    virtual unsigned int CCL_API release () = 0;
    Unknown& operator = (const Unknown&);
    unsigned int getRetainCount () const;
    virtual tresult CCL_API createInstance (UIDRef cid, UIDRef iid, void** obj) = 0;
    virtual void CCL_API getVersion (VersionDesc& version) const = 0;
    virtual int CCL_API getNumClasses () const = 0;
    virtual tbool CCL_API getClassDescription (ClassDesc& description, int index) const = 0;

    virtual tbool CCL_API getClassAttributes (
        IAttributeList& attributes,
        UIDRef cid,
        StringID language
    ) const = 0;

Detailed Documentation

Methods

void setVersion (const VersionDesc& version)

Set factory version.

bool isEmpty () const

Check if factory is empty.

const ClassDesc* findClass (UIDRef cid) const

Find registered class.

bool registerClass (
    const ClassDesc& description,
    UnknownCreateFunc createFunc,
    void* userData = nullptr,
    IAttributeList* attributes = nullptr
)

Register class.

bool unregisterClass (UIDRef cid)

Unregister class.

bool unregisterAll ()

Unregister all classes.

PROPERTY_BOOL (subCategoryAsFolder, SubCategoryAsFolder)

Use subcategory as class folder attribute.

Enable localization of class attributes.

LocalizationEnabled PROPERTY_POINTER (
    ClassAttributeProvider,
    attributeProvider,
    AttributeProvider
) const

Class attribute provider (optional).

virtual int CCL_API getNumClasses () const

Returns number of exported classes.

virtual tbool CCL_API getClassDescription (ClassDesc& description, int index) const

Get description of class at specified index.

virtual tbool CCL_API getClassAttributes (
    IAttributeList& attributes,
    UIDRef cid,
    StringID language
) const

Get additional class attributes (optional).

virtual tresult CCL_API createInstance (UIDRef cid, UIDRef iid, void** obj)

Create new class instance.

static ClassFactory* instance ()

Global class factory instance, must be released by caller!