Documentation of buf struct

I am not very clear on the purpose of different data members within the
buf structure.(appended below)

After looking through the code, I can figure out the purpose of

  • pos,last (sliding window)

  • file_pos, file_last, start, end ,(data start and end)

  • tag, (which module owns this buf)

  • file (name of the file if any associated with the data)

  • memory(cannot be released by any module that processes the buf).

  • mmap (buf is memory map)

  • last_in_chain(last in the chain of bufs)

  • last_buf(last in the response)

  • For temporary: can the temporary buffer be released by any module
    that processes it or can it be released by only the module that owns it
    as indicated in the tag

It will be good if the purpose of other data members is described also.
Thanks for any inputs

struct ngx_buf_s { u_char *pos; u_char *last;
off_t file_pos; off_t file_last;
u_char start; / start of buffer */ u_char
end; / end of buffer */ ngx_buf_tag_t tag;
ngx_file_t *file; ngx_buf_t *shadow;

/* the buf's content could be changed */    unsigned         

/* * the buf’s content is in a memory cache or in a read only
memory * and must not be changed / unsigned
the buf’s content is mmap()ed and must not be changed /
unsigned mmap:1;
unsigned recycled:1; unsigned in_file:1;
unsigned flush:1; unsigned sync:1; unsigned
last_buf:1; unsigned last_in_chain:1;
unsigned last_shadow:1; unsigned temp_file:1;
STUB */ int num;};