On Tuesday, 23 August 2016 at 20:40:06 UTC, Andrei Alexandrescu wrote:
Currently checkedint (https://github.com/dlang/phobos/pull/4613) stands at 2432 lines and implements a variety of checking behaviors. At this point I just figured I can very easily add custom bounds, e.g. an int limited to 0 through 100 etc. It would take just a few lines because a lot of support is there (bounds hooks, custom min/max) anyway.

struct Checkedint(T, Hook = Abort, T min = T.min, T max = T.max);

For comparion take a look at my solution at:

https://github.com/nordlow/phobos-next/blob/master/src/bound.d

It may answer some of your questions.

The CT-param `exceptional` should be related to your `Hook`.

The solution is currently bloated as it is interleaved with an Optional implementation and packing logic.

The CT-params `optional`, `exceptional`, `packed` and `signed` should probably be merged and stored in a Flags-type.

* When assigning a Checked to another, should the limits be matched statically or checked dynamically?

I'm not sure. I believe the answer lies in the semantic (real-life) interpretations of the boundeed types. If the ranges are related to physical boundaries it should probably be checked at compile-time like we do with units of measurement libraries.

* When composing, do the limits compose meaningfully?

What do you mean with composing? If you're talking about value-range algebra then take a look at the definitions of `opBinary`, `min`, `max` and `abs` in my `bound.d`.

I think all of these questions have answers, but I wanted to gauge the interest in bounded checked integrals. Would the need for them justify additional complications in the definition?

One other additional use is for Ada-style fixed-length-array index types. Such a type can be both bounds-checked and optionally tied to a specific subtype of a fixed-length array. Such an implementation is `IndexedBy` at

https://github.com/nordlow/phobos-next/blob/master/src/typecons_ex.d#L167

which is currently in use in my trie-container

https://github.com/nordlow/phobos-next/blob/master/src/trie.d

Reply via email to