コード例 #1
0
ファイル: pool.hpp プロジェクト: h4ck3rm1k3/MapNickAutotools
         HolderType borrowObject()
         {	
#ifdef MAPNIK_THREADSAFE    
            mutex::scoped_lock lock(mutex_);
#endif
            typename ContType::iterator itr=unusedPool_.begin();
            if (itr!=unusedPool_.end())
            { 
#ifdef MAPNIK_DEBUG
               std::clog<<"borrow "<<(*itr).get()<<"\n";
#endif
               usedPool_.push_back(*itr);
               itr=unusedPool_.erase(itr);
               return usedPool_[usedPool_.size()-1];
            }
            else if (unusedPool_.size() < maxSize_)
            {
               HolderType conn(creator_());
               if (conn->isOK())
               {
                  usedPool_.push_back(conn);
#ifdef MAPNIK_DEBUG
                  std::clog << "create << " << conn.get() << "\n";
#endif
                  return conn;
               }
            }
            return HolderType();
         } 
コード例 #2
0
ファイル: pool.hpp プロジェクト: Airphrame/mapnik
    HolderType borrowObject()
    {
#ifdef MAPNIK_THREADSAFE
        mapnik::scoped_lock lock(mutex_);
#endif

        typename ContType::iterator itr=pool_.begin();
        while ( itr!=pool_.end())
        {
            if (!itr->unique())
            {
                ++itr;
            }
            else if ((*itr)->isOK())
            {
                return *itr;
            }
            else
            {
                itr=pool_.erase(itr);
            }
        }
        // all connection have been taken, check if we allowed to grow pool
        if (pool_.size() < maxSize_)
        {
            HolderType conn(creator_());
            if (conn->isOK())
            {
                pool_.push_back(conn);
                return conn;
            }
        }
        return HolderType();
    }
コード例 #3
0
ファイル: pool.hpp プロジェクト: BenMoores/mapnik-trunk
 Pool(const Creator<T>& creator,unsigned initialSize=1, unsigned maxSize=10)
     :creator_(creator),
      initialSize_(initialSize),
      maxSize_(maxSize)
 {
     for (unsigned i=0; i < initialSize_; ++i) 
     {
         HolderType conn(creator_());
         if (conn->isOK())
             unusedPool_.push_back(conn);
     }
 }
コード例 #4
0
ファイル: pool.hpp プロジェクト: BenMoores/mapnik-trunk
    void returnObject(HolderType obj)
    {
#ifdef MAPNIK_THREADSAFE
        mutex::scoped_lock lock(mutex_);
#endif
        typename ContType::iterator itr=usedPool_.begin();
        while (itr != usedPool_.end())
        {
            if (obj.get()==(*itr).get()) 
            {
#ifdef MAPNIK_DEBUG
                std::clog<<"return "<<(*itr).get()<<"\n";
#endif
                unusedPool_.push_back(*itr);
                usedPool_.erase(itr);
                return;
            }
            ++itr;
        }
    }
コード例 #5
0
ファイル: pool.hpp プロジェクト: Airphrame/mapnik
    void set_initial_size(unsigned size)
    {
#ifdef MAPNIK_THREADSAFE
        mapnik::scoped_lock lock(mutex_);
#endif
        if (size > initialSize_)
        {
            initialSize_ = size;
            unsigned total_size = pool_.size();
            // ensure we don't have ghost obj's in the pool.
            if (total_size < initialSize_)
            {
                unsigned grow_size = initialSize_ - total_size ;

                for (unsigned i=0; i < grow_size; ++i)
                {
                    HolderType conn(creator_());
                    if (conn->isOK())
                        pool_.push_back(conn);
                }
            }
        }
    }