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