Hi Guido, > the idea was (and still is) to initially allocate all VarArrays from > the space, and only when they are resized (by using add), the array is > copied to the heap. That way, most arrays are still efficiently > allocated in the space (e.g. copying an array always allocates it in > the space again). > > The invariant I had in mind (and which now actually works only since > 3.0.0) is the following: the array has been allocated from the space > iff used==n (and we renamed used to n and n to capacity...). > If you're interested in the correct invariants (or back-porting stuff > to 2.2.0), they are documented in gecode/kernel/array.hpp in the > current version.
thanks for the explanation. The workaround for 2.2.0 is simple: struct MySpace : Space { BoolVarArray bva; MySpace(...) { std::vector<BoolVar> bva_; ... bva_.push_back(v); ... BoolVarArray tmp(this, bva_.size()); for(int i=bva_.size()-1; i>=0; --i) tmp[i]=bva_[i]; bva=tmp; ... } ... }; Cheers, Filip _______________________________________________ Gecode users mailing list us...@gecode.org https://www.gecode.org/mailman/listinfo/gecode-users