//-------------------------------------------------------------------------------------
void MemoryStream::destroyObjPool()
{
	DEBUG_MSG(boost::format("MemoryStream::destroyObjPool(): size %1%.\n") % 
		_g_objPool.size());

	_g_objPool.destroy();
}
Exemple #2
0
//-------------------------------------------------------------------------------------
void Bundle::destroyObjPool()
{
	DEBUG_MSG(fmt::format("Bundle::destroyObjPool(): size {}.\n", 
		_g_objPool.size()));

	_g_objPool.destroy();
}
Exemple #3
0
      void
      add (uint32_t id, char side, uint32_t price, uint32_t size)
      {
        if (orders.end () != orders.find (id, OrderIdHasher (), OrderIdEqual ()))
          {
            throw std::runtime_error ("duplicate add");
          }

        AggregateOrders::iterator found = aggregateOrders.find (std::make_pair (side, price), AggregateOrderLess ());

        if (found == aggregateOrders.end ())
          {
            AggregateOrder *a = aggregateOrderPool.construct (boost::in_place (side, price));
            found = aggregateOrders.insert (*a).first;
          }

        assert(aggregateOrders.end () != found);

        Order *order = orderPool.construct (boost::in_place (id, boost::ref (*found)));
        assert(order);

        bool orderInserted __attribute__((unused)) = orders.insert (*order).second;
        assert(orderInserted);

        order->size = size;
        order->aggregateOrder.size += size;

        assert(order->size);
        assert(order->aggregateOrder.size);
      }
