Re: [eigen] Indexes: why signed instead of unsigned? |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Indexes: why signed instead of unsigned?
- From: leon zadorin <leonleon77@xxxxxxxxx>
- Date: Sat, 15 May 2010 17:02:56 +1000
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:content-type; bh=y1Vhsn5NQC3W/a4YIvT+8Jw5jfKlB8MBRKChC6PUwmA=; b=RL7WXxD5Su/zYD2IPqXm+MuLosf0IgPyQ6O5/xOHfPb7cM5vJthe2xNtZ0Dw+h/Smz sHNIO70c5gP7qSKL+yYHg46OcREqart8/kxOGXJarCp3ljMAP3iptioKMAjcOsdyfAYu dI85aM8cfdWUu/JnbC2Fdv81uFffbQUpqQjAI=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=s12xnsO1KdGPvqtdDoautovp3vR9Rm4BJUf2BeCR14blkNCCwJtSM9dFmNOIsvgPqd ismguZ0uJA5b0aNo7g/+YivNhYAsSPSvQYtMKgzbgahP811kUjM4w6AlqK/B7vfAKyEB R7nTy/5p2mFb3KHmJ1rOSPVG+yTm1Ramfvs/g=
On 5/14/10, Manoj Rajagopalan <rmanoj@xxxxxxxxx> wrote:
>
>> There remains the question of signed vs. unsigned. In other words,
>> ptrdiff_t vs. size_t. I'm totally unable to decide either way. Help!
>>
>> Benoit
>>
>
> Would it be a bad idea to add the integer-type as a template parameter and
> let
> the user decide based on his/her "taste"?
I like this idea possibly the most.
It allows for the most-customizable approach. In some of my progs, I
have similar mechanisms where the exact declaration of int resolution
and float resolution are being kept outside the logic of the
underlying, possibly library-level, mechanisms and algorithms.
Whether such declarations are explicit template parameters as in "each
template parameter for each resolution" or whether there is a commonly
expected "traits types policy" bundled type which is plugged into the
vector/matrix/etc. as a single template arg, etc. etc. etc. is also
fine by me...
Keeping in mind that one may also want to have a single program which
wants to use two distinct instances of the eigen-related mechanisms:
one with large numeric range/resolution and another not; this approach
(i.e. template-based definition of int resolution) would also allow
for such a finer-level customization.
kind regards
Leon.
> A small, non-eigen, contrived
> example:
>
> template<typename T, typename I=int>
> class vector
> {
> public:
> typedef I idx_type;
> idx_type rows() const;
> idx_type cols() const;
> T const& operator [] (idx_type const& n) const;
> // etc.
> };
>
> Instantiations like vector<double> will default to using int for index-type
> as
> Eigen has all along (for backward compatibility).
>
> Instantiations like vector<double, ptrdiff_t> will cover user-desired cases.
>
> Since Eigen is header-only and doesn't have to worry about
> library-binary-compatibility across platforms and versions, this change
> could
> be a one-size-fits-all solution (assuming there are no caveats that I have
> missed). Of course, it is a bigger headache for the library programmers :-)
> It will also be a bigger testing issue but these tests can be generated
> since
> templates are being used. The suite will just take longer to run.
>
> When writing loops with down-counters maybe some kind of static assertion or
> warning could be included if an unsigned type is used? This could be
> achieved
> with a traits struct.
>
> The documentation could warn users about the pitfalls of using unsigned
> types
> by consolidating this recent discussion.
>
> Someone raised a question about large indices. I had a friend in image
> processing who dealt with very large vectors, since in a raw image we have
> MxN pixels with RGBA channels for each pixel. So it might make sense to
> allow
> for large indices on machines that can support them. Also, we can imagine
> dealing with volumetric image data that resides on disk and is paged into
> RAM
> on-demand by a library like STXXL or Global-Arrays and might require large
> indices for "global" indexing.
>
> More generally, large indices can result from linearizations of
> multidimensional grids - my simulations involve 3D real-space and its
> related
> 3D reciprocal space and I sometimes work with distributions that are
> therefore 6-dimensional. Another example: state-spaces in quantum computing
> grow exponentially with number of qubits (tensor-product spaces of dim
> 2^{#bits}) and related simulations might quickly require large indices when
> the number of bits crosses 31.
>
> Just my 2 bits.
>
> Thanks,
> Manoj
>
>
>
>