Hello,

Here is a new problem I came across with NaryUnion. As suggested by Christian, I created a fresh region for every new NaryUnion, however I ran into an infinite loop. Below is a minimal example. I located the infinite loop inside the "two(I& i, J& j)" method of NaryUnion, and the reason seems to be that, after the call to "RangeList* t = range(j)" in the "else if" block (I unfortunately cannot give you line numbers as I messed around with print statements), "i.c" and "t" point to the very same RangeList (while they should not). I'm not expert enough to go deeper/further...

Notice that this appears only when region2 is created in a block (in real code, it would be inside a "for" or a "if"), however there is no influence if it is actually used or not.

I guess it is again related to the Region implementation that is going to change, but I think it is worth mentioning it anyway.

Jean-Noël


#include "gecode/driver.hh"
#include "gecode/iter.hh"
using namespace Gecode;
class MySpace:public Space {
public:
    virtual Space* copy(bool share){return this;}
};
int main(int argc, char* argv[]){
    MySpace home;
    Iter::Ranges::Singleton dom0(3,3);
    Iter::Ranges::Singleton dom1(1,1);
    Region region1(home);
    Iter::Ranges::NaryUnion u0;
    {
        Region region2(home);
        u0 = Iter::Ranges::NaryUnion(region2,dom0);//or using region1
    }
    Iter::Ranges::NaryUnion u1(region1,u0,dom1); //loops forever
    /*or
     * Region region3(home);
     * Iter::Ranges::NaryUnion u1(region3,u0,dom1);
     */
    return 0;
}



_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users

Reply via email to