Hey guys,

Kagamin just came up with a simple but great idea to mitigate the pedantic nature of 64-bit to 32-bit integer conversions in cases where using size_t doesn't cut it. Examples are storing arrays of indices into other arrays, where using size_t would be a colossal waste of space if it's safe to assume none of the arrays will be billions of elements long.

int ilength(T)(T[] arr) {
    assert(arr.length <= int.max);
    return cast(int) arr.length;
}

Usage:

int[] indices;
auto array = returnsArray();
indices ~= array.ilength;

This cuts down on the excessive verbosity of an explicit cast that's safe 99.999 % of the time and encourages sprinkling it into code even if for the foreseeable future it will be compiled in 32-bit mode.

Two questions:

1. Is everyone ok with me adding this as a convenience function to std.array? 2. int or uint? I used int only b/c that was the example on the newsgroup, but I think uint makes more sense.

--David Simcha
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to