生物管理器
来源:互联网 发布:电脑打不开淘宝网页 编辑:程序博客网 时间:2024/05/17 02:05
/********************************************************************* 文件名: Server.h* 文件描述: 网络游戏模拟* 创建人: 陈泽丹 ,2012年11月16日 * 版本号: 1.0* 修改记录:********************************************************************/#pragma once#include <map>#include <vector>using namespace std;//生物工厂template< class _ID_TYPE >class Unit_Factory{public:Unit_Factory(){ m_delete_sign.out_for(); }virtual ~Unit_Factory(){ delete_accessorys(); }//订阅template<class _T>bool push_single(_ID_TYPE _uid, _T* _p_obj){MAP_TYPE::iterator it = m_delete_objs.find(_uid);if( m_delete_objs.end() == it ){m_delete_objs[_uid] = new Die_Single<_T>(_p_obj);return true;}return false;}//订阅template<class _T>bool push_array(_ID_TYPE _uid, _T* _p_obj){MAP_TYPE::iterator it = m_delete_objs.find(_uid);if( m_delete_objs.end() == it ){m_delete_objs[_uid] = new Die_Array<_T>(_p_obj);return true;}return false;}//取得生物指针void* get_unit(_ID_TYPE _uid){MAP_TYPE::iterator it = m_delete_objs.find(_uid);if( m_delete_objs.end() != it ){void* p_ret = NULL;it->second->get_accessory(p_ret);return p_ret;}return NULL;}//取消void pop(_ID_TYPE _uid){MAP_TYPE::iterator it = m_delete_objs.find(_uid);if( m_delete_objs.end() != it ){if( m_delete_sign.is_for() && it == m_nonius ){delete it->second;m_nonius = m_delete_objs.erase(it);m_delete_sign.delete_in_for();}else {delete it->second;m_delete_objs.erase(it);}}}private://删除相关附件void delete_accessorys(){//回调for(m_nonius = m_delete_objs.begin(); m_delete_objs.end() != m_nonius; ){m_delete_sign.in_for();MAP_TYPE::iterator cur = m_nonius;cur->second->delete_accessory(); if( m_delete_sign.no_deletion() )m_nonius++;m_delete_sign.out_for();}//清空for(m_nonius = m_delete_objs.begin(); m_delete_objs.end() != m_nonius; ){m_delete_sign.in_for();MAP_TYPE::iterator cur = m_nonius;pop(cur->first);if( m_delete_sign.no_deletion() )m_nonius++;m_delete_sign.out_for();}m_delete_objs.clear();}class Delete_Sign{public:inline void in_for(){ operator_state = 1; }inline void out_for(){ operator_state = 0; }inline void delete_in_for(){ operator_state = 2;}inline bool is_for(){ return (operator_state >= 1)? true : false; }inline bool no_deletion(){ return (2 == operator_state)? false : true; }private:byte operator_state;};//代理项struct IDeleteSink{ virtual ~IDeleteSink(){}virtual void get_accessory(void *&_p) = 0;virtual void delete_accessory() = 0;};//绑定附件template<class _T>struct Die_Single:public IDeleteSink{ Die_Single(_T* _p):m_p(_p){}void get_accessory(void *&_p){ _p = m_p; }void delete_accessory(){ delete m_p; } _T* m_p;};//绑定附件template<class _T>struct Die_Array:public IDeleteSink{ Die_Array(_T* _p):m_p(_p){}void get_accessory(void *&_p){ _p = m_p; }void delete_accessory(){ delete[] m_p; } _T* m_p;};//记录typedef map< _ID_TYPE, IDeleteSink* >MAP_TYPE;MAP_TYPEm_delete_objs;typename MAP_TYPE::iteratorm_nonius;Delete_Signm_delete_sign;};//删除代理class Delete_Proxy: public Unit_Factory< void* >{public://订阅template<class _T>bool push_single(_T* _p_obj){return Unit_Factory< void* >::push_single( _p_obj, _p_obj );}//订阅template<class _T>bool push_array(_T* _p_obj){return Unit_Factory< void* >::push_array( _p_obj, _p_obj );}};
- 生物管理器
- 非人生物
- 生物研究所
- 非碳基生物
- 生物岛
- 生物填料
- 生物OS
- 生物节律
- 生物计算机
- 生物信息学
- 延生物的延生物
- 生物在线补习及生物网址
- 生物历史时期概述
- 生物识别市场专题
- 生物加密万无一失
- 生物大灭绝
- 生物信息学数据库大全
- 生物信息学(Bioinformatics)
- JavaScript被扩展以支持并行运算
- SMART原则 及 在探索性测试中的实践
- pdf加入书签
- 文章17 ngx_http_request_t结构体详解
- Windows扫雷的设计思路与实现
- 生物管理器
- Android Binder IPC分析
- 深度分析ORACLE热点块问题
- Mysql基本命令
- Smarty学完后的总结
- 辛兴涛老师讲 windows 8 初步认识 及html5的 vs工具涉入 (1)
- SQLite剖析(7):锁和并发控制
- 第三章 字符串类型
- java写入中文乱码的问题解决