📄 factory.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 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>voidFactory::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>boolFactory::Iterator<T>::operator==(void* p){ return (m_pobject == p);}template <class T>boolFactory::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>boolFactory::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>boolFactory::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 + -