This is like CachedHashStringRef, but owns its data.
This lets us use strings inside of DenseMaps.
Differential D25645
[ADT] Add CachedHashString. Authored by jlebar on Oct 15 2016, 3:08 PM.
Details This is like CachedHashStringRef, but owns its data. This lets us use strings inside of DenseMaps.
Diff Detail
Event Timeline
Comment Actions Rafael, Tim and I were looking for a second opinion -- does this seem to you like a sane thing to do? The immediate problem I'm trying to solve here is to convert code that's using SmallSetVector<std::string>, which doesn't work after converting SmallSetVector to use DenseSet, because you can't store an std::string in a DenseSet. Longer term, I hope to use something like this class to let us replace StringSet, StringMap, &co, but what we end up with in order to make that work may look quite different from this. I was just planning to change it as necessary.
Comment Actions Address Rafael's comments (get rid of explicit operators in favor of implicit Comment Actions Couldn't CachedHashString just wrap a CachedHashStringRef? Or even have a single implementation: template<bool Owning>
class CachedHashStringRefBase {
...
~CachedHashStringRefBase() {
if (owning) delete...
}
using CachedHashStringRef = CachedHashStringRefBase<false>;
using CachedHashString = CachedHashStringRefBase<true>;
Comment Actions Sorry, forgot to respond to this. I don't think this is a good idea, because the two classes do not have the same API. In particular, CachedHashString has a conversion to CachedHashStringRef. We would have to enable-if this away. Also the bodies of about half of the functions would be different. At this point we would not be gaining much from this additional layer of indirection. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
CachedHashString is not like std::string, because it doesn't support operations like operator+=. :)