kick
/Users/morten/Programmering/cpp/kick/src/kick/core/event.inl
00001 namespace kick{
00002 template <typename E>
00003 inline EventListener<E> Event<E>::createListener(std::function<void (E)> listener, int sortPriority){
00004     auto insertPos = listeners.begin();
00005     int v = 0;
00006     while (insertPos != listeners.end() && GET_LISTENER_SORTKEY(*insertPos) < sortPriority){
00007         insertPos++;
00008         v++;
00009     }
00010     listeners.emplace(insertPos, listener, eventListenerId, sortPriority);
00011     
00012     eventListenerId++;
00013     return EventListener<E>(this, eventListenerId-1);
00014 }
00015 
00016 template <typename E>
00017 inline void Event<E>::registerSyncValue(SyncValue<E>& syncValue){
00018     if (syncValue.listenerId > -1){
00019         removeListener(syncValue.listenerId);
00020     }
00021     std::function<void (E)> updateFunction = [&](E e){
00022         syncValue.value = e;
00023     };
00024     listeners.emplace_back(updateFunction, eventListenerId, 0);
00025     syncValue.listenerId = eventListenerId;
00026     syncValue.ae = this;
00027     eventListenerId++;
00028 }
00029 
00030 template <typename E>
00031 inline void Event<E>::notifyListeners(E e){
00032     for (auto & l : listeners){
00033         auto& func = GET_LISTENER_FN(l);
00034         func(e);
00035     }
00036 }
00037 
00038 template <typename E>
00039 inline bool Event<E>::removeListener(int id){
00040     auto iter = listeners.begin();
00041     while (iter != listeners.end()){
00042         if (GET_LISTENER_ID(*iter) == id){
00043             listeners.erase(iter);
00044             return true;
00045         }
00046         iter++;
00047     }
00048     return false;
00049 }
00050 }
 All Classes Functions Variables