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