- The phrase `#ifdef CAP_` should never appear anywhere.
- The phrase `#ifndef CAP_` should appear only in sysconfig.h.
- The phrases `#if CAP_` and `#if !CAP_` may appear wherever,
as long as "sysconfig.h" is included first.
The rules for `CAP_FOO` equally apply to `ISFOO`.
There are many one-off macros still tested with `#ifdef`,
including `HAVE_ACHIEVEMENTS`, `PRINT_ACHIEVEMENTS`,
`FAKEWEB`, `FAKE_SDL`, `EASY`, and `WHATEVER`. I don't
have much grasp on what these are used for or how they're
configured, so I'm leaving them alone.
This restricts the "API surface area" of `hookset` to just these three
accessor methods; there's no longer any way to break into a hookset and
iterate it manually, or erase elements from a hookset, or ask for its
size, or anything else that you could have done given the raw `std::map *`.
No more declaring `hookset<T> *hooks_foo`; now it's just
`hookset<T> hooks_foo` at global scope. This clears the way to
make `hookset<T>` into a class type if we want.
This seems to be causing `hookset` to use `std::function` instead of
`hr::function`. Removing this one line shrinks the normal hyperrogue
binary from 9695484 bytes to 9669956 bytes.
This is unnecessary for me when using Makefile.simple, as far as I can tell.
And it's actively harmful when using "mymake", because then we get this
non-inline variable defined in every .o file, which leads to
multiple-definition errors at link time.
Maybe it's no longer needed?