terminal/dep
Michael Niksa 680577f55c
Update til::bitmap to use dynamic_bitset<> + libpopcnt (#5092)
This commit replaces `std::vector<bool>` with `dynamic_bitset<>` by
@pinam45 (https://github.com/pinam45/dynamic_bitset) and with
`libpopcnt` for high-performance bit counting by @kimwalisch
(https://github.com/kimwalisch/libpopcnt).

* [x] In support of performance, incremental rendering, and Terminal
  "not speed enough" as well as my sanity relative to
  `std::vector<bool>`
* [x] Tests updated and passed.
* [x] `LICENSE`, `NOTICE`, and provenance files updated.
* [x] I'm a core contributor. I discussed it with @DHowett-MSFT and
  cleared the licensing checks before pulling this in.

## Details `std::vector<bool>` provided by the Microsoft VC Runtime is
incapable of a great many things. Many of the methods you come to expect
off of `std::vector<T>` that are dutifully presented through the `bool`
variant will spontaneously fail at some future date because it decides
you allocated, resized, or manipulated the `vector<bool>` specialization
in an unsupported manner. Half of the methods will straight up not work
for filling/resizing in bulk. And you will tear your hair out as it will
somehow magically forget the assignment of half the bits you gave it
part way through an iteration then assert out and die.

As such, to preserve my sanity, I searched for an alternative. I came
across the self-contained header-only library `dynamic_bitset` by
@pinam45 which appears to do as much of `boost::dynamic_bitset` as I
wanted, but without including 400kg of boost libraries. It also has a
nifty optional dependency on `libpopcnt` by @kimwalisch that will use
processor-specific extensions for rapidly counting bits. @DHowett-MSFT
and I briefly discussed how nice `popcnt` would have been on
`std::vector<bool>` last week... and now we can have it. (To be fair, I
don't believe I'm using it yet... but we'll be able to easily dial in
`til::bitmap` soon and not worry about a performance hit if we do have
to walk bits and count them thanks to `libpopcnt`.)

This PR specifically focuses on swapping the dependencies out and
ingesting the new libraries. We'll further tune `til::bitmap` in future
pulls as necessary.

## Validation
* [x] Ran the automated tests for bitmap.
* [x] Ran the terminal manually and it looks fine still.
2020-03-25 02:41:10 +00:00
..
chromium Introduce chromium safe math (#4144) 2020-01-16 18:51:06 +00:00
CLI11 Add support for commandline args to wt.exe (#4023) 2020-01-27 15:34:12 +00:00
Console Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
dynamic_bitset Update til::bitmap to use dynamic_bitset<> + libpopcnt (#5092) 2020-03-25 02:41:10 +00:00
gsl@7e99e76c97 deps: upgrade CppWinRT to 2.0.200316.3, gsl to v2.1.0 (#4536) 2020-03-23 17:15:24 +00:00
jsoncpp Switch to jsoncpp as our json library (#1005) 2019-06-04 16:55:27 -05:00
libpopcnt Update til::bitmap to use dynamic_bitset<> + libpopcnt (#5092) 2020-03-25 02:41:10 +00:00
llvm add audit build step for code formatting check (#1208) 2019-06-11 16:23:21 -07:00
NT Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
nuget Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
telemetry Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
wil@e8c599bca6 Update a number of our dependencies (#2301) 2019-08-07 16:43:49 -07:00
Win32K Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
WinAppDriver Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00