一个简单的资源管理器:

这样写主要是比较方便,可以省一些代码。
功能还比较少。

代码,附带一个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相关推荐

  1. Oracle Resource Manager 概述

    官网的链接说明 About Oracle Database Resource Manager http://docs.oracle.com/cd/E11882_01/server.112/e25494 ...

  2. System.Transactions:实现你自己的Resource Manager

    By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...

  3. YARN/MRv2 Resource Manager深入剖析—RM总体架构

    在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是App ...

  4. 彻底禁用resource manager

    禁用resource manager 由于发现系统的一个等待事件:resmgr:cpu quantum.这是由于resource manager的原因.看来resource manager 的bug还 ...

  5. 详解yarn的resource manager组件

    详解yarn的resource manager组件

  6. 在 Azure Resource Manager 中为虚拟机设置密钥保管库

    Note Azure 具有两种不同的部署模型,用于创建和处理资源:Resource Manager 模型和经典模型.本文介绍使用 Resource Manager 部署模型.Azure 建议对大多数新 ...

  7. 使用 Azure CLI 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager 部署模型

    以下步骤演示如何使用 Azure 命令行接口 (CLI) 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 本文中的操作需要 Az ...

  8. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager

    适用场景 用户希望将特定云服务下的所有虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称:ARM). Note 如果云服务下使用 VNET 也希望将 ...

  9. Script:Diagnostic Resource Manager

    以下脚本可以用于诊断Oracle 10g以后的Resource Manager信息: ALTER SYSTEM SET resource_manager_plan=''; 本文转自maclean_00 ...

  10. OCA/OCP Oracle 数据库12c考试指南读书笔记:第20章: The Resource Manager

    为保证SLA,用户要区别对待,牺牲一批人以保障一些人. 配置数据库资源管理 Oracle的资源管理与大机类似,可以保证无论负载如何,用户都可以获得约定SLA的服务. 资源管理的配置是简单的,但测试其效 ...

最新文章

  1. 7月个人:Windows和Linux绑定和解绑ARP 了解ARP命令的用途。 掌握ARP命令的使用。...
  2. 自己动手构建iSCSI磁盘阵列
  3. 设计模式总结 (3)创建内存型模式
  4. c语言cobegin用法,用C语言实现P、V操作
  5. 有没有一些细分IT行业,没有35岁现象
  6. jquery中常容易出错的checkbox的获得值
  7. 使用JavaVisualVM远程监控JVM虚拟机
  8. c语言 自动答题器,单片机原理作业—电子答题器(课程及设计).doc
  9. 英文论文写作必备网站
  10. creator tween复杂用法
  11. android ios9 rom,谁说安卓不如苹果?看Android7.0如何逆袭iOS9.3
  12. 国内首款众筹刷单破亿的产品诞生,监管缺乏下京东刷单文化盛行
  13. mysql每秒写入量_MySQL每秒可以插入多少条记录?影响MySQL插入速度的因素有哪些?...
  14. 不吸电子烟也请别吸电子咖啡!我们向雪加电子咖啡发起了挑战
  15. 域名解析-/etc/hosts
  16. 内部UML培训文件,欢迎大家批评指正
  17. 笔记:Stack overflow栈溢出
  18. Photoshop touch教程全攻略
  19. JQuery.slim.js
  20. PHP Encoder Ioncube 使用

热门文章

  1. centos6.5编译安装mysql_Centos6.5编译安装mysql 5.7.14详细教程
  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合...
  3. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_7_静态同步方法...
  4. charts 画折线图
  5. 20145212 罗天晨 Web安全基础实践
  6. 高聚合和低耦合的理解
  7. SRM 515 DIV1 550pt
  8. web项目继承ServletContainerInitializer进行访问HttpServlet(WebServlet)
  9. Mybatis 优化:
  10. 团队编程项目作业4-开发文档