📄 hash.h
字号:
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' * * $Id$ *//*** General hash functions***/#ifndef __HASH_H__#define __HASH_H__#ifndef __SYS_H__#include "sys.h"#endif#include "erl_alloc.h"typedef unsigned long HashValue;typedef int (*HCMP_FUN)(void*, void*);typedef HashValue (*H_FUN)(void*);typedef void* (*HALLOC_FUN)(void*);typedef void (*HFREE_FUN)(void*);/*** This bucket must be placed in top of ** every object that uses hashing!!!** (Object*) == (Object*) &bucket*/typedef struct hash_bucket{ struct hash_bucket* next; /* Next bucket */ HashValue hvalue; /* Store hash value for get, rehash */} HashBucket;typedef struct hash_functions{ H_FUN hash; HCMP_FUN cmp; HALLOC_FUN alloc; HFREE_FUN free;} HashFunctions;typedef struct { char *name; int size; int used; int objs; int depth;} HashInfo;typedef struct hash{ HashFunctions fun; /* Function block */ int is_allocated; /* 0 iff hash structure is on stack or is static */ ErtsAlcType_t type; char* name; /* Table name (static string, for debugging) */ int size; /* Number of slots */ int size20percent; /* 20 percent of number of slots */ int size80percent; /* 80 percent of number of slots */ int ix; /* Size index in size table */ int used; /* Number of slots used */ HashBucket** bucket; /* Vector of bucket pointers (objects) */} Hash;Hash* hash_new(ErtsAlcType_t, char*, int, HashFunctions);Hash* hash_init(ErtsAlcType_t, Hash*, char*, int, HashFunctions);void hash_delete(Hash*);void hash_get_info(HashInfo*, Hash*);void hash_info(int, void *, Hash*);int hash_table_sz(Hash *);void* hash_get(Hash*, void*);void* hash_put(Hash*, void*);void* hash_erase(Hash*, void*);void* hash_remove(Hash*, void*);void hash_foreach(Hash*, void (*func)(void *, void *), void *);void erts_hash_merge(Hash* src, Hash* dst);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -