void runDeferred(DeferredHandler f) {
			__EVENTEMITTER_LOCK_GUARD(mutex);
			auto it = deferredQueue.cbegin();
			auto prevIt = deferredQueue.cbefore_begin();
			for(; it != deferredQueue.cend(); prevIt = it, ++it);
			deferredQueue.emplace_after(prevIt, std::move(f));
		}
Example #2
0
  inline int operator () (EArgs&&... args) // O(n)
  {
    if(slots.empty())
      return default_return_value;
    auto it = slots.cbegin(), end = slots.cend();
    auto prev = slots.cbefore_begin();
    while(it != end)
    {
      try
      {
        (it->second)(std::forward<EArgs>(args)...);
        prev = it;
        ++it;
      }
      catch(slot_remove)
      {
        it = slots.erase_after(prev);
      }
      catch(signal_return e)
      {
        return e.get();
      }
    }

    return default_return_value;
  }
Example #3
0
 inline bool disconnect(connection_type con) // O(n)
 {
     auto it = slots.cbegin(), end = slots.cend();
     auto prev = slots.cbefore_begin();
     while(it != end)
     {
         if(it == con)
         {
             slots.erase_after(prev);
             return true;
         }
         prev = it;
         ++it;
     }
     return false;
 }
Example #4
0
 inline connection_type connect(long priority, Slot&& f) // O(n)
 {
     auto prev = slots.cbefore_begin(),
             next = slots.cbegin(),
             end = slots.cend();
     while(next != end)
     {
         // <=
         if(priority < next->first)
         {
             return slots.insert_after(prev, std::make_pair(priority, std::move(f)));
         }
         prev = next;
         ++next;
     }
     return slots.insert_after(prev, std::make_pair(priority, std::move(f)));
 }