zoukankan      html  css  js  c++  java
  • 今天才发现badkeeper关于Resource Manager的设计真是妙啊!

    写出来大概是这个样子,完全没有必要像我写的MemMan那样复杂!

    class Resource {
    public:
     Resource()
     {
      ResourceManager.attach( this );
     }

     virtual ~Resource()
     {
      ResourceManager.detach( this );
     }

     virtual void streamIn() = 0;
     virtual UINT streamOut() = 0;

    public:
     UINT last_use_time;
    };

    class ResourceManager {
    public:
     void attach( Resource *res );
     void detach( Resource *res );
     UINT get_current_time()
     {
      return ++current_time;
     }
     UINT pop()
     {
      Resource *old_res;

      for( UINT i = 0; i < reslist.size(); ++i )
      {
       Resource *res = reslist[i];

       // LRU...
       if( res->last_use_time < old_res->last_use_time )
        old_res = res;
      }

      return old_res->steamOut();
     }
    private:
     std::vector<Resource*> reslist;
     UINT     current_time;
    };

    class MemoryAllocator {
    public:
     void *alloc( UINT size )
     {
      if( memoryAvailable > 0 )
       return new char[size];
      else
      {
       UINT got_size = 0;
       do {
        got_size += ResourceManager.pop();
       } while( got_size < size );
       return new char[size];
      }
     }
    };

    class RayObject : public Resource {
    public:
     void streamIn()
     {
      if( compressed )
      {
       prilist = new RayTriangle [prisize];
       compressed = false;
      }

      last_use_time = ResourceManager.get_current_time();
     }

     UINT streamOut()
     {
      if( !compressed )
      {
       delete [] prilist;
       compressed = true;
      }

      return size;
     }

    private:
     RayTriangle  prilist;
     bool   compressed;
    };

  • 相关阅读:
    JSON对象和字符串之间的相互转换
    php小数取整的方法
    Vim之Nerd Tree杂草帮助
    PHP获取汉字拼音首字母
    chmod 变更文件或目录的权限
    grep
    tar
    Linux下socket编程 多线程 进程超时阻塞、卡死问题定位
    一些Lambda表达式的学习
    读高性能MySQL的笔记
  • 原文地址:https://www.cnblogs.com/len3d/p/951293.html
Copyright © 2011-2022 走看看