114268Sodanrc@yahoo.com.br/* 214268Sodanrc@yahoo.com.br * Copyright (c) 2019 Inria 314268Sodanrc@yahoo.com.br * All rights reserved. 414268Sodanrc@yahoo.com.br * 514268Sodanrc@yahoo.com.br * Redistribution and use in source and binary forms, with or without 614268Sodanrc@yahoo.com.br * modification, are permitted provided that the following conditions are 714268Sodanrc@yahoo.com.br * met: redistributions of source code must retain the above copyright 814268Sodanrc@yahoo.com.br * notice, this list of conditions and the following disclaimer; 914268Sodanrc@yahoo.com.br * redistributions in binary form must reproduce the above copyright 1014268Sodanrc@yahoo.com.br * notice, this list of conditions and the following disclaimer in the 1114268Sodanrc@yahoo.com.br * documentation and/or other materials provided with the distribution; 1214268Sodanrc@yahoo.com.br * neither the name of the copyright holders nor the names of its 1314268Sodanrc@yahoo.com.br * contributors may be used to endorse or promote products derived from 1414268Sodanrc@yahoo.com.br * this software without specific prior written permission. 1514268Sodanrc@yahoo.com.br * 1614268Sodanrc@yahoo.com.br * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1714268Sodanrc@yahoo.com.br * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1814268Sodanrc@yahoo.com.br * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1914268Sodanrc@yahoo.com.br * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2014268Sodanrc@yahoo.com.br * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2114268Sodanrc@yahoo.com.br * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2214268Sodanrc@yahoo.com.br * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2314268Sodanrc@yahoo.com.br * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2414268Sodanrc@yahoo.com.br * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2514268Sodanrc@yahoo.com.br * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2614268Sodanrc@yahoo.com.br * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2714268Sodanrc@yahoo.com.br * 2814268Sodanrc@yahoo.com.br * Authors: Daniel Carvalho 2914268Sodanrc@yahoo.com.br */ 3014268Sodanrc@yahoo.com.br 3114268Sodanrc@yahoo.com.br#include "base/filters/perfect_bloom_filter.hh" 3214268Sodanrc@yahoo.com.br 3314268Sodanrc@yahoo.com.br#include "params/BloomFilterPerfect.hh" 3414268Sodanrc@yahoo.com.br 3514268Sodanrc@yahoo.com.brnamespace BloomFilter { 3614268Sodanrc@yahoo.com.br 3714268Sodanrc@yahoo.com.brPerfect::Perfect(const BloomFilterPerfectParams* p) 3814268Sodanrc@yahoo.com.br : Base(p) 3914268Sodanrc@yahoo.com.br{ 4014268Sodanrc@yahoo.com.br} 4114268Sodanrc@yahoo.com.br 4214268Sodanrc@yahoo.com.brPerfect::~Perfect() 4314268Sodanrc@yahoo.com.br{ 4414268Sodanrc@yahoo.com.br} 4514268Sodanrc@yahoo.com.br 4614268Sodanrc@yahoo.com.brvoid 4714268Sodanrc@yahoo.com.brPerfect::clear() 4814268Sodanrc@yahoo.com.br{ 4914268Sodanrc@yahoo.com.br entries.clear(); 5014268Sodanrc@yahoo.com.br} 5114268Sodanrc@yahoo.com.br 5214268Sodanrc@yahoo.com.brvoid 5314268Sodanrc@yahoo.com.brPerfect::merge(const Base* other) 5414268Sodanrc@yahoo.com.br{ 5514268Sodanrc@yahoo.com.br auto* cast_other = static_cast<const Perfect*>(other); 5614268Sodanrc@yahoo.com.br entries.insert(cast_other->entries.begin(), cast_other->entries.end()); 5714268Sodanrc@yahoo.com.br} 5814268Sodanrc@yahoo.com.br 5914268Sodanrc@yahoo.com.brvoid 6014268Sodanrc@yahoo.com.brPerfect::set(Addr addr) 6114268Sodanrc@yahoo.com.br{ 6214268Sodanrc@yahoo.com.br entries.insert(addr); 6314268Sodanrc@yahoo.com.br} 6414268Sodanrc@yahoo.com.br 6514268Sodanrc@yahoo.com.brvoid 6614268Sodanrc@yahoo.com.brPerfect::unset(Addr addr) 6714268Sodanrc@yahoo.com.br{ 6814268Sodanrc@yahoo.com.br entries.erase(addr); 6914268Sodanrc@yahoo.com.br} 7014268Sodanrc@yahoo.com.br 7114268Sodanrc@yahoo.com.brint 7214268Sodanrc@yahoo.com.brPerfect::getCount(Addr addr) const 7314268Sodanrc@yahoo.com.br{ 7414268Sodanrc@yahoo.com.br return entries.find(addr) != entries.end(); 7514268Sodanrc@yahoo.com.br} 7614268Sodanrc@yahoo.com.br 7714268Sodanrc@yahoo.com.brint 7814268Sodanrc@yahoo.com.brPerfect::getTotalCount() const 7914268Sodanrc@yahoo.com.br{ 8014268Sodanrc@yahoo.com.br return entries.size(); 8114268Sodanrc@yahoo.com.br} 8214268Sodanrc@yahoo.com.br 8314268Sodanrc@yahoo.com.br} // namespace BloomFilter 8414268Sodanrc@yahoo.com.br 8514268Sodanrc@yahoo.com.brBloomFilter::Perfect* 8614268Sodanrc@yahoo.com.brBloomFilterPerfectParams::create() 8714268Sodanrc@yahoo.com.br{ 8814268Sodanrc@yahoo.com.br return new BloomFilter::Perfect(this); 8914268Sodanrc@yahoo.com.br} 9014268Sodanrc@yahoo.com.br 91