Heim >Backend-Entwicklung >PHP-Tutorial >Anmerkungen zur Nginx-Quellcode-Studie (11) – Basiscontainer – ngx_list

Anmerkungen zur Nginx-Quellcode-Studie (11) – Basiscontainer – ngx_list

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-29 09:10:55790Durchsuche

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?

  1. typedef struct ngx_list_part_s ngx_list_part_t;
  2. struct ngx_list_part_s {
  3. void *elts;  //Datenbereichszeiger
  4. ngx_uint_t nelts; //Die tatsächliche Anzahl der Daten
  5. ngx_list_part_t *next; //Nächster Datenzeiger
  6. };
  7. typedef struct {
  8. ngx_list_part_t * last; 🎜>
  9. ngx_list_part_t part; _t
  10. size; //Einzelne Datengröße        //Standardanzahl der Daten
  11. ngx_pool_t *pool;//Der Speicherpool, zu dem es gehört
  12. } ngx_list_t; Klartext?
    1. //Liste erstellen
    2. ngx_list_t * >ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t
    3. size) {
    4. ngx_list_t *list; 🎜> list = ngx_palloc(pool,
    5. sizeof
    6. (ngx_list_t)); 🎜>
    7. if (list == NULL) {
    8. return NULL; 🎜> }
    9. list->part.elts = ngx_palloc(pool, n * size);
    10. //Reservieren Sie etwas Speicherplatz für Listendaten
    11. if (list->part.elts == NULL) {
    12. return NULL;
    13. list-> part.nelts = 0; 
    14. //Die tatsächliche Anzahl der Daten ist 0 list->part.next = NULL; ->last = &list->part ;  ​​​​​
    15. list->pool return
    16. list >
    17. //Wenn Sie feststellen, dass es dem Erstellen eines Arrays hier ähnelt, dann haben Sie damit begonnen Fangen Sie an
    18. }
    19. //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
    20. void *
    21. ngx_list_push(ngx_list_t *l) >{
    22.                                                                                                     last;
    23. last = l->last; > if (last->nelts == l ->nalloc) {
    24. /* the letzter Teil ist voll, weisen Sie einen neuen Listenteil zu */
    25. last = ngx_palloc(l->pool, sizeof (ngx_list_part_t));
    26. if (last == NULL) {
    27. return null; >
    28. (last->elts == NULL) {
    29.   return
    30. NULL; >
    31. last ->next = NULL; l->last->next = last;
    32. l->last = last ;
    33. }  
    34. elt = (char *) last ->elts + l-> ;size * last->nelts;
    35. last->nelts++; >} 🎜>[cpp] Ansicht Klartext?
    36. //So durchqueren Sie die Liste
    37. part = &list.part ;
    38. data = part->elts;
    39. > (i = 0 ;; i++) {
    40. (i >= Teil->nelts) {
    41. if (part->next == NULL) { 
    42.  break
    43.                            🎜>

    part = part->next; >elts;

    i=0;
    1. } i] ...
    2. }
    3. 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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn