Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Safe wrappers for generic collections #104

Open
bavshin-f5 opened this issue Dec 24, 2024 · 0 comments
Open

Safe wrappers for generic collections #104

bavshin-f5 opened this issue Dec 24, 2024 · 0 comments

Comments

@bavshin-f5
Copy link
Member

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant