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

Allow prototype references to be actual references #196

Merged
merged 1 commit into from
Jun 18, 2022

Commits on Jun 18, 2022

  1. Allow prototype references to be actual references

    This commit is a rather big design change in how prototypes are written
    and used. Before this, references to other prototypes were just strings.
    If you wanted to get the prototype that it was referring to it was
    necessary to go and look it up in the hashmaps contained within
    GameConfig. This was doable, if inconvenient.
    
    It would be much more convenient if, instead of going through strings
    and hashmaps, we could just directly access the corresponding prototype
    to do this. This commit makes it so this approach works.
    
    The way it does this is like so:
    - Prototypes are parameterized by a type implementing the trait
      PrototypeRef. This is a sealed trait which provides a few associated
      types which are the types of each individual prototype reference.
    - There are two concrete implementors of PrototypeRef: StringRef and
      PtrRef. These set the prototype references to be strings and actual
      references, respectively.
    - Finally, when we convert between GamePrototype and GameConfig the
      string references are converted into real references and the whole
      thing is leaked so they all have a static lifetime.
    
    The disadvantages of this approach is that the types are rather messy
    and that it leaks memory every time a GameConfig instance is
    constructed. However, the amount of memory is rather small and
    GameConfig should only be constructed about once for each execution of
    the program, so I think this downside is worth it.
    
    In addition, GameConfig has an unsafe method to reclaim the leaked
    memory and actually free it. Usually there's no point in using this but
    it might be needed if we want to track down other memory leaks in the
    program.
    steamroller-airmash committed Jun 18, 2022
    Configuration menu
    Copy the full SHA
    905dac4 View commit details
    Browse the repository at this point in the history