//-------------------------------------------------------------------------------------
void UDPPacketReceiver::destroyObjPool()
{
	DEBUG_MSG(boost::format("UDPPacketReceiver::destroyObjPool(): size %1%.\n") % 
		_g_objPool.size());

	_g_objPool.destroy();
}
//-------------------------------------------------------------------------------------
void UDPPacketReceiver::destroyObjPool()
{
	DEBUG_MSG(fmt::format("UDPPacketReceiver::destroyObjPool(): size {}.\n", 
		_g_objPool.size()));

	_g_objPool.destroy();
}
Exemple #6
0
//-------------------------------------------------------------------------------------
void TCPPacket::destroyObjPool()
{
	DEBUG_MSG(fmt::format("TCPPacket::destroyObjPool(): size {}.\n", 
		_g_objPool.size()));

	_g_objPool.destroy();
}
Exemple #7
0
//-------------------------------------------------------------------------------------
void MemoryStream::destroyObjPool()
{
	DEBUG_MSG(fmt::format("MemoryStream::destroyObjPool(): size {}.\n", 
		_g_objPool.size()));

	_g_objPool.destroy();
}
int main(int argc, char **args)
{
	ObjectPool<int> pool;
	
	int &a = pool.acquireObject();
	pool.releaseObject(a);
	
	return 0;
}
void test1()
{
    ObjectPool<SmallObject> op;
    SmallObject* s = op.get();
    op.put(s);
    s = op.get();
    s = op.get();
    s = op.get();
    s = op.get();

    printf("++++++++++++++++\n");
}
Exemple #10
0
TEST_F(ObjectPoolTest, MovableObjectPool) {
  ObjectPool<int> to;

  // Verify a move works correctly when an object has been checked out:
  {
    ObjectPool<int> from;
    auto original = from.Wait();
    to = std::move(from);
  }

  // Now verify that the pooled object returned home to the right place:
  ASSERT_EQ(1UL, to.GetCached()) << "Object pool move operation did not correctly relay checked out types";
}
void LexicalReorderingTableTree::auxCacheForSrcPhrase(const Phrase& f)
{
  if(m_FactorsE.empty()) {
    //f is all of key...
    Candidates cands;
    m_Table->GetCandidates(MakeTableKey(f,Phrase(ARRAY_SIZE_INCR)),&cands);
    m_Cache[MakeCacheKey(f,Phrase(ARRAY_SIZE_INCR))] = cands;
  } else {
    ObjectPool<PPimp>     pool;
    PPimp* pPos  = m_Table->GetRoot();
    //1) goto subtree for f
    for(size_t i = 0; i < f.GetSize() && 0 != pPos && pPos->isValid(); ++i) {
      /* old code
      pPos = m_Table.Extend(pPos, auxClearString(f.GetWord(i).ToString(m_FactorsF)), SourceVocId);
      */
      pPos = m_Table->Extend(pPos, f.GetWord(i).GetString(m_FactorsF, false), SourceVocId);
    }
    if(0 != pPos && pPos->isValid()) {
      pPos = m_Table->Extend(pPos, PrefixTreeMap::MagicWord);
    }
    if(0 == pPos || !pPos->isValid()) {
      return;
    }
    //2) explore whole subtree depth first & cache
    std::string cache_key = auxClearString(f.GetStringRep(m_FactorsF)) + "|||";

    std::vector<State> stack;
    stack.push_back(State(pool.get(PPimp(pPos->ptr()->getPtr(pPos->idx),0,0)),""));
    Candidates cands;
    while(!stack.empty()) {
      if(stack.back().pos->isValid()) {
        LabelId w = stack.back().pos->ptr()->getKey(stack.back().pos->idx);
        std::string next_path = stack.back().path + " " + m_Table->ConvertWord(w,TargetVocId);
        //cache this
        m_Table->GetCandidates(*stack.back().pos,&cands);
        if(!cands.empty()) {
          m_Cache[cache_key + auxClearString(next_path)] = cands;
        }
        cands.clear();
        PPimp* next_pos = pool.get(PPimp(stack.back().pos->ptr()->getPtr(stack.back().pos->idx),0,0));
        ++stack.back().pos->idx;
        stack.push_back(State(next_pos,next_path));
      } else {
        stack.pop_back();
      }
    }
  }
}
Exemple #12
0
void Channel::destroyObjPool()
{
	// 	DEBUG_MSG(fmt::format("Channel::destroyObjPool(): size {}.\n", 
	// 		s_ObjPool.size()));

	s_ObjPool.destroy();
}
namespace KBEngine
{
static ObjectPool<MemoryStream> _g_objPool("MemoryStream");
//-------------------------------------------------------------------------------------
ObjectPool<MemoryStream>& MemoryStream::ObjPool()
{
	return _g_objPool;
}

//-------------------------------------------------------------------------------------
void MemoryStream::destroyObjPool()
{
	DEBUG_MSG(boost::format("MemoryStream::destroyObjPool(): size %1%.\n") % 
		_g_objPool.size());

	_g_objPool.destroy();
}

//-------------------------------------------------------------------------------------
MemoryStream::SmartPoolObjectPtr MemoryStream::createSmartPoolObj()
{
	return SmartPoolObjectPtr(new SmartPoolObject<MemoryStream>(ObjPool().createObject(), _g_objPool));
}

//-------------------------------------------------------------------------------------
} 
Exemple #14
0
void MemoryStream::destroyObjPool()
{
// 	DEBUG_MSG(fmt::format("MemoryStream::destroyObjPool(): size {}.\n", 
// 		s_ObjPool.size()));

	s_ObjPool.destroy();
}
Exemple #15
0
void Profiler::Entry::Free()
{
	for(vector<Entry*>::iterator it = e.begin(), end = e.end(); it != end; ++it)
		(*it)->Free();
	e.clear();
	entry_pool.Free(this);
}
Exemple #16
0
namespace KBEngine
{
static ObjectPool<MemoryStream> _g_objPool("MemoryStream");
//-------------------------------------------------------------------------------------
ObjectPool<MemoryStream>& MemoryStream::ObjPool()
{
	return _g_objPool;
}

//-------------------------------------------------------------------------------------
void MemoryStream::destroyObjPool()
{
	DEBUG_MSG(fmt::format("MemoryStream::destroyObjPool(): size {}.\n", 
		_g_objPool.size()));

	_g_objPool.destroy();
}

//-------------------------------------------------------------------------------------
MemoryStream::SmartPoolObjectPtr MemoryStream::createSmartPoolObj()
{
	return SmartPoolObjectPtr(new SmartPoolObject<MemoryStream>(ObjPool().createObject(), _g_objPool));
}

//-------------------------------------------------------------------------------------
size_t MemoryStream::getPoolObjectBytes()
{
	size_t bytes = sizeof(rpos_) + sizeof(wpos_) + data_.size();
	return bytes;
}

//-------------------------------------------------------------------------------------
} 
Exemple #17
0
int main() {
  ObjectPool<int32_t, 128, false> pool;

  int32_t* a = pool.fetch();
  int32_t* b = pool.fetch();
  int32_t* c = pool.fetch();
  int32_t* d = pool.fetch();

  pool.release(b);
  int32_t* e = pool.fetch();

  fprintf(stdout, "fetch() %p\n", a);
  fprintf(stdout, "fetch() %p\n", b);
  fprintf(stdout, "fetch() %p\n", c);
  fprintf(stdout, "fetch() %p\n", d);
  fprintf(stdout, "fetch() %p\n", e);
  return 0;
}
Exemple #18
0
void on_close_callback( uv_handle_t *s ) {
    ReplayClient *cl = (ReplayClient*)s->data;
    print("on_close_callback clid:%d",cl->id);
    g_clients.del(cl->id);
    delete cl;
    if( g_serve_single_client ) {
        print("g_serve_single_client is true, quitting.");
        exit(0);
    }
}
void ObjectPoolTest::testExclusivity()
{
	ObjectPool<Serial> myPool;
	const size_t numberOfObjectsToRetrieve = 10;
	std::vector<ObjectPool<Serial>::Object> retrievedSerials;
	std::set<size_t> seenSerialNumbers;

	for (size_t i = 0; i < numberOfObjectsToRetrieve; i++) {
		auto nextSerial = myPool.acquireObject();

		// Add the retrieved Serial to the vector to keep it 'alive',
		// and add the serial number to the set.
		retrievedSerials.push_back(nextSerial);
		seenSerialNumbers.insert(nextSerial->getSerialNumber());
	}

	// Assert that all retrieved serial numbers are different.
	Assert::AreEqual(numberOfObjectsToRetrieve, seenSerialNumbers.size());
}
Exemple #20
0
void Profiler::Push(cstring name)
{
	assert(name && started);
	Entry* new_e = entry_pool.Get();
	new_e->name = name;
	timer.Tick();
	timer.GetTime(new_e->tick);
	stac.back()->e.push_back(new_e);
	stac.push_back(new_e);
}
Exemple #21
0
      void
      reduce (uint32_t id, uint32_t size)
      {
        Orders::iterator found = orders.find (id, OrderIdHasher (), OrderIdEqual ());

        if (found == orders.end ())
          {
            throw std::runtime_error ("order not found");
          }

        assert(&*found);
        assert(&found->aggregateOrder);

        Order &o = *found;
        AggregateOrder &a = found->aggregateOrder;

        if (size > o.size)
          {
            throw std::runtime_error ("attempt to over reduce");
          }
        if (size == o.size)
          {
            a.size -= o.size;

            orders.erase (found);
            orderPool.destroy (&o);

            if (0 == a.size)
              {
                aggregateOrders.erase (AggregateOrders::s_iterator_to (a));
                aggregateOrderPool.destroy (&a);
              }
          }
        else
          {
            o.size -= size;
            a.size -= size;
            assert(o.size);
            assert(a.size);
          }
      }
