perfect_bloom_filter.hh revision 14268
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#ifndef __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__ 3214268Sodanrc@yahoo.com.br#define __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__ 3314268Sodanrc@yahoo.com.br 3414268Sodanrc@yahoo.com.br#include <unordered_set> 3514268Sodanrc@yahoo.com.br 3614268Sodanrc@yahoo.com.br#include "base/filters/base.hh" 3714268Sodanrc@yahoo.com.br 3814268Sodanrc@yahoo.com.brstruct BloomFilterPerfectParams; 3914268Sodanrc@yahoo.com.br 4014268Sodanrc@yahoo.com.brnamespace BloomFilter { 4114268Sodanrc@yahoo.com.br 4214268Sodanrc@yahoo.com.br/** 4314268Sodanrc@yahoo.com.br * A perfect bloom filter with no false positives nor false negatives. 4414268Sodanrc@yahoo.com.br */ 4514268Sodanrc@yahoo.com.brclass Perfect : public Base 4614268Sodanrc@yahoo.com.br{ 4714268Sodanrc@yahoo.com.br public: 4814268Sodanrc@yahoo.com.br Perfect(const BloomFilterPerfectParams* p); 4914268Sodanrc@yahoo.com.br ~Perfect(); 5014268Sodanrc@yahoo.com.br 5114268Sodanrc@yahoo.com.br void clear() override; 5214268Sodanrc@yahoo.com.br void set(Addr addr) override; 5314268Sodanrc@yahoo.com.br void unset(Addr addr) override; 5414268Sodanrc@yahoo.com.br 5514268Sodanrc@yahoo.com.br void merge(const Base* other) override; 5614268Sodanrc@yahoo.com.br int getCount(Addr addr) const override; 5714268Sodanrc@yahoo.com.br int getTotalCount() const override; 5814268Sodanrc@yahoo.com.br 5914268Sodanrc@yahoo.com.br private: 6014268Sodanrc@yahoo.com.br /** Container storing all set (seen) entries. */ 6114268Sodanrc@yahoo.com.br std::unordered_set<Addr> entries; 6214268Sodanrc@yahoo.com.br}; 6314268Sodanrc@yahoo.com.br 6414268Sodanrc@yahoo.com.br} // namespace BloomFilter 6514268Sodanrc@yahoo.com.br 6614268Sodanrc@yahoo.com.br#endif // __BASE_FILTERS_PERFECT_BLOOM_FILTER_HH__ 67