Skip to content

Safe wrappers for generic collections #104

Open
@bavshin-f5

Description

@bavshin-f5

In NGINX we have several "generic" collections (in the most C style of generic, with void * or pointer aliasing):

  • ngx_array_t, an array of known-size void * pointers
  • ngx_list_t, a sequence of arrays of void *
  • ngx_queue_t, an intrusive doubly linked list.
  • ngx_rbtree_t, a red-black tree. This structure is used both as intrusive (ngx_event_t.timer of type ngx_rbtree_node_t) and via ngx_rbtree_node_t.data of type void *.
  • ngx_hash_t, a hash table.

All of those should be representable as strictly typed objects, e.g. Array<NgxStr>, List<TableElement>, Hash<HttpHeader> and have the necessary iteration, random access and modification methods. This way we could limit unsafety to the initialization of a collection wrapper.

There's a crate that is useful for implementing such wrappers, foreign-types. It's not necessary, as for Array<T> we can directly cast ngx_array_t.elts.add(i) to *mut T with almost the same level of (un)safety, but it makes certain steps easier and reduces boilerplate code.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions