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;
    };

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/len3d/p/951293.html
Copyright © 2011-2022 走看看