int main()
{
    ObjectPool* pool = ObjectPool::getInstance();
    Resource* one;
    Resource* two;

    one = pool->getResource();
    one->setValue(10);
    std::cout << "one = " << one->getValue() << " [" << one << "]" << std::endl;

    two = pool->getResource();
    two->setValue(20);
    std::cout << "two = " << two->getValue() << " [" << two << "]" << std::endl;

    pool->returnResource(one);
    pool->returnResource(two);

    one = pool->getResource();
    std::cout << "one = " << one->getValue() << " [" << one << "]" << std::endl;

    two = pool->getResource();
    std::cout << "two = " << two->getValue() << " [" << two << "]" << std::endl;

    return 0;
}
Exemple #23
0
TEST_F(ObjectPoolTest, EmptyPoolIssuance) {
  ObjectPool<int> pool;

  // Create the thread which will hold the shared pointer for awhile:
  AutoRequired<HoldsSharedPtrThenQuits> thread;
  pool(thread->m_ptr);
  std::weak_ptr<int> ptrWeak = thread->m_ptr;

  ASSERT_FALSE(ptrWeak.expired()) << "Object pool failed to issue a shared pointer as expected";

  // Verify properties now that we've zeroized the limit:
  pool.SetOutstandingLimit(0);
  EXPECT_ANY_THROW(pool.SetOutstandingLimit(1)) << "An attempt to alter a zeroized outstanding limit did not throw an exception as expected";
  EXPECT_ANY_THROW(pool.Wait()) << "An attempt to obtain an element on an empty pool did not throw an exception as expected";

  // Now see if we can delay for the thread to back out:
  m_create->Initiate();
  pool.Rundown();

  // Verify that it got released as expected:
  ASSERT_TRUE(ptrWeak.expired()) << "Not all shared pointers issued by an object pool expired in a timely fashion";
}
Exemple #24
0
int main(){
	queue<int*> q;
	ObjectPool<int> op;
	int *tmp;
	for(int i = 0; i < 10; ++i){
		int r = rand()%10000;
		for(int j = 0; j < r; ++j){
			tmp = op.NewObject();
			q.push(tmp);
		}
		op.ShowCount();	
		while(q.size() > 0){
			tmp = q.front();
			q.pop();
			op.DeleteObject(tmp);
		}
		op.ShowCount();
		printf("\n");
	}
	
	cout << "ok" << endl;
}
void ObjectPoolTest::testRelease()
{
	ObjectPool<Serial> myPool;
	const size_t numberOfObjectsToRetrieve = 10;

	std::vector<ObjectPool<Serial>::Object> retrievedSerials;
	for (size_t i = 0; i < numberOfObjectsToRetrieve; i++) {
		// Add the retrieved Serial to the vector to keep it 'alive'.
		retrievedSerials.push_back(myPool.acquireObject());
	}
	size_t lastSerialNumber = retrievedSerials.back()->getSerialNumber();
	// Release all objects back to the pool.
	retrievedSerials.clear();

	// The above loop has created ten Serial objects, with serial
	// numbers 0-9, and released all ten Serial objects back to the pool.

	// The next loop first again retrieves ten Serial objects. The serial
	// numbers of these should all be <= lastSerialNumber.
	// The Serial object acquired after that should have a new serial number.

	bool wronglyNewObjectCreated = false;
	for (size_t i = 0; i < numberOfObjectsToRetrieve; i++) {
		auto nextSerial = myPool.acquireObject();
		if (nextSerial->getSerialNumber() > lastSerialNumber) {
			wronglyNewObjectCreated = true;
			break;
		}
		retrievedSerials.push_back(nextSerial);
	}

	// Acquire one more Serial object, which should have a serial
	// number > lastSerialNumber.
	auto anotherSerial = myPool.acquireObject();
	bool newObjectCreated = (anotherSerial->getSerialNumber() > lastSerialNumber);

	Assert::IsFalse(wronglyNewObjectCreated);
	Assert::IsTrue(newObjectCreated);
}
Exemple #26
0
void test2()
{
    TimeFilm tm("object pool: ");
    ObjectPool<SmallObject> op;
    SmallObject* s = 0;

    //int m = 1000000;
    int m = 100;
    Random rnd;
    const char* hello = "hello";
    while (--m)
    {
        //s = op.get();
        s = op.get(m,hello);
#if 1
        if (s && rnd(2))
        {
            printf("put\n");
            op.put(s);
        }
#endif
    }
}
Exemple #27
0
namespace Mercury
{
//-------------------------------------------------------------------------------------
static ObjectPool<UDPPacket> _g_objPool;
ObjectPool<UDPPacket>& UDPPacket::ObjPool()
{
	return _g_objPool;
}

//-------------------------------------------------------------------------------------
void UDPPacket::destroyObjPool()
{
	DEBUG_MSG(boost::format("UDPPacket::destroyObjPool(): size %1%.\n") % 
		_g_objPool.size());

	_g_objPool.destroy();
}

//-------------------------------------------------------------------------------------
UDPPacket::SmartPoolObjectPtr UDPPacket::createSmartPoolObj()
{
	return SmartPoolObjectPtr(new SmartPoolObject<UDPPacket>(ObjPool().createObject(), _g_objPool));
}

//-------------------------------------------------------------------------------------
UDPPacket::UDPPacket(MessageID msgID, size_t res):
Packet(msgID, false, res)
{
	data_resize(PACKET_MAX_SIZE_UDP);
	wpos(0);
}

//-------------------------------------------------------------------------------------
UDPPacket::~UDPPacket(void)
{
}

//-------------------------------------------------------------------------------------
int UDPPacket::recvFromEndPoint(EndPoint & ep, Address* pAddr)
{
	int len = ep.recvfrom(data(), PACKET_MAX_SIZE_UDP,
		(u_int16_t*)&pAddr->port, (u_int32_t*)&pAddr->ip);

	KBE_ASSERT(rpos() == 0);
	wpos(len);
	return len;
}

//-------------------------------------------------------------------------------------
}
Exemple #28
0
void on_accept_callback( uv_stream_t *listener, int status ) {
    uv_tcp_t *newsock = (uv_tcp_t*) MALLOC( sizeof(uv_tcp_t));
    uv_tcp_init( uv_default_loop(), newsock );
    if( uv_accept( listener, (uv_stream_t*) newsock ) == 0 ) {
        ReplayClient *cl = new ReplayClient( newsock );
        newsock->data = cl;
        int r = uv_read_start( (uv_stream_t*) newsock, moyai_libuv_alloc_buffer, on_read_callback );
        if(r) {
            print("uv_read_start: fail. ret:%d", r );
        }
        g_clients.set(cl->id,cl);
        print("on_accept_callback client id:%d",cl->id);
    }
}
Exemple #29
0
void Profiler::Start()
{
	timer.Start();
	e = entry_pool.Get();
	e->name = "Start";
	timer.GetTime(e->tick);
	stac.push_back(e);
	started = true;
	if(!enabled)
	{
		frames = 0;
		enabled = true;
	}
}
Exemple #30
0
    namespace kd
    {
        ObjectPool Objects;

        /// KernelObject ////////////////////////////////////////////////////////////

        char const * Object::m_object_type = "KernelObject";

        Object::Object(char const * name)
        {
            ::memset(m_name, 0, 32);
            if (name) ::strncpy(m_name, name, 31);
            Objects.Attach(this);
        }

        Object::~Object()
        {
            Objects.Detach(this);
        }

        void Object::GetQuickInfos(char * data, size_t size)
        {
            ::strncpy(data, "-", size-1);
        }

        void ObjectPool::Dump()
        {
            unsigned * occupied_entry = occupied;

            for (int i = 0, j = 0; i < max_count/32; ++i, ++occupied_entry)
            {
                unsigned mask = *occupied_entry;
                for (unsigned k = 1; k; ++j, k <<= 1)
                {
                    if (mask & k)
                    {
                        char buffer[1024];

                        if (pool[j])
                        {
                            pool[j]->GetQuickInfos(buffer, 1024);

                            forcef(kd, "KernelObject %i: %s \"%s\": %s", j + handle_offset, pool[j]->GetType(), pool[j]->GetName(), buffer);
                        }
                    }
                }
            }
        }
    }