mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
Applied dep and realm updates
This commit is contained in:
parent
12257a5bc2
commit
5260602e28
2020 changed files with 39571 additions and 173090 deletions
136
dep/acelite/ace/Future_Set.cpp
Normal file
136
dep/acelite/ace/Future_Set.cpp
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
// $Id: Future_Set.cpp 92900 2010-12-17 14:45:11Z mcorino $
|
||||
|
||||
#ifndef ACE_FUTURE_SET_CPP
|
||||
#define ACE_FUTURE_SET_CPP
|
||||
|
||||
#include "ace/Future_Set.h"
|
||||
|
||||
#if !defined (ACE_LACKS_PRAGMA_ONCE)
|
||||
#pragma once
|
||||
#endif /* ACE_LACKS_PRAGMA_ONCE */
|
||||
|
||||
#if defined (ACE_HAS_THREADS)
|
||||
|
||||
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
|
||||
|
||||
template <class T>
|
||||
ACE_Future_Set<T>::ACE_Future_Set (ACE_Message_Queue<ACE_SYNCH> *new_queue)
|
||||
: delete_queue_ (false)
|
||||
{
|
||||
if (new_queue)
|
||||
this->future_notification_queue_ = new_queue;
|
||||
else
|
||||
{
|
||||
ACE_NEW (this->future_notification_queue_,
|
||||
ACE_Message_Queue<ACE_SYNCH>);
|
||||
this->delete_queue_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
ACE_Future_Set<T>::~ACE_Future_Set (void)
|
||||
{
|
||||
// Detach ourselves from all remaining futures, if any, in our map.
|
||||
typename FUTURE_HASH_MAP::iterator iterator =
|
||||
this->future_map_.begin ();
|
||||
|
||||
typename FUTURE_HASH_MAP::iterator end =
|
||||
this->future_map_.end ();
|
||||
|
||||
for (;
|
||||
iterator != end;
|
||||
++iterator)
|
||||
{
|
||||
FUTURE_HOLDER *future_holder = (*iterator).int_id_;
|
||||
future_holder->item_.detach (this);
|
||||
delete future_holder;
|
||||
}
|
||||
|
||||
if (this->delete_queue_)
|
||||
delete this->future_notification_queue_;
|
||||
}
|
||||
|
||||
template <class T> int
|
||||
ACE_Future_Set<T>::is_empty () const
|
||||
{
|
||||
return (((ACE_Future_Set<T>*)this)->future_map_.current_size () == 0 );
|
||||
}
|
||||
|
||||
template <class T> int
|
||||
ACE_Future_Set<T>::insert (ACE_Future<T> &future)
|
||||
{
|
||||
FUTURE_HOLDER *future_holder;
|
||||
ACE_NEW_RETURN (future_holder,
|
||||
FUTURE_HOLDER (future),
|
||||
-1);
|
||||
|
||||
FUTURE_REP *future_rep = future.get_rep ();
|
||||
int result = this->future_map_.bind (future_rep,
|
||||
future_holder);
|
||||
|
||||
// If a new map entry was created, then attach to the future,
|
||||
// otherwise we were already attached to the future or some error
|
||||
// occurred so just delete the future holder.
|
||||
if (result == 0)
|
||||
// Attach ourself to the ACE_Futures list of observer
|
||||
future.attach (this);
|
||||
else
|
||||
delete future_holder;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class T> void
|
||||
ACE_Future_Set<T>::update (const ACE_Future<T> &future)
|
||||
{
|
||||
ACE_Message_Block *mb = 0;
|
||||
FUTURE &local_future = const_cast<ACE_Future<T> &> (future);
|
||||
|
||||
ACE_NEW (mb,
|
||||
ACE_Message_Block ((char *) local_future.get_rep (), 0));
|
||||
|
||||
// Enqueue in priority order.
|
||||
this->future_notification_queue_->enqueue (mb, 0);
|
||||
}
|
||||
|
||||
template <class T> int
|
||||
ACE_Future_Set<T>::next_readable (ACE_Future<T> &future,
|
||||
ACE_Time_Value *tv)
|
||||
{
|
||||
if (this->is_empty ())
|
||||
return 0;
|
||||
|
||||
ACE_Message_Block *mb = 0;
|
||||
FUTURE_REP *future_rep = 0;
|
||||
|
||||
// Wait for a "readable future" signal from the message queue.
|
||||
if (this->future_notification_queue_->dequeue_head (mb,
|
||||
tv) != -1)
|
||||
{
|
||||
// Extract future rep from the message block.
|
||||
future_rep = reinterpret_cast<FUTURE_REP *> (mb->base ());
|
||||
|
||||
// Delete the message block.
|
||||
mb->release ();
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
|
||||
// Remove the hash map entry with the specified future rep from our map.
|
||||
FUTURE_HOLDER *future_holder = 0;
|
||||
if (this->future_map_.find (future_rep,
|
||||
future_holder) != -1)
|
||||
{
|
||||
future = future_holder->item_;
|
||||
this->future_map_.unbind (future_rep);
|
||||
delete future_holder;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ACE_END_VERSIONED_NAMESPACE_DECL
|
||||
|
||||
#endif /* ACE_HAS_THREADS */
|
||||
#endif /* ACE_FUTURE_SET_CPP */
|
||||
Loading…
Add table
Add a link
Reference in a new issue