📄 index.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 and index functions** The idea behind this file was to capture the** way Atom,Export and Module table was implemented*/#ifndef __INDEX_H__#define __INDEX_H__#ifndef __HASH_H__#include "hash.h"#endiftypedef struct index_slot { HashBucket bucket; int index;} IndexSlot;typedef struct index_table{ Hash htable; /* Mapping obj -> index */ ErtsAlcType_t type; int size; /* Allocated size */ int limit; /* Max size */ int entries; /* Number of entries */ IndexSlot*** seg_table; /* Mapping index -> obj */} IndexTable;#define INDEX_PAGE_SHIFT 10#define INDEX_PAGE_SIZE (1 << INDEX_PAGE_SHIFT)#define INDEX_PAGE_MASK ((1 << INDEX_PAGE_SHIFT)-1)IndexTable *erts_index_init(ErtsAlcType_t,IndexTable*,char*,int,int,HashFunctions);void index_info(int, void *, IndexTable*);int index_table_sz(IndexTable *);int index_get(IndexTable*, void*);int index_put(IndexTable*, void*);void erts_index_merge(Hash*, IndexTable*);ERTS_GLB_INLINE IndexSlot* erts_index_lookup(IndexTable*, Uint);#if ERTS_GLB_INLINE_INCL_FUNC_DEFERTS_GLB_INLINE IndexSlot*erts_index_lookup(IndexTable* t, Uint ix){ return t->seg_table[ix>>INDEX_PAGE_SHIFT][ix&INDEX_PAGE_MASK];}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -