void ChanAccess::SetMask(const Anope::string &m, ChannelInfo *c) { if (*nc != NULL) nc->RemoveChannelReference(this->ci); else if (!this->mask.empty()) { ChannelInfo *targc = ChannelInfo::Find(this->mask); if (targc) targc->RemoveChannelReference(this->ci->name); } ci = c; mask.clear(); nc = NULL; const NickAlias *na = NickAlias::Find(m); if (na != NULL) { nc = na->nc; nc->AddChannelReference(ci); } else { mask = m; ChannelInfo *targci = ChannelInfo::Find(mask); if (targci != NULL) targci->AddChannelReference(ci->name); } }
ChanAccess::~ChanAccess() { if (this->ci) { std::vector<ChanAccess *>::iterator it = std::find(this->ci->access->begin(), this->ci->access->end(), this); if (it != this->ci->access->end()) this->ci->access->erase(it); if (*nc != NULL) nc->RemoveChannelReference(this->ci); else { ChannelInfo *c = ChannelInfo::Find(this->mask); if (c) c->RemoveChannelReference(this->ci->name); } } }