1/* 2 * Copyright 2001-2010, Haiku Inc. All rights reserved. 3 * This file may be used under the terms of the MIT License. 4 * 5 * Authors: 6 * Janito V. Ferreira Filho 7 */ 8#ifndef HASHREVOKEMANAGER_H 9#define HASHREVOKEMANAGER_H 10 11#include <util/OpenHashTable.h> 12 13#include "RevokeManager.h" 14 15 16struct RevokeElement { 17 RevokeElement* next; // Next in hash 18 uint32 block; 19 uint32 commitID; 20}; 21 22 23struct RevokeHash { 24 typedef uint32 KeyType; 25 typedef RevokeElement ValueType; 26 27 size_t HashKey(KeyType key) const 28 { 29 return key; 30 } 31 32 size_t Hash(ValueType* value) const 33 { 34 return HashKey(value->block); 35 } 36 37 bool Compare(KeyType key, ValueType* value) const 38 { 39 return value->block == key; 40 } 41 42 ValueType*& GetLink(ValueType* value) const 43 { 44 return value->next; 45 } 46 47}; 48 49typedef BOpenHashTable<RevokeHash> RevokeTable; 50 51 52class HashRevokeManager : public RevokeManager { 53public: 54 HashRevokeManager(bool has64bits); 55 virtual ~HashRevokeManager(); 56 57 status_t Init(); 58 59 virtual status_t Insert(uint32 block, uint32 commitID); 60 virtual status_t Remove(uint32 block); 61 virtual bool Lookup(uint32 block, uint32 commitID); 62 63 static int Compare(void* element, const void* key); 64 static uint32 Hash(void* element, const void* key, uint32 range); 65 66protected: 67 status_t _ForceInsert(uint32 block, uint32 commitID); 68 69private: 70 RevokeTable* fHash; 71 72 const int kInitialHashSize; 73}; 74 75#endif // HASHREVOKEMANAGER_H 76 77