⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 factory.h

📁 audio-video-codecs.rar语音编解码器
💻 H
字号:
//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2005-2006 Intel Corporation. All Rights Reserved.
//

#ifndef __FACTORY_H
#define __FACTORY_H

#include "object.h"
#include "vm_strings.h"
#include "vm_shared_object.h"

class Factory
{
protected:
    ObjectsList    m_objects_list;
public:
    Factory();
    ~Factory();

    bool Load(vm_char* p_filename,vm_char* p_funcname = NULL);
    bool InitStatic(void);

protected:
    bool          RegObjectsList(ObjectsList* p_list);
public:
    ObjectsList*  GetObjectsList(void);

    template <class T = Object>
    class Iterator
    {
    protected:
        ObjectsList* m_plist;
        ObjectsList* m_pcurrent_list;
        Object*      m_pobject;
    public:

        Iterator();
        Iterator(Factory& factory);

        void        operator=(Factory& factory);

        bool        operator ==(void*p);
        bool        operator !=(void*p);
        T*          operator ->();
        Iterator<T> operator ++(int);

        bool        Find(vm_char*);
    protected:
        bool        GetNext(void);

    };
};

template <class T>
Factory::Iterator<T>::Iterator()
{
    m_pcurrent_list = m_plist = &g_static_objects_list;
    m_pobject = m_pcurrent_list->p_begin;
}

template <class T>
Factory::Iterator<T>::Iterator(Factory& factory)
{
    m_pcurrent_list = m_plist = factory.GetObjectsList();
    m_pobject = m_pcurrent_list->p_begin;

    GetNext();
}

template <class T>
void
Factory::Iterator<T>::operator=(Factory& factory)
{
    m_pcurrent_list = m_plist = factory.GetObjectsList();
    m_pobject = m_pcurrent_list->p_begin;

    if (m_pobject == NULL) GetNext();
}

template <class T>
bool
Factory::Iterator<T>::operator==(void* p)
{
    return (m_pobject == p);
}

template <class T>
bool
Factory::Iterator<T>::operator!=(void* p)
{
    return (m_pobject != p);
}

template <class T>
T*
Factory::Iterator<T>::operator ->()
{
    return (T*)m_pobject;
}
template <class T>
Factory::Iterator<T>
Factory::Iterator<T>::operator ++(int)
{
    GetNext();
    return *this;
}

template <class T>
bool
Factory::Iterator<T>::Find(vm_char* p_name)
{
    ObjectsList* p_list_iterator;
    T*           p_obj_iterator;

    if (p_name == NULL) return false;

    p_list_iterator = m_plist;

    while (p_list_iterator != NULL)
    {
        p_obj_iterator = (T*)p_list_iterator->p_begin;
        while (p_obj_iterator != NULL)
        {
            if (ObjectTypeCheck<T>(p_obj_iterator))
            {
                if (!vm_string_strcmp(p_obj_iterator->GetName(),p_name))
                {
                    m_pobject = p_obj_iterator;
                    m_pcurrent_list = p_list_iterator;
                    return true;
                }
            }
            p_obj_iterator = (T*)p_obj_iterator->m_pnext;
        }
        p_list_iterator = p_list_iterator->p_next;
    }
    return false;
}

template <class T>
bool
Factory::Iterator<T>::GetNext(void)
{
    ObjectsList*   p_list_iterator;
    T*             p_obj_iterator;

    if (m_pcurrent_list == NULL)
    {
        return false;
    }

    p_list_iterator = m_pcurrent_list;
    p_obj_iterator =(T*) m_pobject;
    if (p_obj_iterator ) p_obj_iterator = (T*)p_obj_iterator->m_pnext;

    for(;;)
    {
        while (p_obj_iterator != NULL)
        {
            if (ObjectTypeCheck(p_obj_iterator))
            {
                m_pobject = p_obj_iterator;
                m_pcurrent_list = p_list_iterator;
                return true;
            }
            p_obj_iterator = (T*)p_obj_iterator->m_pnext;
        }
        p_list_iterator = p_list_iterator->p_next;
        if (p_list_iterator == NULL) break;
        p_obj_iterator = (T*)p_list_iterator->p_begin;
    }

    m_pobject = NULL;
    m_pcurrent_list = NULL;
    return false;
}

#endif /* __FACTORY_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -