perfect_bloom_filter.cc revision 14268:3012cd98980d
111290Sgabor.dozsa@arm.com/*
211290Sgabor.dozsa@arm.com * Copyright (c) 2019 Inria
311290Sgabor.dozsa@arm.com * All rights reserved.
411290Sgabor.dozsa@arm.com *
511290Sgabor.dozsa@arm.com * Redistribution and use in source and binary forms, with or without
611290Sgabor.dozsa@arm.com * modification, are permitted provided that the following conditions are
711290Sgabor.dozsa@arm.com * met: redistributions of source code must retain the above copyright
811290Sgabor.dozsa@arm.com * notice, this list of conditions and the following disclaimer;
911290Sgabor.dozsa@arm.com * redistributions in binary form must reproduce the above copyright
1011290Sgabor.dozsa@arm.com * notice, this list of conditions and the following disclaimer in the
1111290Sgabor.dozsa@arm.com * documentation and/or other materials provided with the distribution;
1211290Sgabor.dozsa@arm.com * neither the name of the copyright holders nor the names of its
1311290Sgabor.dozsa@arm.com * contributors may be used to endorse or promote products derived from
1411290Sgabor.dozsa@arm.com * this software without specific prior written permission.
1511290Sgabor.dozsa@arm.com *
1611290Sgabor.dozsa@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711290Sgabor.dozsa@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811290Sgabor.dozsa@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911290Sgabor.dozsa@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011290Sgabor.dozsa@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111290Sgabor.dozsa@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211290Sgabor.dozsa@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311290Sgabor.dozsa@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411290Sgabor.dozsa@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511290Sgabor.dozsa@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611290Sgabor.dozsa@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2711290Sgabor.dozsa@arm.com *
2811290Sgabor.dozsa@arm.com * Authors: Daniel Carvalho
2911290Sgabor.dozsa@arm.com */
3011290Sgabor.dozsa@arm.com
3111290Sgabor.dozsa@arm.com#include "base/filters/perfect_bloom_filter.hh"
3211290Sgabor.dozsa@arm.com
3311290Sgabor.dozsa@arm.com#include "params/BloomFilterPerfect.hh"
3411290Sgabor.dozsa@arm.com
3511290Sgabor.dozsa@arm.comnamespace BloomFilter {
3611290Sgabor.dozsa@arm.com
3711290Sgabor.dozsa@arm.comPerfect::Perfect(const BloomFilterPerfectParams* p)
3811290Sgabor.dozsa@arm.com    : Base(p)
3911290Sgabor.dozsa@arm.com{
4011290Sgabor.dozsa@arm.com}
4111290Sgabor.dozsa@arm.com
4211290Sgabor.dozsa@arm.comPerfect::~Perfect()
4311290Sgabor.dozsa@arm.com{
4411290Sgabor.dozsa@arm.com}
4511290Sgabor.dozsa@arm.com
4611290Sgabor.dozsa@arm.comvoid
4711290Sgabor.dozsa@arm.comPerfect::clear()
4811290Sgabor.dozsa@arm.com{
4911290Sgabor.dozsa@arm.com    entries.clear();
5011290Sgabor.dozsa@arm.com}
5111290Sgabor.dozsa@arm.com
5211290Sgabor.dozsa@arm.comvoid
5311290Sgabor.dozsa@arm.comPerfect::merge(const Base* other)
5411290Sgabor.dozsa@arm.com{
5511290Sgabor.dozsa@arm.com    auto* cast_other = static_cast<const Perfect*>(other);
5611290Sgabor.dozsa@arm.com    entries.insert(cast_other->entries.begin(), cast_other->entries.end());
5711290Sgabor.dozsa@arm.com}
5811290Sgabor.dozsa@arm.com
5911290Sgabor.dozsa@arm.comvoid
6011290Sgabor.dozsa@arm.comPerfect::set(Addr addr)
6111290Sgabor.dozsa@arm.com{
6211290Sgabor.dozsa@arm.com    entries.insert(addr);
6311290Sgabor.dozsa@arm.com}
6411290Sgabor.dozsa@arm.com
6511290Sgabor.dozsa@arm.comvoid
6611290Sgabor.dozsa@arm.comPerfect::unset(Addr addr)
6711290Sgabor.dozsa@arm.com{
6811290Sgabor.dozsa@arm.com    entries.erase(addr);
6911290Sgabor.dozsa@arm.com}
7011290Sgabor.dozsa@arm.com
71int
72Perfect::getCount(Addr addr) const
73{
74    return entries.find(addr) != entries.end();
75}
76
77int
78Perfect::getTotalCount() const
79{
80    return entries.size();
81}
82
83} // namespace BloomFilter
84
85BloomFilter::Perfect*
86BloomFilterPerfectParams::create()
87{
88    return new BloomFilter::Perfect(this);
89}
90
91