Blitz logo

Blitz Bugs :

From: N Smethurst (nick.smethurst_at_[hidden])
Date: 2004-09-14 13:17:53


Hello there

I discovered a bug in Array. When an array is initialised to zero size, the
begin() iterator does not equal the end() interator.

For example:
    Array<float, 1> vec(0);
    Array<float, 1>::iterator begin = vec.begin();
    Array<float, 1>::iterator end = vec.end();
    
    cout << "begin == end : " << (begin == end) << endl;
    cout << "begin != end : " << (begin != end) << endl;

This gives:
    begin == end : 0
    begin != end : 1

However, when an array is created then resized, there is no bug:
    Array<float, 1> vec;
    vec.resize(0);
    Array<float, 1>::iterator begin = vec.begin();
    Array<float, 1>::iterator end = vec.end();
    cout << "begin == end : " << (begin == end) << endl;
    cout << "begin != end : " << (begin != end) << endl;

This gives:
    begin == end : 1
    begin != end : 0

The behaviour is the same with higher dimension arrays:
    Array<float, 2> mat(0, 0);
    // begin != end
    Array<float, 2>::iterator begin = mat.begin();
    Array<float, 2>::iterator end = mat.end();

    Array<float, 2> mat1;
    mat1.resize(0, 0);
    // begin1 == end1
    Array<float, 2>::iterator begin1 = mat1.begin();
    Array<float, 2>::iterator end1 = mat1.end();

Regards

Nicholas