ngx_list.{c|h} 구조는 매우 간단합니다. 배열에 대한 이전 소개를 읽었다면 다음 섹션을 건너뛰어도 됩니다.
[cpp] 보기
일반 카피프린트?
- typedef struct ngx_list_part_s ngx_list_part_t;
struct-
ngx_list_part_s {
void-
*elts; //데이터 영역 포인터 ngx_uint_t nelts
//실제 데이터 개수-
ngx_list_part_t *next
//다음 데이터 포인터-
};
- typedef
- struct { ngx_list_part_t * last; 🎜>
ngx_list_part_t 부분; _t- size;
//단일 데이터 크기- //기본 데이터 개수
- ngx_pool_t *pool //속해 있는 메모리 풀 } ngx_list_t;
일반 카피프린트?
- //목록 생성
-
ngx_list_t * >ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t
- 사이즈) {
- ngx_list_t *list
-
list = ngx_palloc(pool, sizeof
- (ngx_list_t)) 🎜> if (목록 == NULL) {
- 반환 NULL
-
} list->part.elts = ngx_palloc(pool, n * size) > (list->part.elts == NULL) {
- 반환 NULL
} -
list->part.nelts = 0; //실제 데이터 개수는 0개입니다
-
list-> ;part.next = NULL; list->last = &list->part > // 각 데이터의 크기 초기화
- list- & gt; nalloc = n
// 사전 설정된 데이터 양 -
list->pool
- return list; >
- //여기서 배열을 만드는 것과 유사하다고 판단되면 시작한 것입니다. 시작하세요
}- //데이터 추가 기본적으로 배열을 추가하는 것과 동일하다고 볼 수 있으며 추가할 데이터의 주소도 반환한 후 연산을 수행합니다.
- void *
-
ngx_list_push(ngx_list_t *l) >{
-
마지막;
-
마지막 = l->마지막
if- (last->nelts == l ->nalloc) {
-
/* the 마지막 부분이 꽉 찼습니다. 새 목록 부분을 할당하세요. */-
last = ngx_palloc(l->pool,
sizeof- (ngx_list_part_t));
if-
(last == NULL) {
반환-
NULL, } >
만약-
(last->elts == NULL) {
return- NULL >
last; ->next = NULL l->last->next = 마지막 - l->last = 마지막; ;
} -
elt = (문자 *) 마지막 ->elts + l-> ;size * last->nelts
last->nelts++ - return elt; >
- } 🎜>[cpp] 보기
일반 카피프린트?
-
//리스트 순회 방법
-
- part = &list.part ;
-
data = part->elts > (i = 0 ;; i++) {
- (i >= 부분->nelts) {
- if
(part->next == NULL) {
break
; - 🎜>
부분 = 부분->다음 데이터 = 부분- >elts; i=0; } i] ... -
}
위 내용은 nginx 소스코드 연구 노트(11) - 기본 컨테이너 - ngx_list 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.