dblaikie added a comment.

In D69230#1720255 <https://reviews.llvm.org/D69230#1720255>, @labath wrote:

> In D69230#1720246 <https://reviews.llvm.org/D69230#1720246>, @dblaikie wrote:
>
> > In D69230#1720048 <https://reviews.llvm.org/D69230#1720048>, @labath wrote:
> >
> > > That said, I think you have convinced me that having different optional 
> > > representations for a single type is not a good idea. It's probably 
> > > better to use some form of a "strong" typedef to achieve that instead.
> >
> >
> > I've not followed this part of the thread properly - could you/someone 
> > rephrase the concerns here?
>
>
> Sure. lldb currently has types like lldb::pid_t, and uses identifiers like 
> LLDB_INVALID_PID for the "None" value. I wanted to define pid_t as something 
> like `Optional<some_integer_type, PIDInfo>`, where PIDInfo would specify what 
> is the representation of an "invalid" pid. The reason I abandoned this idea 
> was that this arrangement makes it impossible to represent (in the type 
> system) a pid which is always valid. I now think that it would be better (at 
> least for this use case) to have `pid_t be a "strong" typedef of the integer 
> type. At that point you can specify an "invalid" value for this type even 
> without a separate Optional template argument...


Ah, thanks - yeah, agreed. The invalid state should always be hidden/non-public 
- though I'm not sure that's quite true for DenseMap/Set/etc - yeah, the 
DenseMapInfo traits use ~0 and ~0-1 as the empty and tombstone values for 
integer types.

So I think we should generalize DenseMapInfo traits (or perhaps build 
DenseMapInfo traits, that need two states, on top of the OptionalInfo trait 
that only needs one) into some generalized "I'd like this many bits of state" & 
yeah, probably a default trait argument to Optional - and, yes, I agree that 
it's generally better to provide a wrapper type that excludes the invalid 
states from being publicly accessible, but I guess folks have found it useful 
to be able to have a DenseSet<int> without worrying too much about the fact 
they can't store the max int in that set (because it's the empty value).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69230/new/

https://reviews.llvm.org/D69230



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to