Skip to content

change newtype_index! to use Nonzero #45842

Closed

Description

@nikomatsakis

So now that @spastorino and @Nashenas88 have converted so much of the compiler to use newtype_index!, I was thinking that we could change the implementation of all these index types from struct Foo(u32) to struct Foo(Nonzero<u32>). This would require adding (and subtracting) 1 internally to convert from the actual index into its internal representation, but it would have the bonus that we could Option<I> for some index type I would still be a single u32-sized value.

This is somewhat hindered by the fact that at least one of these "newtype'd index" types has a public field. We should see if we can change that.

(And , of course, what I really want is something like Nonmax that uses u32::MAX as the sentinel value, since that is not a useful index.)

cc @arielb1, with whom I was discussing this general theme before. Think this could be a good idea? I'm not sure how much people really use Option<I>.

Activity

  1. added
    C-cleanupCategory: PRs that clean code up or issues documenting cleanup.
    T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
    on Nov 7, 2017
  2. spastorino commented on Nov 11, 2017

    @spastorino
    Member

    Hey @nikomatsakis @arielb1, I can make this change but please confirm that we really want to do it before I ahead and provide a PR 😄.

  3. cuviper commented on Sep 1, 2020

    @cuviper
    Member

    (And , of course, what I really want is something like Nonmax that uses u32::MAX as the sentinel value, since that is not a useful index.)

    I believe this has been implemented since #54032, commit 06a041c.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-cleanupCategory: PRs that clean code up or issues documenting cleanup.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions