Refactor the Facts code to avoid the use of templates all over.
Summary:
Facts code used templating to allow unit tests to swap in std::string for StringData, but this meant a lot of classes were templated that didn't really need to be and caused a ton of code to be in headers that could otherwise not be.
This change does several things:
- Removes all string related templating.
- Forward-declares StringData and doesn't require that it be linked in, similarly to how //runtime/base:runtime_core doesn't require some of it's prerequisites to be compiled in immediately.
- For production, links the StringData version of string pointer in and for unit tests does not link in an implementation of StringPtr.
- Creates an alternate implementation of StringData inside the symbol-map-test unit test that wraps a std::string, as well as appropriate methods of StringPtr for accessing this.
Reviewed By: jthemphill
Differential Revision:
D30741297
fbshipit-source-id:
f2dd905086eee7bf5abcd249632ecd25898f46e3