simple resource manager
这样写主要是比较方便,可以省一些代码。
功能还比较少。
代码,附带一个test:
http://files.cnblogs.com/nicky/simple_res_mgr.rar
#ifndef _RESOURCEMGR_H__
#define _RESOURCEMGR_H__
#include <map>
#include <boost/shared_ptr.hpp>
//#include "simple_string.h"
#include <string>
#include <sstream>
typedef std::string String;
namespace Nicky
{
template<typename ResPtr> //expecting boost shared_ptr type
class ResourceMgr
{
public:
typedef typename ResPtr::element_type res_type;
typedef ResPtr res_ptr_type;
typedef std::map<String,ResPtr> res_cont_type;
public:
ResourceMgr(void) {}
virtual ~ResourceMgr(void) {}
//derived class should implement its own create interface
virtual void Delete(const String& name)
{
res_cont_type::iterator i = m_Resources.find(name);
if (i != m_Resources.end())
m_Resources.erase(i);
}
virtual void Delete(const res_ptr_type& p)
{
res_cont_type::iterator i, iend = m_Resources.end();
for(i = m_Resources.begin(); i != iend; ++i)
{
if( i->second == p )
{
m_Resources.erase(i);
return;
}
}
}
virtual void DeleteAll()
{
m_Resources.clear();
}
//search
res_ptr_type getByName(const String& name) const
{
res_cont_type::const_iterator i = m_Resources.find(name);
if (i != m_Resources.end())
return i->second;
return res_ptr_type();
}
template<typename T>
boost::shared_ptr<T> getByName(const String& name, boost::shared_ptr<T>& p) const
{
res_cont_type::const_iterator i = m_Resources.find(name);
if (i != m_Resources.end())
return (p = boost::static_pointer_cast<T>(i->second));
return boost::shared_ptr<T>();
}
bool isExist(const String& name) const
{
res_cont_type::const_iterator i = m_Resources.find(name);
if (i != m_Resources.end())
return true;
return false;
}
protected:
String generateName() const
{
static int num_gen_names = 0;
String name;
std::stringstream ss;
ss<<"gen_"<<num_gen_names++;
name = ss.str();
return name;
}
//no care about name
res_ptr_type insert(const res_ptr_type& p)
{
return m_Resources.insert(
res_cont_type::value_type(this->generateName(), p)
).first->second;
}
template<typename T>
boost::shared_ptr<T> insert(const boost::shared_ptr<T>& p)
{
m_Resources.insert(
res_cont_type::value_type(this->generateName(), p)
);
return p;
}
//no care about name (name not yet existed)
res_ptr_type insert(const String& name, const res_ptr_type& p)
{
return m_Resources.insert(
res_cont_type::value_type(name, p)
).first->second;
}
template<typename T>
boost::shared_ptr<T> insert(const String& name, const boost::shared_ptr<T>& p)
{
m_Resources.insert(
res_cont_type::value_type(name, p)
);
return p;
}
protected:
//resource holder
res_cont_type m_Resources;
};
}
#endif //_RESOURCEMGR_H__
转载于:https://www.cnblogs.com/nicky/archive/2005/02/18/105784.html
simple resource manager相关推荐
- Oracle Resource Manager 概述
官网的链接说明 About Oracle Database Resource Manager http://docs.oracle.com/cd/E11882_01/server.112/e25494 ...
- System.Transactions:实现你自己的Resource Manager
By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...
- YARN/MRv2 Resource Manager深入剖析—RM总体架构
在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是App ...
- 彻底禁用resource manager
禁用resource manager 由于发现系统的一个等待事件:resmgr:cpu quantum.这是由于resource manager的原因.看来resource manager 的bug还 ...
- 详解yarn的resource manager组件
详解yarn的resource manager组件
- 在 Azure Resource Manager 中为虚拟机设置密钥保管库
Note Azure 具有两种不同的部署模型,用于创建和处理资源:Resource Manager 模型和经典模型.本文介绍使用 Resource Manager 部署模型.Azure 建议对大多数新 ...
- 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型
以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...
- 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
适用场景 用户希望将特定云服务下的所有虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称:ARM). Note 如果云服务下使用 VNET 也希望将 ...
- Script:Diagnostic Resource Manager
以下脚本可以用于诊断Oracle 10g以后的Resource Manager信息: ALTER SYSTEM SET resource_manager_plan=''; 本文转自maclean_00 ...
- OCA/OCP Oracle 数据库12c考试指南读书笔记:第20章: The Resource Manager
为保证SLA,用户要区别对待,牺牲一批人以保障一些人. 配置数据库资源管理 Oracle的资源管理与大机类似,可以保证无论负载如何,用户都可以获得约定SLA的服务. 资源管理的配置是简单的,但测试其效 ...
最新文章
- 7月个人:Windows和Linux绑定和解绑ARP 了解ARP命令的用途。 掌握ARP命令的使用。...
- 自己动手构建iSCSI磁盘阵列
- 设计模式总结 (3)创建内存型模式
- c语言cobegin用法,用C语言实现P、V操作
- 有没有一些细分IT行业,没有35岁现象
- jquery中常容易出错的checkbox的获得值
- 使用JavaVisualVM远程监控JVM虚拟机
- c语言 自动答题器,单片机原理作业—电子答题器(课程及设计).doc
- 英文论文写作必备网站
- creator tween复杂用法
- android ios9 rom,谁说安卓不如苹果?看Android7.0如何逆袭iOS9.3
- 国内首款众筹刷单破亿的产品诞生,监管缺乏下京东刷单文化盛行
- mysql每秒写入量_MySQL每秒可以插入多少条记录?影响MySQL插入速度的因素有哪些?...
- 不吸电子烟也请别吸电子咖啡!我们向雪加电子咖啡发起了挑战
- 域名解析-/etc/hosts
- 内部UML培训文件,欢迎大家批评指正
- 笔记:Stack overflow栈溢出
- Photoshop touch教程全攻略
- JQuery.slim.js
- PHP Encoder Ioncube 使用
热门文章
- centos6.5编译安装mysql_Centos6.5编译安装mysql 5.7.14详细教程
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合...
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_7_静态同步方法...
- charts 画折线图
- 20145212 罗天晨 Web安全基础实践
- 高聚合和低耦合的理解
- SRM 515 DIV1 550pt
- web项目继承ServletContainerInitializer进行访问HttpServlet(WebServlet)
- Mybatis 优化:
- 团队编程项目作业4-开发文档