src/core/ngx_data.h - nginx-1.31.4 nginx/ @ 8d9666701

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Nginx, Inc.
  3. */


  4. #ifndef _NGX_DATA_H_INCLUDED_
  5. #define _NGX_DATA_H_INCLUDED_


  6. #include <ngx_config.h>
  7. #include <ngx_core.h>


  8. typedef struct ngx_data_item_s ngx_data_item_t;


  9. typedef struct {
  10.     ngx_data_item_t          *item;
  11.     ngx_data_item_t         **next;
  12. } ngx_data_obj_t;


  13. struct ngx_data_item_s {
  14.     ngx_data_item_t          *next;
  15.     ngx_str_t                 name;
  16.     ngx_uint_t                type;

  17.     union {
  18.         ngx_data_obj_t        object;
  19.         ngx_str_t             string;
  20.         int64_t               integer;
  21.         ngx_uint_t            boolean;
  22.     } data;
  23. };


  24. ngx_data_item_t *ngx_data_new_item(ngx_pool_t *pool, ngx_uint_t type);

  25. void ngx_data_add_item(ngx_data_item_t *obj, ngx_str_t *name,
  26.     ngx_data_item_t *item);

  27. #define NGX_DATA_OBJECT_TYPE  0
  28. #define NGX_DATA_LIST_TYPE    1
  29. #define NGX_DATA_STRING_TYPE  2
  30. #define NGX_DATA_INTEGER_TYPE 3
  31. #define NGX_DATA_BOOLEAN_TYPE 4
  32. #define NGX_DATA_NULL_TYPE    5


  33. #define ngx_data_new_object(pool)                                             \
  34.     ngx_data_new_item(pool, NGX_DATA_OBJECT_TYPE)
  35. #define ngx_data_new_list(pool)                                               \
  36.     ngx_data_new_item(pool, NGX_DATA_LIST_TYPE)
  37. #define ngx_data_new_string(pool)                                             \
  38.     ngx_data_new_item(pool, NGX_DATA_STRING_TYPE)
  39. #define ngx_data_new_integer(pool)                                            \
  40.     ngx_data_new_item(pool, NGX_DATA_INTEGER_TYPE)
  41. #define ngx_data_new_boolean(pool)                                            \
  42.     ngx_data_new_item(pool, NGX_DATA_BOOLEAN_TYPE)
  43. #define ngx_data_new_null(pool)                                               \
  44.     ngx_data_new_item(pool, NGX_DATA_NULL_TYPE)


  45. typedef struct {
  46.     ngx_str_t            name;
  47.     ngx_data_item_t   *(*handler)(uintptr_t data, ngx_pool_t *pool, void *ctx);
  48.     uintptr_t            data;
  49. } ngx_data_decl_t;

  50. #define ngx_data_null_decl  { ngx_null_string, NULL, 0 }

  51. #define NGX_DATA_DECLINE  (ngx_data_item_t *) -1


  52. ngx_data_item_t *ngx_data_obj_handler(uintptr_t data, ngx_pool_t *pool,
  53.     void *ctx);
  54. ngx_data_item_t *ngx_data_obj_fields_handler(uintptr_t data, ngx_pool_t *pool,
  55.     void *ctx, ngx_array_t *fields);

  56. ngx_data_item_t *ngx_data_number_handler(uintptr_t data, ngx_pool_t *pool,
  57.     void *ctx);
  58. ngx_data_item_t *ngx_data_string_handler(uintptr_t data, ngx_pool_t *pool,
  59.     void *ctx);
  60. ngx_data_item_t *ngx_data_boolean_handler(uintptr_t data, ngx_pool_t *pool,
  61.     void *ctx);
  62. ngx_data_item_t *ngx_data_time_handler(uintptr_t data, ngx_pool_t *pool,
  63.     void *ctx);

  64. ngx_data_item_t *ngx_data_struct_int64_handler(uintptr_t data, ngx_pool_t *pool,
  65.     void *ctx);
  66. ngx_data_item_t *ngx_data_struct_int_handler(uintptr_t data, ngx_pool_t *pool,
  67.     void *ctx);
  68. ngx_data_item_t *ngx_data_struct_atomic_handler(uintptr_t data,
  69.     ngx_pool_t *pool, void *ctx);
  70. ngx_data_item_t *ngx_data_struct_str_handler(uintptr_t data, ngx_pool_t *pool,
  71.     void *ctx);
  72. ngx_data_item_t *ngx_data_struct_boolean_handler(uintptr_t data,
  73.     ngx_pool_t *pool, void *ctx);

  74. #endif /* _NGX_DATA_H_INCLUDED_ */