亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hash.texi

?? gdb-6.0 linux 下的調試工具
?? TEXI
字號:
@section Hash Tables@cindex Hash tablesBFD provides a simple set of hash table functions.  Routinesare provided to initialize a hash table, to free a hash table,to look up a string in a hash table and optionally create anentry for it, and to traverse a hash table.  There iscurrently no routine to delete an string from a hash table.The basic hash table does not permit any data to be storedwith a string.  However, a hash table is designed to present abase class from which other types of hash tables may bederived.  These derived types may store additional informationwith the string.  Hash tables were implemented in this way,rather than simply providing a data pointer in a hash tableentry, because they were designed for use by the linker backends.  The linker may create thousands of hash table entries,and the overhead of allocating private data and storing andfollowing pointers becomes noticeable.The basic hash table code is in @code{hash.c}.@menu* Creating and Freeing a Hash Table::* Looking Up or Entering a String::* Traversing a Hash Table::* Deriving a New Hash Table Type::@end menu@node Creating and Freeing a Hash Table, Looking Up or Entering a String, Hash Tables, Hash Tables@subsection Creating and freeing a hash table@findex bfd_hash_table_init@findex bfd_hash_table_init_nTo create a hash table, create an instance of a @code{structbfd_hash_table} (defined in @code{bfd.h}) and call@code{bfd_hash_table_init} (if you know approximately how manyentries you will need, the function @code{bfd_hash_table_init_n},which takes a @var{size} argument, may be used).@code{bfd_hash_table_init} returns @code{FALSE} if some sort oferror occurs.@findex bfd_hash_newfuncThe function @code{bfd_hash_table_init} take as an argument afunction to use to create new entries.  For a basic hashtable, use the function @code{bfd_hash_newfunc}.  @xref{Derivinga New Hash Table Type}, for why you would want to use adifferent value for this argument.@findex bfd_hash_allocate@code{bfd_hash_table_init} will create an objalloc which will beused to allocate new entries.  You may allocate memory on thisobjalloc using @code{bfd_hash_allocate}.@findex bfd_hash_table_freeUse @code{bfd_hash_table_free} to free up all the memory that hasbeen allocated for a hash table.  This will not free up the@code{struct bfd_hash_table} itself, which you must provide.@node Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables@subsection Looking up or entering a string@findex bfd_hash_lookupThe function @code{bfd_hash_lookup} is used both to look up astring in the hash table and to create a new entry.If the @var{create} argument is @code{FALSE}, @code{bfd_hash_lookup}will look up a string.  If the string is found, it willreturns a pointer to a @code{struct bfd_hash_entry}.  If thestring is not found in the table @code{bfd_hash_lookup} willreturn @code{NULL}.  You should not modify any of the fields inthe returns @code{struct bfd_hash_entry}.If the @var{create} argument is @code{TRUE}, the string will beentered into the hash table if it is not already there.Either way a pointer to a @code{struct bfd_hash_entry} will bereturned, either to the existing structure or to a newlycreated one.  In this case, a @code{NULL} return means that anerror occurred.If the @var{create} argument is @code{TRUE}, and a new entry iscreated, the @var{copy} argument is used to decide whether tocopy the string onto the hash table objalloc or not.  If@var{copy} is passed as @code{FALSE}, you must be careful not todeallocate or modify the string as long as the hash tableexists.@node Traversing a Hash Table, Deriving a New Hash Table Type, Looking Up or Entering a String, Hash Tables@subsection Traversing a hash table@findex bfd_hash_traverseThe function @code{bfd_hash_traverse} may be used to traverse ahash table, calling a function on each element.  The traversalis done in a random order.@code{bfd_hash_traverse} takes as arguments a function and ageneric @code{void *} pointer.  The function is called with ahash table entry (a @code{struct bfd_hash_entry *}) and thegeneric pointer passed to @code{bfd_hash_traverse}.  The functionmust return a @code{boolean} value, which indicates whether tocontinue traversing the hash table.  If the function returns@code{FALSE}, @code{bfd_hash_traverse} will stop the traversal andreturn immediately.@node Deriving a New Hash Table Type, , Traversing a Hash Table, Hash Tables@subsection Deriving a new hash table typeMany uses of hash tables want to store additional informationwhich each entry in the hash table.  Some also find itconvenient to store additional information with the hash tableitself.  This may be done using a derived hash table.Since C is not an object oriented language, creating a derivedhash table requires sticking together some boilerplateroutines with a few differences specific to the type of hashtable you want to create.An example of a derived hash table is the linker hash table.The structures for this are defined in @code{bfdlink.h}.  Thefunctions are in @code{linker.c}.You may also derive a hash table from an already derived hashtable.  For example, the a.out linker backend code uses a hashtable derived from the linker hash table.@menu* Define the Derived Structures::* Write the Derived Creation Routine::* Write Other Derived Routines::@end menu@node Define the Derived Structures, Write the Derived Creation Routine, Deriving a New Hash Table Type, Deriving a New Hash Table Type@subsubsection Define the derived structuresYou must define a structure for an entry in the hash table,and a structure for the hash table itself.The first field in the structure for an entry in the hashtable must be of the type used for an entry in the hash tableyou are deriving from.  If you are deriving from a basic hashtable this is @code{struct bfd_hash_entry}, which is defined in@code{bfd.h}.  The first field in the structure for the hashtable itself must be of the type of the hash table you arederiving from itself.  If you are deriving from a basic hashtable, this is @code{struct bfd_hash_table}.For example, the linker hash table defines @code{structbfd_link_hash_entry} (in @code{bfdlink.h}).  The first field,@code{root}, is of type @code{struct bfd_hash_entry}.  Similarly,the first field in @code{struct bfd_link_hash_table}, @code{table},is of type @code{struct bfd_hash_table}.@node Write the Derived Creation Routine, Write Other Derived Routines, Define the Derived Structures, Deriving a New Hash Table Type@subsubsection Write the derived creation routineYou must write a routine which will create and initialize anentry in the hash table.  This routine is passed as thefunction argument to @code{bfd_hash_table_init}.In order to permit other hash tables to be derived from thehash table you are creating, this routine must be written in astandard way.The first argument to the creation routine is a pointer to ahash table entry.  This may be @code{NULL}, in which case theroutine should allocate the right amount of space.  Otherwisethe space has already been allocated by a hash table typederived from this one.After allocating space, the creation routine must call thecreation routine of the hash table type it is derived from,passing in a pointer to the space it just allocated.  Thiswill initialize any fields used by the base hash table.Finally the creation routine must initialize any local fieldsfor the new hash table type.Here is a boilerplate example of a creation routine.@var{function_name} is the name of the routine.@var{entry_type} is the type of an entry in the hash table youare creating.  @var{base_newfunc} is the name of the creationroutine of the hash table type your hash table is derivedfrom.@examplestruct bfd_hash_entry *@var{function_name} (entry, table, string)     struct bfd_hash_entry *entry;     struct bfd_hash_table *table;     const char *string;@{  struct @var{entry_type} *ret = (@var{entry_type} *) entry; /* Allocate the structure if it has not already been allocated by a    derived class.  */  if (ret == (@var{entry_type} *) NULL)    @{      ret = ((@var{entry_type} *)             bfd_hash_allocate (table, sizeof (@var{entry_type})));      if (ret == (@var{entry_type} *) NULL)        return NULL;    @} /* Call the allocation method of the base class.  */  ret = ((@var{entry_type} *)        @var{base_newfunc} ((struct bfd_hash_entry *) ret, table, string)); /* Initialize the local fields here.  */  return (struct bfd_hash_entry *) ret;@}@end example@strong{Description}@*The creation routine for the linker hash table, which is in@code{linker.c}, looks just like this example.@var{function_name} is @code{_bfd_link_hash_newfunc}.@var{entry_type} is @code{struct bfd_link_hash_entry}.@var{base_newfunc} is @code{bfd_hash_newfunc}, the creationroutine for a basic hash table.@code{_bfd_link_hash_newfunc} also initializes the local fieldsin a linker hash table entry: @code{type}, @code{written} and@code{next}.@node Write Other Derived Routines, , Write the Derived Creation Routine, Deriving a New Hash Table Type@subsubsection Write other derived routinesYou will want to write other routines for your new hash table,as well.You will want an initialization routine which calls theinitialization routine of the hash table you are deriving fromand initializes any other local fields.  For the linker hashtable, this is @code{_bfd_link_hash_table_init} in @code{linker.c}.You will want a lookup routine which calls the lookup routineof the hash table you are deriving from and casts the result.The linker hash table uses @code{bfd_link_hash_lookup} in@code{linker.c} (this actually takes an additional argument whichit uses to decide how to return the looked up value).You may want a traversal routine.  This should just call thetraversal routine of the hash table you are deriving from withappropriate casts.  The linker hash table uses@code{bfd_link_hash_traverse} in @code{linker.c}.These routines may simply be defined as macros.  For example,the a.out backend linker hash table, which is derived from thelinker hash table, uses macros for the lookup and traversalroutines.  These are @code{aout_link_hash_lookup} and@code{aout_link_hash_traverse} in aoutx.h.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩久久一区二区| 精品亚洲免费视频| 波波电影院一区二区三区| 欧美激情综合在线| 成人免费毛片a| 亚洲在线观看免费| 日韩欧美在线影院| 成人av动漫在线| 全部av―极品视觉盛宴亚洲| 精品久久久久久久久久久久久久久久久| 国产精品99久久久| 亚洲小说欧美激情另类| 日韩一区二区三区av| 欧美日韩精品二区第二页| 色诱视频网站一区| 黄网站免费久久| 午夜影院久久久| 中文字幕不卡三区| 亚洲丝袜另类动漫二区| 久久久99免费| 国产电影一区在线| 日韩专区一卡二卡| 亚洲一区在线播放| 日本免费在线视频不卡一不卡二| 亚洲精品自拍动漫在线| 久久久影院官网| 1024亚洲合集| 国产精品无人区| 久久女同互慰一区二区三区| 欧美激情在线观看视频免费| 亚洲激情在线播放| 国产主播一区二区| 色域天天综合网| 亚洲精品一区在线观看| 欧美一级日韩一级| 3751色影院一区二区三区| 欧美日韩一级片在线观看| 色av成人天堂桃色av| 一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩一区久久| 国产丝袜在线精品| 日韩综合小视频| aaa亚洲精品| 精品国精品国产| 亚洲一区二区黄色| 国产成人精品亚洲午夜麻豆| 欧美三级电影在线看| 日本一二三不卡| 狠狠色伊人亚洲综合成人| 在线这里只有精品| 国产精品三级av在线播放| 麻豆成人91精品二区三区| 麻豆久久一区二区| 91福利在线免费观看| 中文乱码免费一区二区| 韩国一区二区三区| 欧美日韩国产乱码电影| 亚洲人xxxx| 午夜激情综合网| 另类的小说在线视频另类成人小视频在线| 午夜av一区二区| 色天天综合久久久久综合片| 久久久精品综合| 国产呦精品一区二区三区网站| 国产成人av影院| www国产精品av| 亚洲乱码中文字幕| aaa欧美日韩| 国产精品国产三级国产aⅴ原创| 亚洲欧洲制服丝袜| 99久久精品一区二区| 制服丝袜日韩国产| 日本亚洲视频在线| 欧美日韩一二三| 午夜精品免费在线观看| 欧美日韩一区二区电影| 亚洲成人一区在线| 欧美精品高清视频| 中文成人综合网| 成人动漫在线一区| 亚洲精品美国一| 91免费看`日韩一区二区| 欧美一区二区啪啪| 久久电影国产免费久久电影| 精品嫩草影院久久| 国内成+人亚洲+欧美+综合在线| 精品精品欲导航| 国产精品99久| 椎名由奈av一区二区三区| 91麻豆国产福利在线观看| 亚洲一区二区三区四区在线免费观看 | 视频一区二区欧美| 欧美一卡2卡3卡4卡| 激情欧美一区二区| 中文字幕在线观看一区二区| 91麻豆精品在线观看| 亚洲妇熟xx妇色黄| 欧美精品一区视频| 91麻豆免费在线观看| 日日嗨av一区二区三区四区| 久久夜色精品一区| 99精品视频在线观看免费| 国产精品久久久一本精品| 色婷婷av一区二区三区大白胸| 天天色 色综合| 久久精品网站免费观看| 在线观看亚洲专区| 日本一区二区三区视频视频| 久久精品国产99久久6| 国产三级欧美三级日产三级99| 99精品视频在线播放观看| 视频精品一区二区| **性色生活片久久毛片| 欧美精品乱码久久久久久| 国产精品1区二区.| 亚洲国产视频在线| 久久这里只有精品视频网| 91在线观看下载| 韩国一区二区在线观看| 亚洲国产成人91porn| 欧美经典三级视频一区二区三区| 欧美日本在线观看| 91在线丨porny丨国产| 久久电影网站中文字幕| 亚洲一区在线视频观看| 欧美激情在线观看视频免费| 日韩三级精品电影久久久| 色婷婷久久综合| 成人免费毛片aaaaa**| 狂野欧美性猛交blacked| 亚洲一区二区三区视频在线播放| 国产日本一区二区| 日韩欧美一级二级三级| 国产一区福利在线| 日本麻豆一区二区三区视频| 亚洲欧洲中文日韩久久av乱码| 久久久蜜桃精品| 日韩欧美在线1卡| 欧美日韩国产在线观看| 一本久道久久综合中文字幕| 国产成人自拍在线| 蜜桃传媒麻豆第一区在线观看| 一区二区三区日韩欧美| 日韩一区二区三区观看| 欧美日韩的一区二区| 在线一区二区视频| 91福利精品视频| 色婷婷av一区二区三区大白胸| 国产不卡视频在线播放| 一区二区三区日韩欧美精品| 亚洲人成网站色在线观看| 亚洲三级理论片| 亚洲精品国产精品乱码不99| 亚洲免费av高清| 亚洲色图在线看| 亚洲最新视频在线观看| 夜夜操天天操亚洲| 天堂蜜桃一区二区三区 | 777久久久精品| 制服.丝袜.亚洲.另类.中文| 91麻豆精品国产91久久久久久久久| 欧美色综合久久| 成人免费视频国产在线观看| 国产sm精品调教视频网站| 成人午夜激情片| 99久久国产综合色|国产精品| 97国产一区二区| 欧美日本在线播放| 精品盗摄一区二区三区| 国产精品少妇自拍| 亚洲已满18点击进入久久| 日韩电影免费一区| 国产一区二区三区免费播放| 成人伦理片在线| 欧美日韩在线综合| 日韩三级视频在线看| 欧美国产精品劲爆| 亚洲永久免费av| 韩国成人福利片在线播放| 97超碰欧美中文字幕| 欧美酷刑日本凌虐凌虐| 久久久99精品免费观看不卡| 亚洲欧美在线观看| 日本欧美久久久久免费播放网| 激情国产一区二区| 日本韩国精品在线| 亚洲精品一线二线三线| 亚洲人亚洲人成电影网站色| 日韩av在线发布| av在线这里只有精品| 日韩午夜电影av| ㊣最新国产の精品bt伙计久久| 日韩国产精品久久| www.色综合.com| 欧美大胆一级视频| 一区二区三区.www| 成人免费的视频| 日韩女优av电影| 一区二区三区在线播放| 国产成人综合在线|