ngx_list.{c|h} Die Struktur ist sehr einfach. Wenn Sie die vorherige Einführung in Array gelesen haben, können Sie diesen Abschnitt überspringen:
[ cpp] Ansicht
Klartext?
- typedef struct ngx_list_part_s ngx_list_part_t;
- struct ngx_list_part_s {
- void *elts; //Datenbereichszeiger
- ngx_uint_t nelts; //Die tatsächliche Anzahl der Daten
- ngx_list_part_t *next; //Nächster Datenzeiger
- };
- typedef struct {
ngx_list_part_t * last; 🎜>-
ngx_list_part_t part; _t
- size; //Einzelne Datengröße //Standardanzahl der Daten
- ngx_pool_t *pool;//Der Speicherpool, zu dem es gehört
} ngx_list_t;
Klartext?
- //Liste erstellen
-
ngx_list_t * >ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t
- size) {
-
ngx_list_t *list; 🎜> list = ngx_palloc(pool,
sizeof-
(ngx_list_t)); 🎜>
- if (list == NULL) {
- return NULL; 🎜> }
list->part.elts = ngx_palloc(pool, n * size); - //Reservieren Sie etwas Speicherplatz für Listendaten
- if (list->part.elts == NULL) {
-
return NULL;
- }
list-> part.nelts = 0; - //Die tatsächliche Anzahl der Daten ist 0 list->part.next = NULL; ->last = &list->part ;
- list->pool return
list >- //Wenn Sie feststellen, dass es dem Erstellen eines Arrays hier ähnelt, dann haben Sie damit begonnen Fangen Sie an
- }
- //Daten hinzufügen Sie können sehen, dass es im Grunde dasselbe ist wie das Hinzufügen eines Arrays, es gibt auch die Adresse der hinzuzufügenden Daten zurück und führt dann den Vorgang aus
- void *
-
ngx_list_push(ngx_list_t *l) >{
-
last;
-
last = l->last; > if (last->nelts == l ->nalloc) {
- /* the letzter Teil ist voll, weisen Sie einen neuen Listenteil zu */
-
last = ngx_palloc(l->pool, sizeof (ngx_list_part_t));
-
if (last == NULL) {
-
return null; >
(last->elts == NULL) { - return
NULL; >- last ->next = NULL; l->last->next = last;
- l->last = last ;
- }
- elt = (char *) last ->elts + l-> ;size * last->nelts;
- last->nelts++; >} 🎜>[cpp] Ansicht
Klartext?
- //So durchqueren Sie die Liste
- part = &list.part ;
- data = part->elts;
- > (i = 0 ;; i++) {
-
- (i >= Teil->nelts) {
- if (part->next == NULL) {
-
break;
🎜>
part = part->next; >elts;
i=0;
-
} i] ...
-
}
-
Das Obige stellt die Nginx-Quellcode-Studiennotizen (11) vor – Basiscontainer – ngx_list, einschließlich des relevanten Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.