emitter wip
This commit is contained in:
parent
268b188c59
commit
cdb498aac3
|
@ -25,6 +25,12 @@ protected:
|
|||
static NAN_METHOD(destroy);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
void setDefaultMaxListeners(int count) { }
|
||||
int getDefaultMaxListeners() { return 10; }
|
||||
|
||||
|
||||
private:
|
||||
|
||||
void _destroy();
|
||||
|
|
|
@ -20,6 +20,7 @@ class EventEmitter : public Nan::ObjectWrap {
|
|||
typedef std::map<int, FN_TYPE> FNMAP_TYPE;
|
||||
typedef VEC_TYPE::iterator IT_TYPE;
|
||||
typedef MAP_TYPE::iterator MAP_IT_TYPE;
|
||||
typedef FNMAP_TYPE::iterator FNMAP_IT_TYPE;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -247,7 +248,7 @@ public:
|
|||
emitter->_raw[name].push_back(raw);
|
||||
}
|
||||
|
||||
int nextId = _freeId++;
|
||||
int nextId = emitter->_freeId++;
|
||||
emitter->_wrappedIds[nextId] = cb;
|
||||
emitter->_rawIds[nextId] = raw;
|
||||
|
||||
|
@ -300,7 +301,8 @@ public:
|
|||
|
||||
emitter->_listeners.clear();
|
||||
emitter->_raw.clear();
|
||||
emitter->_wrapped.clear();
|
||||
emitter->_wrappedIds.clear();
|
||||
emitter->_rawIds.clear();
|
||||
|
||||
return;
|
||||
|
||||
|
@ -315,12 +317,35 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
if (emitter->_rawIds.size()) {
|
||||
|
||||
std::vector<int> removes;
|
||||
|
||||
for (IT_TYPE it = list.begin(); it != list.end(); ++it) {
|
||||
|
||||
emitter->_wrapped.erase(*it);
|
||||
FN_TYPE fn = *it;
|
||||
|
||||
for (FNMAP_IT_TYPE itRaw = emitter->_rawIds.begin(); itRaw != emitter->_rawIds.end(); ++itRaw) {
|
||||
// emitter->_wrappedIds.erase(*it);
|
||||
if (fn == itRaw->second) {
|
||||
removes.push_back(itRaw->first);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (removes.size()) {
|
||||
for (std::vector<int>::const_iterator it = removes.begin(); it != removes.end(); ++it) {
|
||||
|
||||
emitter->_wrappedIds.erase(*it);
|
||||
emitter->_rawIds.erase(*it);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
emitter->_listeners[name].clear();
|
||||
emitter->_raw[name].clear();
|
||||
|
||||
|
@ -356,7 +381,7 @@ public:
|
|||
|
||||
VEC_TYPE &wrapList = emitter->_listeners[name];
|
||||
|
||||
if (emitter->_wrapped.count(persistentRaw) == 0) {
|
||||
if (emitter->_wrappedIds.size() == 0) {
|
||||
|
||||
for (IT_TYPE it = wrapList.begin(); it != wrapList.end(); ++it) {
|
||||
|
||||
|
@ -372,18 +397,29 @@ public:
|
|||
}
|
||||
|
||||
|
||||
const FN_TYPE &wrapped = emitter->_wrapped[persistentRaw];
|
||||
for (FNMAP_IT_TYPE itRaw = emitter->_rawIds.begin(); itRaw != emitter->_rawIds.end(); ++itRaw) {
|
||||
|
||||
if (persistentRaw == itRaw->second) {
|
||||
|
||||
FN_TYPE fn = emitter->_wrappedIds[itRaw->first];
|
||||
|
||||
for (IT_TYPE it = wrapList.begin(); it != wrapList.end(); ++it) {
|
||||
|
||||
if (*it == wrapped) {
|
||||
if (*it == fn) {
|
||||
wrapList.erase(it);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
emitter->_wrapped.erase(persistentRaw);
|
||||
emitter->_wrappedIds.erase(itRaw->first);
|
||||
emitter->_rawIds.erase(itRaw->first);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue