ngx_list.{c|h} 構造は非常に単純です。前の配列の概要を読んでいる場合は、このセクションをスキップしてください:
[cpp] ビュー
普通のコピープリント?
- typedefstruct ngx_list_part_s ngx_list_part_s {
- ngx_uint_t s; //実際のデータ数
ngx_list_part_t *next; /次のデータ ポインター- };
typedef- struct {
-
ngx_list_part_t *last; ngx_list_part_t パート
//データ部分 -
- ngx_uint_t nalloc; //デフォルトのデータ数
ngx_pool_t *pool; -
- } ngx_list_t ;
- リスト操作: [cpp]ビュー
普通のコピープリント?
- //リストを作成します
- ngx_list_t *
- ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
- {
- ngx_list_t *リスト;
- list = ngx_palloc(pool, sizeof(ngx_list_t)); //リストのメモリ空間を割り当てる
- if (list == NULL) {
- return NULL;
- }
- list->part.elts = ngx_palloc(pool, n * size) //リストデータ用にメモリスペースを割り当てます
- if (list->part.elts == NULL) {
- list->part.nelts = 0; 実際のデータ数は 0 です
- list-&g t ;part.next = NULL; list->last = &list->part; /最後のものはデータそのものです
- list->size = size; ; データ量
- list->pool = pool; return list; // ここで配列の作成を開始したことを意味します。
- }
- //データの追加 基本的に配列の追加と同じであることがわかりますが、追加するデータのアドレスを返し、操作を実行します
- void。 *
- ngx_list_push( ngx_list_t * l)
- {
-
void last = l->last;
- if
(last->nelts) == l->nalloc) {
- last = ngx_palloc(l->poolのサイズ(ngx_list_パート_t));
-
elts = ngx_palloc (l-> l-> nalloc * l-> ->nelts;
- last->nelts++ return elt;
普通のコピープリント?
-
//リストの走査方法part = &list.part
-
data = part->elts; のための
- ( i = 0 ;; i++) {
-
- if (i >= 部分->nelts) {
- if (部分->次 == NULL ) {
- break
;
- }
- パート = パート->次へ
- データ = パート-> elts;
- i = 0 ;
- }
- ... データ[i]...
-
上記は、nginx ソースコード学習メモ (11) - 基本コンテナ - ngx_list を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人の役に立てば幸いです。